在Git Pull上点击安装-r requirements.txt?

时间:2012-10-10 18:31:30

标签: python git pip

我现在已经通过pip获得了Python的包管理,但我仍然让我的团队中的人员在重新运行我们的代码库时忘记重做pip install -r requirements.txt,然后对为什么这些东西没有感到困惑工作。也就是说,有没有什么方法可以将这个命令绑定到他们总是要做的其他事情上,比如git pull,这样就可以为他们完成,而他们不需要考虑它?

3 个答案:

答案 0 :(得分:4)

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

我不知道克隆存储库时是否可以自动安装客户端钩子,但是你应该至少能够安装一次合并后的钩子而不是让你的团队记住做某事随着每一次拉动。

答案 1 :(得分:2)

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

#/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 merge时,requirements.txt文件pip install中的更改都会自动运行。

答案 2 :(得分:1)

如果您有权将工具添加到所有用户的路径中;例如,你们都在一台服务器上工作。创建一个脚本来做这件事是微不足道的。

基本上就是

#!/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。 1}}。