11

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

例如,我的本地 python 是 /usr/bin/python,而我的网络主机是专门构建的 python,位于 ~/local/bin/python。主要开发人员可能在 /usr/bin/ruby 拥有 ruby​​,而我的则是 /usr/local/bin/ruby。

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

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

我使用 git,但无论如何我都不会称自己为专家。

4

3 回答 3

18

将其更改为

#!/usr/bin/env python

或者

#!/usr/bin/env ruby

然后它应该可以在您的所有系统上运行,前提是您的PATH环境变量中有 python 和 ruby​​。

于 2011-02-19T05:58:53.560 回答
4

您的问题的解决方案是 git 的 smudge/clean 过滤规则。这允许您设置过滤器,在签出时修改文件并在签入时撤消这些更改。这是一个很好的图形:

在此处输入图像描述

首先通过向您添加以下内容来设置可以双向更改的过滤器.git/config。涂抹过滤器将 repo 中的文件转换为工作副本,而干净的过滤器撤消了该更改。重要的是运行 smudge -> clean 产生的正是原始文件。#!~/local/bin/python如果工作副本#!/usr/bin/env python在 repo 中,此处给出的过滤器将替换工作副本中的第一行

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

现在通过向 .git/info/attributes 添加这样的行来激活此过滤器(如果该文件不存在,则创建该文件):

*.py filter=pyshebang

如果您的 python 文件不以 结尾.py,只需在正确的文件/整个文件夹/所有文件上配置过滤器。如果您正确设置过滤器,它只会使用 python shebang 更改文件。

我建议阅读涂抹过滤器,以了解正在发生的事情的详细信息。

于 2013-04-28T18:12:52.963 回答
0

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

于 2013-04-28T17:17:26.520 回答