Git不会克隆后续克隆上的所有分支?

LeS*_*cky 6 git branch clone

我使用克隆的存储库和分支在Git上遇到了一些问题,但我不可能找到答案.让我来描述一下:我们在这里有一个简单的主Git存储库,我们都可以从这里下载并推送到位于本地linux机器上并可通过ssh访问.我把这个克隆到我的usb拇指驱动器上,如下所示:

git clone ssh://adahl@gollum//net/repos/netcube/patches.git
Run Code Online (Sandbox Code Playgroud)

这给了我一个本地克隆,在我的拇指驱动器上有一个工作副本.我cd到这个,然后在这个克隆中看到一些分支:

cd patches
git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/stable
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都那么好,但是如果我在我的拇指驱动器上克隆存储库另一次到我的笔记本,稳定分支就会丢失.看到:

cd ..
git clone patches patches2

cd patches2

git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

我在克隆或克隆git fetch后尝试了几个选项,没有任何东西将stable分支带到patches2存储库.我假设我在这里缺乏理解git并且只是以错误的方式使用它.有人可以指点我的使用和/或理解错误吗?

seh*_*ehe 12

除了@ThiefMaster:

我喜欢

git clone --mirror
Run Code Online (Sandbox Code Playgroud)

要么

git push --mirror 
Run Code Online (Sandbox Code Playgroud)

更新所有(本地和远程)分支引用和标记

附加信息如上所述, - mirror将真正按原样复制repo,从而覆盖目标中的任何更改.源中不存在的分支将无条件修剪.

从本质上讲,它就像使用遥控器并进行'git remote update --prune',不同之处在于受影响的分支可以是本地分支以及"远程"引用[1]

@LeSpocky(和其他人?)

现在,如果更改消失,它们将永远不会产生合并问题,因此这很容易.

--mirror以现实生活中的概念命名,因此它旨在为目标中的任何差异铺平道路.如果目标是非裸的,并且您提交了本地更改,则可以始终通过目标的本地分支(git log -g,git reflog)的reflog将其返回.

作为一般安全措施,您可以在目标中找到"git stash save"的钩子.

但请记住, - 镜像设计为,镜像,这个问题实际上是关于如何将所有分支复制到裸遥控器.:)

[1](refs在那里,但远程定义不会被复制;如果你想要,请在推送目的地上从.git/config手动复制到.git/config)


Thi*_*ter 3

请参阅如何克隆 Git 中的所有远程分支?

如果您确实希望将远程分支包含在克隆中,则需要基于远程分支创建本地分支。但是,由于您无论如何都不在远程分支中工作,因此一旦开始在分支上工作,您就会创建本地分支。在此之前,您的克隆中并不真正需要它,因为您可以随时从远程获取它。

但是,如果笔记本没有网络连接,则必须为所需的所有远程分支创建本地分支,以便在克隆本地存储库时克隆它们。

但是,如果您确实有网络连接,请使用git remote add origin2 ssh://adahl@gollum//net/repos/netcube/patches.git然后git fetch origin2- 随意替换origin2为更有意义的名称。