我有两个分支A
和B
。分支A
有一个目录examples
,其中包含一些由git跟踪的文件,这些文件不应出现在分支B
上。在我的工作流程中,我会经常将A
中所做的更改合并到B
,这在examples
每次更改时都会出现问题。目前我手动执行此操作:在合并后删除文件或解决当我已经删除的文件发生更改时的冲突。
合并期间是否可以忽略这些文件? (或者是否可以将某些文件限制为一个分支(A
)或远离一个分支(B
)?)
让我试着解释一下为什么我这样做:
A
是博客的骨架(模板,脚本等),B
是我的博客(A
,其中包含我自己的帖子,图片,草稿等)。 A
是公开的,我试图让它成为通用的外观并使用它,但正因为如此,我需要一些帖子作为展示/测试(examples
目录)。 A
中的每次更改都会合并到B
以在我的博客实例上进行此更改 - 这样所有新示例都会显示在B
中,所有已删除的示例都会显示在B
中自上次合并以来A
中已更改的内容会导致冲突。
答案 0 :(得分:53)
我在这里找到了一个很好的答案:stackoverflow Q332528
它使用了从这里获取的想法:Pro-Git merge strategies
以下是它的副本:
假设您要排除文件
config.php
在分支A:
创建一个名为' .gitattributes'的文件。在同一个目录中,有了这个 line:config.php merge = our。这告诉git使用什么策略 当mergin文件。在这种情况下,它始终保持您的版本,即。 您正在合并的分支上的版本。
- 醇>
添加.gitattributes文件并提交
在分支B上:重复步骤1-2
立即尝试合并。您的文件应保持不变。
编辑:
来自关于merge=ours
的{{3}},"一个非常有用的选项是告诉Git在发生冲突时不尝试合并特定文件 ,而是使用您的合并的一面是别人的。"
所以,这个答案并不适用于问题。关于使用子模块的git book是好的。
另一个选择是使用pjmorse's answer,这可能会带来更多好处。
答案 1 :(得分:3)
您可能会发现git的rerere
命令很有用。有了它,您可以记录某些合并冲突的解决方案,并在以后重复使用。
答案 2 :(得分:1)
使用您的更新:是的,如果所有A都适合B的子目录(反之亦然),则子模块适合此用途。使用WordPress的子模块的一个例子是,如果你有一个Wordpress的git存储库;您可以为/wp-content/themes/
目录中的主题添加子模块。
documentation for submodules可能会有所帮助。
如果来自两者的文件是交错的,则可能更难。大多数可以以这种方式使用子模块的情况下,有问题的应用程序被设计为允许它们。