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

时间:2010-10-05 23:20:20

标签: git merge

我有两个分支AB。分支A有一个目录examples,其中包含一些由git跟踪的文件,这些文件应出现在分支B上。在我的工作流程中,我会经常将A中所做的更改合并到B,这在examples每次更改时都会出现问题。目前我手动执行此操作:在合并后删除文件或解决当我已经删除的文件发生更改时的冲突。

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


让我试着解释一下为什么我这样做: A是博客的骨架(模板,脚本等),B是我的博客(A,其中包含我自己的帖子,图片,草稿等)。 A是公开的,我试图让它成为通用的外观并使用它,但正因为如此,我需要一些帖子作为展示/测试(examples目录)。 A中的每次更改都会合并到B以在我的博客实例上进行此更改 - 这样所有新示例都会显示在B中,所有已删除的示例都会显示在B中自上次合并以来A中已更改的内容会导致冲突。

3 个答案:

答案 0 :(得分:53)

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

它使用了从这里获取的想法:Pro-Git merge strategies

以下是它的副本:

  

假设您要排除文件config.php

     

在分支A:

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

  2.   
  3. 添加.gitattributes文件并提交

  4.         

    在分支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可能会有所帮助。

如果来自两者的文件是交错的,则可能更难。大多数可以以这种方式使用子模块的情况下,有问题的应用程序被设计为允许它们。