我怀疑这个问题在互联网的不同角落经常被问到,但我没有找到一个可行的答案。
想象一下:
- 存在包含文件夹A、B和C的储存库X。
- repo X有一个遥控器,我们称之为RemoteX。
- 在文件夹B内,存在独立储存库Y。
- repo Y有自己的远程存储器RemoteY。
- 所有的工作都是在存储库X中以常规的方式完成的。
- 偶尔,快照从文件夹B推送到存储库Y。在某种程度上是"备份"。
- repo Y只有1个分支,没有开发,纯粹作为独立版本控制的云存储repo存在。
- 远程X应包含所有文件夹的所有内容(文件夹B的. git文件夹除外)
如何实现呢?我有90%的把握子模块/子树不是最好的方法。
我已经尝试过将B/. git添加到repo X的gitignore中,但没有效果。
UPD:这里有一些可视化的更精确
Repo X ---> Remote X (Server X)
|
|
.git
|
A
|
B ---> Repo Y ---> Remote Y (Server Y)
| |
| .git
|
C
1条答案
按热度按时间rqqzpn5f1#
考虑git-subrepo
它可以处理你的场景,尽管在幕后它做了一件不同的事情,它没有一个冗余的repo Y
.git
目录(因为所有的历史记录都已经存在于repo X的.git
目录中),而是在repo Y的根目录下有一个.gitrepo
文件,这个文件只包含关于subrepo的元数据(例如,它的remote,与remote的同步状态,等等)。它的好处是,回购X将看起来完全一样,如果Y文件夹就像一个普通的文件夹。
如果Y已经存在,下面是将其初始化为subrepo的命令:
将现有子目录转换为子存储库。
如果你想把你项目的一个子目录公开为一个发布的子存储库,这个命令可以做到这一点。它会把一个普通子目录的内容拆分成一个分支,并开始作为子存储库跟踪它。之后,你的原始存储库看起来完全一样,除了有一个
<<subdir
/.gitrepo〉〉文件。如果指定
--remote
(和可选的--branch
)选项,这些值将添加到<subdir>/.gitrepo
文件中。--remote
选项是上游URL,--branch
选项是要推送到的上游分支。执行git subrepo push
命令时需要这些值,但是它们可以在push
命令中稍后提供(如果您还指定了--update
选项,则保存到<<subdir
/.gitrepo〉〉)。注意:您需要创建空的上游回购,并使用
git subrepo push <subdir>
自己推送到它。--method
选项将决定如何执行分支之间的连接过程。默认选项为merge。init
命令接受--branch=
和--remote=
选项。