如何让git忽略某些文件冲突和差异?

时间:2012-11-16 23:42:21

标签: git merge diff

我们有一个自动生成的javascript文件,在我们的git存储库中进行跟踪。问题是它在注释中包含一个(无用的)时间戳,这通常会为我们创建琐碎的合并冲突。我想避免发生这些冲突。

我以为我找到了a solution with .gitattributes and filter/smudge。我按以下方式设置它,以便在提交或结帐时从文件中删除此时间戳行:

.gitattributes:

<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>.*$//\"

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

有没有更好的方法来避免合并冲突,但也隐藏了对文件这一部分的本地更改?

2 个答案:

答案 0 :(得分:3)

我可能会错误地解释您的问题,但听起来您可以使用ourstheirs合并策略来处理相关文件。根据{{​​3}}的答案,您可以执行以下操作:

.gitattributes:

file.js merge=ours

的.git /配置:

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

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

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

答案 1 :(得分:1)

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