Git subtree pull 导致合并冲突

3
目前我有三个代码仓库,分别为A、B和C。A和B都有一个名为c的文件夹,它是代码仓库C中的子树。现在,当我向A的c文件夹中添加一个新文件时,执行git add、commit和git subtree push操作后,新文件将被推送到C。当我在B中执行pull操作时,它会被放入B的c文件夹中,这样就可以按预期工作了。但是,当我在B的c中编辑新文件并执行git commit和git subtree push后,在A中执行git subtree pull时,会出现合并冲突。
如何避免这种冲突?

我们有完全相同的问题,你找到了解决方案吗?一个选项是始终在合并时采取远程方式。 - vinay
我没有找到这个问题的解决方案。 - Kristof
1个回答

1
我对你的描述中这部分内容感到好奇(或许是怀疑),因为你说:“目前我有三个仓库,名为 A、B 和 C。A 和 B 都有一个名为 c 的文件夹,它是仓库 C 的子树。”
当我使用子树时,共享子树由一个完全专用于该共享子树内容的裸仓库托管。因此,如果想要一个共享文件夹 f,则会有一个裸仓库 F,其中包含所有应放入共享文件夹 f 中的文件,而没有其他内容。F 仓库没有其他内容。它不会将文件夹 f 作为 F 仓库的一部分。F 仓库是裸的(没有工作树内容)。
然后,如果我有三个项目 A、B 和 C,它们都希望使用文件夹 f,那么文件夹 f 将作为子树包含在 A、B 和 C 中,并且所有三个项目都将从裸仓库 F 拉取和推送。F 是中心节点,其他节点(A、B 和 C)是辐射节点。每个辐射节点与中心节点交换,但彼此之间不直接交换。例如,A 和 B 不会向 C 推送或拉取。
从您的描述中,这可能是导致问题的最佳猜测。请确保子树的中央主机仓库只是一个裸仓库,不用于保存其他任何内容或工作树内容。
附言:虽然我有一个本地裸仓库来托管共享子树(这允许在未连接到互联网时进行工作——分布式版本控制的基本好处),但也可以定期将更新后的本地裸仓库中的更改推送到远程裸仓库以进行安全保管。但是,在此配置中,我不建议尝试让多个开发人员对同一共享子树进行独立更改。如果有多个开发人员正在共享子树代码上工作,则只需使用一个共享远程裸仓库,该裸仓库位于您用于共享远程裸仓库的服务上。
额外提示:如果正在使用本地裸仓库(因为正在使用子树),那可能不是理想的选择,因为目前对于在计算机上使用本地裸仓库的支持很差。在使用 Git for Windows 的 Windows 环境中,如果 cd 进入裸仓库的顶级目录,则 gitk 命令将打开一个可用的 GUI 工具,让您检查裸仓库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接