git - .gitattributes 和单个文件的 merge 策略

标签 git

我的(网络)应用程序有一个主分支和一个测试分支。这些项目几乎相同,除了一个设置应用程序的文件,比如“setup”。

每当我将一个分支 merge 到另一个分支时,我希望该分支保留其设置版本。也就是说,git 不应尝试 merge 对该文件的更改。

我关注了 guidance from the Pro Git book并创建了一个 .gitattributes 文件,其中包含“setup merge=ours”这一行。但是,这不起作用 - 如果我引入冲突,则无论是快进 merge 还是。

(准确地说:

$: mkdir gitest
$: cd gittest
$: git init
$: echo "setup merge=ours" >> .gitattributes 
$: echo "master" >> setup
$: git add setup .gitattributes
$: git commit -a -m ...
$: git branch test
$: git checkout test
$: echo "test" >> setup
$: git commit -a -m ...
$: git checkout master
$: git merge test

预期结果:setup 包含单词“master”,而不是 git 执行 ff merge 并且 setup 是“test”。)

最佳答案

我有同样的错误,只需在 .git/config 中定义一个“我们的” merge 驱动程序就可以解决这个问题:

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

由于 true 始终返回 0,因此保存当前状态的临时文件不会更改,并将保留为最终版本。

您可以在此处阅读有关 merge 驱动程序的更多信息:http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html#_defining_a_custom_merge_driver

附录:

这在实际调用驱动程序的任何时候都有效,并且这似乎仅在提交更改相同文件(git merge 属性)时才会发生。如果单个分支中有更改,则不会调用驱动程序。

关于git - .gitattributes 和单个文件的 merge 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5465122/

相关文章:

git - 为什么 "git push origin master"到 github 失败?

git - 如何在 git 存储库中获取旧版本文件的副本?

Gitolite 对分支的权限

ruby - 没有注释的 Git diff

git - vscode,git diff View : how show only changes

javascript - 使用 git 创建美化 js 的自定义过滤器

Git - 使用 .gitattributes 强制一致的行结尾时很奇怪

git - .gitignore 文件仍显示在未跟踪列表中

git - 如何用jgit做 "git grep -e <pattern>"?

git - Pycharm 和 bitbucket 插件