您的问题的解决方案是 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 更改文件。
我建议阅读涂抹过滤器,以了解正在发生的事情的详细信息。