2012-10-10 108 views
3

现在我已经掌握了Python的包管理,但是当我重新运行我们的代码库,然后对为什么不起作用感到困惑时,我一直让团队中的人员忘记重做pip install -r requirements.txt。 。也就是说,有没有什么办法可以将命令绑定到其他任何他们必须做的事情上,比如git pull,这样它们就可以为他们完成,而且他们不需要考虑这个问题?在Git Pull上使用Pip install -r requirements.txt?

+0

我想看看[fabric](http://docs.fabfile.org/en/1.4.3/index.html) – jterrace

+0

一个脚本化的解决方案可以为你自己,也可能让人意识到他们如果/当他们不想考虑他们在做什么,应该使用脚本解决方案;但教导/引起人们思考他们的行为并非脚本化解决方案所能做到的。 – ThorSummoner

回答

4

您可以在git post-merge hook中使用shell脚本,每当合并发生时都会执行该脚本。请注意,这个钩子会在每次合并时执行(实际上所做的一切都是合并,但并非所有合并都是合并)。

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

+0

如果你想发布一个嵌入了这样一个钩子的回购,你可以,擦洗你的.git/config和其他git元数据,以确保你不会分发其他限制;然后打包整个git仓库,或者只包含作为焦油/压缩文件的'.git'部分,然后让人们从中复制 - 提炼 - 工作。尽管我仍然想要首先教育你的用户,但是对于绝望的场景来说,保留一些非常激动人心的东西。 – ThorSummoner

2

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使文件可执行。

就是这样。现在,每次你做混帐合并,requirements.txt文件pip install将会自动运行。

1

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

本质上,它是

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

git pull [email protected] 
pip install -r requirements.txt 

@$将通过所有命令参数的脚本git pull,虽然我不能保证,将工作的全部100%的时间,但它应该覆盖大多数使用情况。

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

当混帐扩展git关键字删除后自定义命令第一个连字符,如运行git-pull2你可以从字面上运行它git-pull2或作为嵌入式的git命令git pull2

相关问题