Git:在合并期间忽略一些文件(将一些文件限制为一个分支)

dba*_*osa 53 git merge

我有两个分支,AB.科A有一个目录examples与被跟踪的git一些文件,这些文件应该不会出现分支B.在我的工作流程,我不合并作出改变AB经常,每次这是一个问题,有一些变化examples.目前我手动执行此操作:在合并后删除文件或解决当我已经删除的文件发生更改时的冲突.

合并期间是否可以忽略这些文件?(或者是否可以将某些文件限制为一个分支(A)或远离一个分支(B)?)


让我试着解释一下为什么我这样做: A是博客的骨架(模板,脚本等),B是我的博客(A充满了我自己的帖子,图片,草稿等).A是公共的,我试图让它通用给别人看,并使用它,但因此我需要一些帖子作为展示/测试(examples目录).每次更改A并稍后合并到B我的博客实例上进行此更改 - 这样所有新示例都会出现,B并且所有已删除的示例B都已更改,A因为上次合并导致冲突.

Dav*_*vid 54

我在这里找到了一个很好的答案:stackoverflow Q332528

它使用了从这里获得的想法:Pro-Git合并策略

这是它的副本:

假设您要排除该文件 config.php

在分支A上:

  1. 在同一个目录中创建一个名为'.gitattributes'的文件,使用以下行:config.php merge = ours.这告诉git在文件合并时使用什么策略.在这种情况下,它始终保持您的版本,即.您正在合并的分支上的版本.

  2. 添加.gitattributes文件并提交

在分支B上:重复步骤1-2

现在尝试合并.您的文件应保持不变.


编辑:
git的书有关merge=ours,"一个非常有用的选项是通知Git不会尝试合并特定的文件,当他们有冲突,而是超过别人的使用合并的一面."

因此,这个答案并不适用于问题.pjmorse关于使用子模块的答案很好.

另一种选择是使用子树合并,这可能会带来额外的好处.

  • 这对我来说不起作用,无论我将myfile merge = our行放在.gitattributes还是.git/info/attributes中.据我所知,新文件和没有文件之间没有合并冲突,因此没有策略问题:当我合并时,我想要排除的文件在"要提交的更改"中显示为"新文件:myfile". (4认同)
  • 有一个更新的[文章](https://git-scm.com/book/uz/v2/Customizing-Git-Git-Attributes),声明你还必须通过`$ git config声明我们的合并策略 - global merge.ours.driver true` (3认同)
  • 正确,仅当您已经拥有自己版本的文件时,此方法才有效。我已经编辑并添加了一些信息。 (2认同)

raf*_*afl 3

您可能会发现 git 的rerere命令很有用。这样您就可以记录某些合并冲突的解决方案并在以后重复使用。

  • 我尝试遵循此操作:http://progit.org/2010/03/08/rerere.html 但它不起作用...冲突后,`git rerere status`和`git rerere diff`不起作用显示任何东西。我已经检查过了,它在我的 ~/.gitconfig 中,我在我的存储库中创建了目录 .git/rr-cache...无论如何,我可以看到这适用于在“examples”中更改文件的情况` 在 `A` 上。这也适用于新文件吗?(如果在“examples”中创建了一个新文件,则该文件的合并不会发生冲突 - 该文件将被添加到“B”)。 (2认同)