可以将整个Git存储库推送到另一个(远程)存储库的分支吗?

Can you push an entire git repository to a branch of another (remote) repository

我有几个本地Git存储库,它们在逻辑上是独立的项目。当每个项目完成后,我想让整个存储库成为"归档"存储库的一个分支,以防将来出现错误。因为,最终,每个存储库都将是归档存储库的一部分,我认为从一开始就将每个存储库推送到归档存储库的远程副本中。

所以我有单独的存储库:存档,A,B,…我想把它们推到一个遥控器上,它看起来像:

1
2
archive -- A as a branch
        \---B as a branch

等等。

我已经在Git文档和网络上进行了搜索,并为此提出了以下别名:

1
backup ="!for br in $(git branch --column|sed 's/*//';); do git push archive ${br}:$(basename $PWD)/${br}; done"

所以现在,从一个说法来说,我可以做:

1
2
git remote add archive ssh://[email protected]/.../archive.git
git backup

这会将A中的每个分支X推送到远程上的分支A/X。不幸的是,中的每个分支都是远程存储库中一个单独的断开连接的分支,因此我已经在一个实际上不是我想要的分支中丢失了历史记录。

有没有一种方法可以将远程回购上的所有分支推到单个分支(或者更确切地说是树)上?或者是我的整个方法被误导了,还有更好的方法可以做到这一点?

干杯,安得烈


我发现了一个关于在StackOverflow上合并存储库的问题,Olivier Verdier的答案解决了我的问题:我只需要将完成的repo添加到存档存储库中:

1
2
3
4
$ git remote add A /path/to/A
$ git fetch A
$ git remote add B /path/to/B
$ git fetch B

完成。


听起来你在做一些非常尴尬的事情。Git是一个完美的版本控制系统,没有理由要将分支推送到某个"存档"存储库。

正确的方法是使用标记来标记代码的稳定版本。

然后您可以创建代码的标记版本,如下所示:

1
$ git tag -a v1.0 -m"First stable release"

然后使用您将用于接收commit/tag对象的任何git操作的常规语法访问该版本:

1
$ git checkout v1.0

有关如何在Git中使用标记的详细信息,请参阅http://git-scm.com/book/en/git-basics-tagging。