将分支从一个分支复制到另一个分支

时间:2016-03-18 20:34:31

标签: git

我有两个git repos应该保持同步,不能同时访问。一个在工作,一个在家,没有网络连接。

如何处理这个简单的设置?

我尝试过:

我有一个“知道”两个回购并且存在于便携式硬盘上的克隆。

让我们说有人在“工作”创建了一个新分支,我想把它转移到回购“家”。怎么做?

如果我只做一个git pull我在我的克隆上得到以下内容:

$ git branch --list --all
*master
origin/HEAD -> origin/master
origin/bugfix_component_condition_destruction_fail
origin/master
origin/remove_stoplist_copy_and_erase
问:这是否仅仅意味着我的本地克隆“知道”在某处存在这些列出的分支,并且我的克隆上没有真正的数据期望还有一个名为“master”的本地现有分支?

很容易将主人拉/推到两个回购。但是我的本地克隆似乎不存在任何其他的。我必须跟踪每个远程分支到我的克隆的本地分支,然后将其转移到另一个仓库吗?

问:如果两个repos提交都被推送,是否有任何典型的处理两个repos以使它们同步的方法?

问:是否有获取所有信息的技巧以及所有远程分支的内容。

对于我而言,回购的“克隆”意味着什么有点神秘?它似乎不是真正的克隆,只有一些元数据和主分支。这是对的吗?

编辑:

如果我开始gitk --all,我会看到在分支中完成的所有更改。看起来分支的内容在克隆中。

但如果我这样做:

$git checkout -b remove_stoplist_copy_and_erase --track remotes/origin/remove_stoplist_copy_and_erase
error: Not tracking: ambiguous information for ref refs/remotes/origin/remove_stoplist_copy_and_erase
Switched to a new branch 'remove_stoplist_copy_and_erase'

所以我做了:

$git checkout origin/remove_stoplist_copy_and_erase
$git checkout -b remove_stoplist_copy_and_erase

现在推动它:     $ git push --set-upstream ex remove_stoplist_copy_and_erase

我担心必须手动为两个遥控器上的所有分支执行所有操作以使两者同步。这项工作是否有一些“最佳实践”?

3 个答案:

答案 0 :(得分:2)

您可以使用捆绑包。无需在便携式磁盘上拥有完整的存储库

我们称他们为repo1repo2

在repo1,你打电话:

  • $ git fetch <bundle2> 'refs/heads/*:refs/remotes/repo2/*'从repo2
  • 创建的捆绑文件中导入更改
  • $ git bundle create <bundle1> --all --not --remotes=repo2创建一个发送到repo2的包

在repo2,相应地:

  • $ git fetch <bundle1> 'refs/heads/*:refs/remotes/repo1/*'
  • $ git bundle create <bundle2> --all --not --remotes=repo1

manpage包含更多信息和示例。

答案 1 :(得分:0)

A1:是的,您需要在克隆上执行git fetch --all以获取所有远程分支。

A2:有几种方法可以实现这一目标,但它们都是程序性的(不是软件工程意义上的)。

A3:参见A1。

答案 2 :(得分:0)

简单,将您的工作来源添加到您的本地存储库:

  • git add origin-work [path-to-work-repo]

然后获取所有分支:

  • git fetch origin-work