Git:跟踪名称发生变化的文件

时间:2015-08-14 18:40:21

标签: git

我正在使用一些专有软件,该软件配置有存储在特定目录中的十几个文本文件。该软件在处理用户修改时表现相对较好,它在每个文件的单独部分中运行时对文件进行修改。但是我想跟踪这些变化,包括我手动制作的变化和软件制作的变化。

通常情况下,这对Git来说是一个很好的用例:使配置目录成为一个Git仓库,无论它们是如何制作的,它都会识别出这些变化。我可以查看差异,提交更改,使用分支一次尝试一系列更改,回滚,甚至在出现问题时使用git bisect。我可以在一台机器上将repo推送到GitHub并将其拉回到其他机器上,并且可以将其中的更改与另一台机器上的更改合并。

问题是其中一个文件包含用户名。因此,在一个网站上,该文件为trey.conf,另一个网站为treyharris.conf。我需要Git将这些文件识别为同一个文件。

符号链接似乎是一个显而易见的选择:将文件重命名为静态名称,如user.conf,并将其他名称符号链接到该文件。这适用于软件的读取配置和手动配置更改。不幸的是,当写出更改时,软件不尊重符号链接,并用普通文件替换trey(harris)?[.]conf符号链接。

到目前为止,我只是通过将特定于用户名的文件移回user.conf并恢复符号链接,每次我想要提交和修复情况时都会处理这个问题。但随着时间的推移,这变得越来越烦人。

我可以使用一些Git魔法来纠正这个问题吗?我想也许过滤器是要走的路,弄脏${USER}.conf并清理回user.conf,但我无法弄清楚如何使其正常工作。

2 个答案:

答案 0 :(得分:1)

Git可以检测自己的重命名。只要保留文件的名称,不要打扰符号链接。在进行外部更改后,运行git add -A .将所有更改添加到索引。如果文件仍然足够相似,git status现在应该显示“重命名:treyharris.conf - > trey.conf”。某些git命令需要特殊选项才能启用重命名检测,例如git loggit diff都需要-M标志来检测重命名。

答案 1 :(得分:1)

不要使用符号链接,请尝试使用硬链接。

符号链接可以被认为是一个特殊文件,它包含另一个要使用的文件名。它可以被真实文件覆盖。

硬链接是指多个文件名都指向相同的基础数据。硬链接看起来就像普通文件,因为它是普通文件;所有普通文件都是硬链接。

尝试ln user.conf trey.confln user.conf treyharris.conf,看看会发生什么。

否则,您遇到了尝试将版本控制用作构建和发布管理工具的一般问题。您可能能够破解工作,但实际上您需要的是构建和发布脚本。