Git 在两个不同的分支中具有同一文件的两个不同副本

Git 在两个不同的分支中具有同一文件的两个不同副本,git,diff,git-branch,Git,Diff,Git Branch,你知道我怎么能在git的两个不同分支中拥有同一文件的两个不同副本吗 假设我有一个名为config的文件 我试图实现的是在dev分支中有一个与master分支不同的文件副本 重要的是文件不能在gitignored中被忽略。您可以签出这两个分支。修改文件并将其提交到每个分支 如果要合并分支并在每个分支中有两个单独的文件(不同的内容),请将更改的内容提交到分支,然后在.gittributed中设置所需的文件,以始终获取我们的文件-这将导致此文件永远不会被覆盖 阅读所有相关内容并在此处设置: 您还可以

你知道我怎么能在git的两个不同分支中拥有同一文件的两个不同副本吗

假设我有一个名为
config
的文件
我试图实现的是在dev分支中有一个与master分支不同的文件副本


重要的是文件不能在gitignored中被忽略。

您可以签出这两个分支。修改文件并将其提交到每个分支

如果要合并分支并在每个分支中有两个单独的文件(不同的内容),请将更改的内容提交到分支,然后在
.gittributed
中设置所需的文件,以始终获取我们的文件-这将导致此文件永远不会被覆盖

阅读所有相关内容并在此处设置:

您还可以使用Git属性告诉Git对项目中的特定文件使用不同的合并策略

一个非常有用的选项是告诉Git,当特定文件有冲突时,不要尝试合并它们,而是使用您的合并方而不是其他方的

如果项目中的某个分支已分支或已专门化,但您希望能够将更改合并回该分支,并且希望忽略某些文件,则这将非常有用


正如他在评论中提到的:


谨防我认为Git中的bug:如果Git能够简单地合并文件,它就不会运行您的自定义合并驱动程序。Git总是先尝试简单的双向合并,然后再尝试三向合并

因此,另一种选择是使用
smudge/clear
filter来确保您拥有正确的文件

Smudge
阅读所有相关内容并在此处设置:

事实证明,您可以编写自己的过滤器,用于在提交/签出上的文件中进行替换

这些过滤器称为
clean
smudge
过滤器

.gittributes
文件中,您可以为特定路径设置一个过滤器,然后设置脚本,以便在文件签出之前(“涂抹”,见图8-2)和暂存之前(“清理”,见图8-3)处理文件

这些过滤器可以设置为做各种有趣的事情


您的意思是文件配置未处于暂存状态?是的,确切地说,它不应该处于暂存状态。如果我理解正确,您不希望文件合并回主文件,反之亦然?正确。我不想要你想要的?事实上,这不适合我的场景。在我的场景中,配置文件始终保持不变,因此不会对其应用任何合并操作。这与上面提到的问题的建议是一样的,但用户报告它不起作用。那么,您如何拥有不同的文件?您必须在每个分支上更改它,以便更改它们。我遗漏了什么吗?每个分支上的文件内容不同。这是我从你的问题中了解到的文件中完全不同的内容。好的,我将再次尝试这个策略。让我们看看它是否工作于我认为Git中的一个bug:如果Git能够简单地合并文件,它就不会运行您的自定义合并驱动程序。Git总是先尝试简单的双向合并,然后再尝试三向合并。
config_file merge=ours