我怀疑这个问题在互联网的各个角落经常被问到。但我没有找到一个可行的答案。
想象如下:
-
有一个存储库x,包含文件夹a, B和c。
-
repo X有一个远程,我们叫它RemoteX。
-
在B文件夹中,有一个独立的存储库y。
-
repo Y有它自己的远程名为RemoteY。
-
所有的工作都以常规的方式在存储库x中完成。
-
偶尔,快照从文件夹B推送到仓库y。在某种程度上。
-
repo Y只有一个分支。这里没有任何发展。它纯粹作为独立的版本控制的基于云的存储库存在。
-
remote X应该包含所有文件夹的所有内容(文件夹B的.git文件夹除外)
如何实现?我90%肯定子模块/子树不是正确的方法。
我已经试过添加B/。git to gitignore of repo X.没有帮助
乌利希期刊指南:这里有一些更精确的可视化
Repo X ---> Remote X (Server X)
|
|
.git
|
A
|
B ---> Repo Y ---> Remote Y (Server Y)
| |
| .git
|
C
考虑git-subrepo
它处理你的场景,尽管在幕后它做了一件不同的事情。而不是有一个冗余的repo Y.git
目录(因为所有的历史记录已经存在于repo X的.git
目录中),它在repo Y的根目录中有一个.gitrepo
文件。该文件只包含子repo的元数据(例如,它的远程,与远程的同步状态等)。
这样做的好处是,repo X看起来就像Y文件夹一样,就像一个普通的文件夹。
如果Y已经存在,下面是将其初始化为子repo的命令:
git subrepo init <subdir> [-r <remote>] [-b <branch>] [--method <merge|rebase>]
将现有子目录变为子repo。
如果您想将项目的子目录公开为已发布的子repo,此命令将执行此操作。它将把一个普通子目录的内容拆分为一个分支,并开始作为一个子repo来跟踪它。之后,您的原始回购将看起来完全相同,除了将有一个
<<subdir
/。gitrepo祝辞祝辞文件。如果您指定了
--remote
(以及可选的--branch
)选项,这些值将被添加到<subdir>/.gitrepo
文件中。--remote
选项是上游URL,--branch
选项是要推送到的上游分支。执行git subrepo push
命令将需要这些值,但稍后可以在push
命令中提供这些值(并保存到<<subdir
/。gitrepo祝辞祝辞如果您还指定了--update
选项)。注意:你需要自己创建一个空的上游repo,并使用
git subrepo push <subdir>
推送到它。
--method
选项将决定如何执行分支之间的连接过程。默认选项为merge。
init
命令接受--branch=
和--remote=
选项。