Git:合并时忽略一些文件(保留一些文件限制在一个分支上)

我有两个分支, AB 分支A有一个由git跟踪的文件的目录examples ,这些文件不应该出现在分支B 。 在我的工作stream程中,我常常将A所做的更改合并到B ,每当examples发生一些变化时,这都是个问题。 目前我正在手动执行这个操作:合并后擦除文件或解决冲突时,当我已经擦除的文件发生变化时。

在合并期间可以忽略这些文件吗? (或者可以将一些文件限制在一个分支( A )或者一个分支( B )之外?


让我试着解释为什么我这样做: A是博客(模板,脚本等)的骨架, B是我的博客(充满了我自己的post,图像,草稿等)。 A是公开的,我试图让其他人看起来和使用它,但正因为如此,我需要一些职位作为展示/testing( examples目录)。 A每一个变化,然后被合并到B以便在我的博客实例上进行这种更改 – 这样,所有新的示例都显示在BB所有已删除的示例在上次合并后发生了冲突。

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

它使用从这里采取的想法: Pro-Git合并策略

这里是它的一个副本:

假设你想排除文件config.php

分支A:

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

  2. 添加.gitattributes文件并提交

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

现在尝试合并。 你的文件应该保持不变。


编辑:
从关于merge=ours的git书中 ,“一个非常有用的select是告诉Git在冲突时不要试图合并特定的文件,而是要使用你的合并而不是别人的文件。

所以,这个答案不适用于这个问题。 pjmorse关于使用子模块的答案是好的。

另一种select是使用子树合并 ,这可能会增加好处。

你可能会发现git的rerere命令很有用。 有了这个,你可以logging某些合并冲突的解决scheme,并在以后重用。

随着你的更新:是的,如果所有的A适合B的子目录(或反之亦然),子模块将适合这种使用。 一个使用WordPress的子模块的例子是,如果你有一个WordPress的Git仓库, 您可以为/wp-content/themes/目录中的主题添加子模块。

子模块的文档可能会有所帮助。

如果来自两者的文件交错,则可能更困难。 大多数情况下,可以以这种方式使用子模块,所讨论的应用程序是为了允许它们而devise的。