2011-02-19 71 views
11

人们如何处理本地和远程的不同shebang?Git:如何处理不同的shebang

例如,我的本地python是/ usr/bin/python,而我的web主机是在〜/ local/bin/python中专用的python。主要开发人员可能在/ usr/bin/ruby​​中有ruby,而我的是/ usr/local/bin/ruby​​。

我手动编辑shebang,但随后git会将其标记为更改。理想情况下,我希望git忽略文件的第一行,或者忽略文件中行的正则表达式匹配。

在我看来,这一定是一个非常普遍的问题,但我找不到任何提及。

我使用git,但我不会在任何伸展中称自己为专家。

+5

这不就是`#!/ usr/bin/env python`的目的吗? – coreyward 2011-02-19 05:58:57

+0

@coreyward:查看[这个问题](http://unix.stackexchange.com/q/29608/10454)和[我的回答](http://unix.stackexchange.com/a/29620/10454)讨论`#!/ usr/bin/env`黑客的优点和缺点。 – 2013-04-28 18:21:43

回答

18

将其更改为

#!/usr/bin/env python 

#!/usr/bin/env ruby 

那么就应该对所有的系统工作,只要你有你的PATH环境变量Python和Ruby。

+0

PATH是问题所在。我在我的web主机上有〜/ local/bin/python中的定制python。我无法更改Web服务器的PATH,因为我没有root用户。每次我进行拉动或推动时都必须改变shebang,这有点令人讨厌。 – 2011-02-20 02:35:54

0

这属于评论,但我没有足够的声望呢...你可以删除哈希爆炸,并始终运行它python当你从命令行运行...也许...

3

你的问题的解决方案是git的污迹/清理过滤规则。这允许您设置在结账时修改文件的过滤器,并在签入时撤销这些更改。这里是一个不错的图形:

enter image description here

首先成立了,可以做两个方向的改变,加入类似下面给你.git/config的过滤器。涂抹过滤器会将回购中的文件转换为工作副本,干净的过滤器会解除更改。运行涂抹 - >清理非常重要,就是原始文件。这里给出的过滤器将与#!~/local/bin/python取代第一线的工作拷贝,如果它是在回购

[filter "pyshebang"] 
    smudge = sed '1s?^#!/usr/bin/env python$?#!~/local/bin/python?' 
    clean = sed '1s?^#!~/local/bin/python$?#!/usr/bin/env python?' 

现在加入这样的行激活此过滤器的.git /信息/属性(创建文件#!/usr/bin/env python如果不存在的话):

*.py filter=pyshebang 

如果你的Python文件不.py结束,只是在正确的文件/整个文件夹/所有文件配置过滤器。如果你正确设置了过滤器,它将只会用python shebang改变文件。

我建议阅读smudge filters,了解详情。