Git:如何处理不同的shebang

Nic*_*man 11 git shebang

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

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

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

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

我使用git,但我不会在任何方面称自己为专家.

Mik*_*kel 18

将其更改为

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

要么

#!/usr/bin/env ruby
Run Code Online (Sandbox Code Playgroud)

然后它应该适用于您的所有系统,前提是您的PATH环境变量中包含python和ruby .


Chr*_*ial 5

问题的解决方案是 git\xe2\x80\x99s 涂抹/清洁过滤器规则。这允许您设置过滤器,在签出时修改文件并在签入时撤消这些更改。这里\xe2\x80\x99是一个漂亮的图形:

\n

在此输入图像描述

\n

首先通过向您添加类似以下内容来设置可以在两个方向上进行更改的过滤器.git/config。smudge 过滤器将存储库中的文件转换为工作副本,clean 过滤器会撤消该更改。重要的是,运行 smudge -> clean 会产生准确的原始文件。#!~/local/bin/python如果工作副本位于#!/usr/bin/env python存储库中,此处给出的过滤器将替换第一行

\n
[filter "pyshebang"]\n    smudge = sed \'1s?^#!/usr/bin/env python$?#!~/local/bin/python?\'\n    clean = sed \'1s?^#!~/local/bin/python$?#!/usr/bin/env python?\'\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
*.py filter=pyshebang\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

我建议阅读污迹过滤器,以了解\xe2\x80\x99s 的详细信息。

\n