我有两个git项目。一个依赖于另一个存储库的子文件夹。
以下是设置文件夹的方式。
repoA
.git
folderA1/
folderA2/
repoB
.git
folderB1/
folderB1/folderB11
folderB2/
我想要实现的目标是以下
repoA
.git
folderA1/
folderA2/
folderB11 <<<< This maps to the repoB on branch name "blah"
repoB
.git
folderB1/
folderB1/folderB11
folderB2/
在repoA
中,folderA1中的某些文件可能会引用folderB11中的文件。 repoA
包含引用folderB11
中文件的python模块。同样,repoB
还包含引用folderB11
中文件的python模块。
我查看了git子树,但它似乎没有同步这两个文件夹。
一个选项是创建folderB11
作为存储库,并将其添加到repoA
和repoB
的子树,但我宁愿没有第三个存储库,因为它正在进行维护代码是一种痛苦。另外,理想情况下,将folderB11
放在第三个存储库中的选项应位于repoB
,以确保项目其余部分的准确性。
有没有办法将git repo的子文件夹与另一个git repo的子文件夹同步?
答案 0 :(得分:2)
符号链接或子模块的两种替代方法的一个问题是,您无法在单个存储库中获得
repoA
或repoB
的连贯历史记录。
使用submodule,因为它在父仓库(repoA
)中记录了所使用的repoB
的确切SHA1。
它会将其记录为 gitlink (a special entry in the index)。
他们创建了一个必须跟踪和管理的外部依赖项。
这就是子模块为你做的事情。
如果您想回到
repoA
的旧提交,您必须跟踪并了解repoB
中相应提交的内容。
同样,子模块记录了该信息
返回旧版repoA
,执行git submodule update --init
,repoB
处于连贯状态,位于右侧sha1。
答案 1 :(得分:0)
没有。 git方法是使folderB11成为一个存储库,由repoA和repoB作为子模块包含。
由于你不喜欢它(为什么?它应该不是这样的问题),你可以使用符号链接使folderB11指向repoB checkout的适当子文件夹。你可以使repoB成为repoA的一个子模块,并将符号链接指向repoB / folderB11(尽管它有点难看),或者,如果它们要并排结账,你可以使用相对路径(例如../repoB/) folderB11)知道如果repoB未在repoA所在的文件夹中签出,它将会中断。
答案 2 :(得分:0)
这里可以使用子树的功能很少,允许在合并目标语法中指定子文件夹到子文件夹(而不是子文件夹到存储库)。
我刚刚在这里发现了它:How do I merge a sub directory in git?
答案 3 :(得分:0)
我正在使用 Copybara 将一个 git Repo 的一部分同步到另一个