【问题标题】:Can you push an entire git repository to a branch of another (remote) repository您可以将整个 git 存储库推送到另一个(远程)存储库的分支吗
【发布时间】:2013-12-05 21:33:43
【问题描述】:

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

所以我有单独的存储库:存档,A,B,... 我想将它们推送到一个远程,如下所示:

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

等等。

我搜索了 git 文档,并在网上搜索,并想出了以下 别名

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

所以现在,从 A 来说,我可以这样做:

git remote add archive ssh://git@bitbucket.org/.../archive.git
git backup 

这会将 A 中的每个分支 X 推送到远程上的分支 A/X。不幸的是,A 中的每个分支都是远程存储库上一个单独的断开连接的分支,所以我丢失了 A 中的历史记录,这并不是我真正想要的。

有没有办法将 A 上的所有分支推送到远程仓库上的单个分支(或者更确切地说是一棵树)?还是我的整个方法都被误导了,有更好的方法吗?

干杯, 安德鲁

【问题讨论】:

  • 为什么不直接使用git tag 来正确标记不同项目的稳定版本?
  • 您的最终产品将是一个“repo full of repos”,其中,要从“repo full of repos”中获取“repo Q”,您必须首先复制整个 repo full of repos,然后删除所有不需要的 repos,只留下 repo Q,然后将所有分支重命名为原始名称。这不是 git 的设计目的,它会很尴尬而且很慢。最好将您的 repo 存档到 (dir|folder)-full-of-repos。然后,要从“(dir|folder) full of repos”中获取“repo Q”,只需复制“dir/repoQ”即可。

标签: git branch archive


【解决方案1】:

听起来你正在为一件完全尴尬的事情付出巨大的努力。 Git 是一个完美的版本控制系统,没有理由将分支推送到某个“归档”存储库。

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

然后您可以像这样创建代码的标记版本:

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

然后使用通常用于接收提交/标记对象的 git 操作的语法访问该版本:

$ git checkout v1.0

有关如何在 git 中使用标记的更多信息,请参阅 http://git-scm.com/book/en/Git-Basics-Tagging

【讨论】:

  • 我经常使用标签,但在这里它没有意义,因为它们是不同的项目。我也不想将分支推送到远程存储库,我想让整个存储库成为另一个存储库的分支。也就是说,一旦项目完成,我想将其移动到存储库中。
  • 不知道你想在这里做什么——这肯定是非正统的——但听起来你找到了答案。
【解决方案2】:

我在 stackoverflow 上发现了一个关于 merging repositories 的问题,Olivier Verdier 的回答解决了我的问题:我只需要将完成的 repo 添加到归档存储库中:

$ git remote add A /path/to/A
$ git fetch A
$ git remote add B /path/to/B
$ git fetch B

完成。

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    相关资源
    最近更新 更多