嵌套的独立存储库

  • 本文关键字:存储 独立 嵌套 git
  • 更新时间 :
  • 英文 :


我怀疑这个问题在互联网的各个角落经常被问到。但我没有找到一个可行的答案。

想象如下:

  • 有一个存储库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=选项。

最新更新