我目前正在使用pip进行Python的软件包管理,但是我的团队中有些人在重新运行我们的代码库时会忘记重新运行pip install -r requirements.txt,然后会对为什么程序不能正常运行感到困惑。因此,是否有任何方法可以将该命令与他们必须执行的其他操作(如git pull
)绑定在一起,以便为他们完成该操作,而不需要考虑它?
我目前正在使用pip进行Python的软件包管理,但是我的团队中有些人在重新运行我们的代码库时会忘记重新运行pip install -r requirements.txt,然后会对为什么程序不能正常运行感到困惑。因此,是否有任何方法可以将该命令与他们必须执行的其他操作(如git pull
)绑定在一起,以便为他们完成该操作,而不需要考虑它?
.git
部分打包成tar/zip文件,并让人们从中复制、提取和工作。尽管我仍然希望首先教育您的用户,将这种极端措施保留给绝望的情况。 - ThorSummonerpost-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
文件中有更改时,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
< p > @$
将所有命令参数传递给脚本化的 git pull
,虽然我不能保证这在所有情况下都能百分之百地工作,但它应该涵盖大多数用例。
你可以随意命名它,我没有测试过用脚本替换 git 内部命令,例如我不建议将其命名为 git-pull
,因为那可能会与真正的 git-pull 冲突并进入循环,但 git 也可能足够聪明,不会递归执行。
当 git 扩展自定义命令时,在 git
关键字后的第一个连字符会被删除,例如要运行 git-pull2
,您可以将其直接运行为 git-pull2
或作为嵌入式 git 命令运行,如 git pull2
。