3

我们有一个自动生成的 javascript 文件,该文件在我们的 git 存储库中进行跟踪。问题是它在评论中包含一个(无用的)时间戳,这通常会为我们造成微不足道的合并冲突。我想避免这些冲突。

我以为我找到了 .gitattributes 和 filter/smudge 的解决方案。我按以下方式设置它,以便在提交或签出时从文件中删除此时间戳行:

.git 属性:

<the file>.js filter=tsfilter
<the file>.js smudge=tsfilter

.git/配置:

[filter "tsfilter"]
      clean = perl -pe \"s/\\/\\/.*<the pattern>.*$//\"
      smudge = perl -pe \"s/\\/\\/.*<the pattern>.*$//\"

虽然这似乎消除了合并冲突,但它引入了另一个烦恼,因为该文件现在仍处于不断修改的状态。也就是说,“状态”仍然显示它已修改,因为本地(预过滤)副本包含时间戳行(但提交的文件不包含)。

有没有更好的方法来解决这个问题,既可以避免合并冲突,又可以隐藏对文件这一部分的本地更改?

4

2 回答 2

3

我可能错误地解释了您的问题,但听起来您可以使用相关文件的策略ourstheirs合并策略。根据对这个问题的回答,您可以执行以下操作:

.git 属性:

file.js merge=ours

.git/配置:

[merge "ours"]
    name = Keep my file
    driver = true

这将始终保留您的文件版本。

合并只是稍微困难一些theirs——你不能只是将驱动程序更改为false,你需要定义一个脚本来保存它们的更改。上面链接的问题theirs更详细地介绍了一种策略。

于 2012-11-17T00:17:50.017 回答
1

您可以修改生成该文件的程序以不包含时间戳,或者为将删除时间戳的程序编写一个包装器。

于 2012-11-17T01:21:00.517 回答