Python Pip安装-r requirements.txt在Git Pull上?

Python Pip安装-r requirements.txt在Git Pull上?,python,git,pip,Python,Git,Pip,我现在已经让Python的包管理通过了pip,但是我的团队中一直有人在重新运行我们的代码库时忘记重做pip install-r requirements.txt,然后对为什么这些东西不起作用感到困惑。也就是说,有没有什么方法可以将该命令绑定到他们无论如何都必须执行的其他操作中,比如git pull,这样就可以为他们完成,他们就不需要考虑它了?您可以在git中使用shell脚本,每当发生合并时就会执行该脚本。请注意,此钩子将在每次合并时执行(所有实际执行某项操作的拉取都是合并,但并非所有合并都是拉

我现在已经让Python的包管理通过了pip,但是我的团队中一直有人在重新运行我们的代码库时忘记重做pip install-r requirements.txt,然后对为什么这些东西不起作用感到困惑。也就是说,有没有什么方法可以将该命令绑定到他们无论如何都必须执行的其他操作中,比如
git pull
,这样就可以为他们完成,他们就不需要考虑它了?

您可以在git中使用shell脚本,每当发生合并时就会执行该脚本。请注意,此钩子将在每次合并时执行(所有实际执行某项操作的拉取都是合并,但并非所有合并都是拉取)


我不知道在克隆存储库时是否可以自动安装客户端钩子,但您至少应该能够安装一次合并后钩子,而不是让您的团队记住每次拉动都要做些什么。

a
post merge
钩子在这里应该可以正常工作。在项目的
.git
目录中打开文件
.git/hooks/post merge
。将以下代码段粘贴到文件中

#/usr/bin/env bash
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"

check_and_run() {
       echo "$changed_files" | grep --quiet "$1" && eval "$2"
}

check_and_run requirements.txt  "/path/to/virtualenv/bin/pip install -r /path/to/requirements.txt"
运行
chmod+x post merge
使文件可执行


就这样。现在,每当您进行git合并时,如果
requirements.txt
file
pip install
中有更改,则会自动运行。

如果您有能力向所有用户的路径添加工具;你们都在一台服务器上工作。创建一个脚本来实现这一点并不重要

基本上是这样的

#!/usr/bin/env bash
# Save as `git-pull2`
# Mark as executable (chmod +x git-pull2)
# Include on system path.

git pull $@
pip install -r requirements.txt
@$
将把所有命令参数传递给脚本化的
git pull
,尽管我不能保证它在所有时间都能100%工作,但它应该涵盖大多数用例

你可以随意命名它,我还没有测试过用脚本命令替换git内部命令,例如我不建议将它命名为
git pull
,因为这可能与真正的git pull冲突并进入循环循环,但git也可能足够聪明,不会像那样递归


当git扩展自定义命令时,去掉
git
关键字后的第一个连字符,例如要运行
git-pull2
,您可以按字面意思将其作为
git-pull2
运行,或者作为嵌入式git命令作为
git-pull2

运行,我会寻找一个脚本化的解决方案,可能还有一些人,他们可以意识到,如果/当他们不想思考自己在做什么时,他们应该使用脚本解决方案;但是,教/引导人们思考他们的行为并不是脚本化解决方案所能做到的。如果你想发布嵌入了这样一个钩子的repo,你可以删除你的.git/config和其他git元数据,以确保你没有发布其他限制;然后打包整个git repo,或者仅仅打包作为tar/zip的
.git
部分,让人们复制摘录并从中工作。尽管我仍然想首先推动对用户的教育,为绝望的场景保留如此激烈的内容。