Git:在合并过程中忽略某些文件(保留某些文件限制在一个分支中)

我有两个分支AA。分支B具有目录A,其中包含一些git跟踪的文件,这些文件不应出现在分支A中。在我的工作流程中,我确实将在examples中所做的更改合并到了examples中,而这通常是 每当B806进行任何更改时,都会出现问题。目前,我正在手动执行此操作:合并后擦除文件或解决对已删除文件的更改时发生的冲突。

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


让我尝试解释为什么要这样做:A是博客的骨架(模板,脚本等),B是我的博客(A,其中填充了我自己的帖子,图像,草稿等)。 A是公开的,我正在尝试使其对他人具有通用的外观和使用方式,但是由于这个原因,我需要在此处发布一些展示/测试帖子(examples目录)。 A中的每个更改,后来都合并到B中,以在我的博客实例上进行此更改-这样,所有新示例都出现在B中,而B中所有已删除的示例(自上次合并以来已在A中进行了更改)会导致冲突。

dbarbosa asked 2020-01-14T15:21:06Z
3个解决方案
54 votes

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

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

这是它的副本:

假设您要排除文件merge=ours

在分支A:

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

  2. 添加.gitattributes文件并提交

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

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


编辑:
从有关merge=ours的git书中,“一个非常有用的选择是告诉Git在发生冲突时不要尝试合并特定文件,而应该使用合并的一方来代替其他人。”

因此,此答案不适用于该问题。 pjmorse关于使用子模块的答案很好。

另一种选择是使用子树合并,这可能会带来更多好处。

David answered 2020-01-14T15:22:22Z
3 votes

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

rafl answered 2020-01-14T15:22:42Z
1 votes

随着您的更新:是的,如果所有A都适合B的子目录(反之亦然),则子模块将适合此用途。 如果您有一个Wordpress的git仓库,则使用WordPress的子模块的示例; 您可以为主题添加子模块,该子模块将位于/wp-content/themes/目录中。

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

如果将两者的文件交织在一起,则可能会更困难。 在大多数情况下,可以通过这种方式使用子模块,有问题的应用程序旨在允许使用它们。

pjmorse answered 2020-01-14T15:23:12Z
translate from https://stackoverflow.com:/questions/3868491/git-ignore-some-files-during-a-merge-keep-some-files-restricted-to-one-branch