我们有一个自动生成的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'仍然显示为已修改,因为本地(预过滤)副本包含时间戳行(但提交的文件没有)。
有没有更好的方法来避免合并冲突,但也隐藏了对文件这一部分的本地更改?
答案 0 :(得分:3)
我可能会错误地解释您的问题,但听起来您可以使用ours
或theirs
合并策略来处理相关文件。根据{{3}}的答案,您可以执行以下操作:
.gitattributes:
file.js merge=ours
的.git /配置:
[merge "ours"]
name = Keep my file
driver = true
这将始终保留您的文件版本。
theirs
合并只是稍微困难 - 您不能只将驱动程序更改为false
,您需要定义一个脚本来保留其更改。上面链接的问题更详细地介绍了theirs
策略。
答案 1 :(得分:1)
您可以修改生成该文件的程序,使其不包含时间戳,或者为程序写一个可以删除时间戳的包装器。