Git:合并时忽略一些文件(保留一些文件限制在一个分支上)
我有两个分支, A
和B
分支A
有一个由git跟踪的文件的目录examples
,这些文件不应该出现在分支B
。 在我的工作stream程中,我常常将A
所做的更改合并到B
,每当examples
发生一些变化时,这都是个问题。 目前我正在手动执行这个操作:合并后擦除文件或解决冲突时,当我已经擦除的文件发生变化时。
在合并期间可以忽略这些文件吗? (或者可以将一些文件限制在一个分支( A
)或者一个分支( B
)之外?
让我试着解释为什么我这样做: A
是博客(模板,脚本等)的骨架, B
是我的博客(充满了我自己的post,图像,草稿等)。 A
是公开的,我试图让其他人看起来和使用它,但正因为如此,我需要一些职位作为展示/testing( examples
目录)。 A
每一个变化,然后被合并到B
以便在我的博客实例上进行这种更改 – 这样,所有新的示例都显示在B
而B
所有已删除的示例在上次合并后发生了冲突。
我在这里find了一个很好的答案: stackoverflow Q332528
它使用从这里采取的想法: Pro-Git合并策略
这里是它的一个副本:
假设你想排除文件
config.php
分支A:
在同一个目录下创build一个名为“.gitattributes”的文件,用这行代码:config.php merge = ours。 这告诉git在合并文件时使用什么策略。 在这种情况下,它始终保持您的版本,即。 您正在合并到的分支上的版本。
添加.gitattributes文件并提交
在分支B上:重复步骤1-2
现在尝试合并。 你的文件应该保持不变。
编辑:
从关于merge=ours
的git书中 ,“一个非常有用的select是告诉Git在冲突时不要试图合并特定的文件,而是要使用你的合并而不是别人的文件。
所以,这个答案不适用于这个问题。 pjmorse关于使用子模块的答案是好的。
另一种select是使用子树合并 ,这可能会增加好处。
你可能会发现git的rerere
命令很有用。 有了这个,你可以logging某些合并冲突的解决scheme,并在以后重用。
随着你的更新:是的,如果所有的A适合B的子目录(或反之亦然),子模块将适合这种使用。 一个使用WordPress的子模块的例子是,如果你有一个WordPress的Git仓库, 您可以为/wp-content/themes/
目录中的主题添加子模块。
子模块的文档可能会有所帮助。
如果来自两者的文件交错,则可能更困难。 大多数情况下,可以以这种方式使用子模块,所讨论的应用程序是为了允许它们而devise的。