Git不克隆后续克隆上的所有分支?
我在使用克隆存储库和分支的Git时遇到了一些问题,而且我无法找到对此的答案。 让我描述一下:我们有一个纯粹的主Git仓库,我们都从这里拉到并推到位于本地linux机器上,并且可以通过ssh访问。 我做了这样的克隆到我的USB拇指驱动器,如下所示:
git clone ssh://adahl@gollum//net/repos/netcube/patches.git
这给了我当然一个本地克隆与我的拇指驱动器上的工作副本。 我cd到这个,然后在这个克隆中看到一些分支:
cd patches
git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/stable
到目前为止这么好,但是如果我将我的拇指驱动器上的存储库克隆到我的笔记本上,则稳定分支会丢失。 看到:
cd ..
git clone patches patches2
cd patches2
git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
克隆或者当我试图几个选项git fetch
克隆后,没有什么能稳定分支到patches2库。 我想我在这里缺乏理解git,只是用错了方式。 有人可以请我指出我在使用和/或理解方面的错误吗?
请参阅如何克隆Git中的所有远程分支?
如果您确实希望将它包含在克隆中,则需要基于远程分支创建本地分支。 但是,由于您不在远程分支中工作,只要您开始在分支上工作,就会创建本地分支。 在此之前,你并不需要它在你的克隆中,因为你可以在任何时候从远程获取它。
但是,如果笔记本没有网络连接,则必须为所需的所有远程分支创建本地分支,以便在克隆本地回购时克隆它们。
如果你确实有网络连接,可以使用git remote add origin2 ssh://adahl@gollum//net/repos/netcube/patches.git
,然后git fetch origin2
- 随意用更有意义的名字替换origin2
。
除了@ThiefMaster:
我喜欢
git clone --mirror
要么
git push --mirror
更新所有(本地和远程)分支参考和标签
其他信息如前所述,--mirror将真正复制回购,因此会覆盖目标中的更改。 源中不存在的分支将被无条件地修剪。
本质上,它就像使用远程工作并执行'git remote update --prune',不同之处在于受影响的分支可以是本地分支以及'远程'参考[1]
@LeSpocky (和其他人?)
现在如果变化消失了,它们将永远不会产生合并问题,所以这很容易。
--mirror
是以现实生活中的概念命名的,因此它旨在为目标的差异铺平道路。 如果目标不是裸露的,并且您提交了本地更改,则始终可以通过目标本地分支的git reflog
git log -g
( git log -g
, git reflog
)将其回收。
作为一项通用的安全措施,您可以在目标中勾选'git stash save'。
请记住,--mirror的设计目的就是镜像,而这个问题其实就是如何将所有分支复制到裸露的远程。 :)
[1](参考资料在那里,但远程定义不会被复制;如果需要,请在推送目标上从.git / config手动复制到.git / config)
“origin”是给你克隆repo的地方的默认名称,它会自动添加为远程(注意:远程只意味着“回购不是当前的”) - 远程可以在同一台机器上。
在patches
,“起源”是指gollum上的原始回购。
在patches2
,“原产地”是指patches
。
远程跟踪参考(以remotes/
开始的参考)实际上并不是本地分支 - 它们只是指向最后知道分支在遥控器上的分支。 因此,在patches
,您可以远程跟踪原始repo的ref,但在patches2
,您只有patches
的本地master
分支的远程跟踪参考,因为这是patches2
的原点指向的地方。
您可以使用git remote add
在克隆之后将其作为另一个远程的patches2
git remote add
到patches2
- 或者您可以再次从原始patches
克隆而不是从patches
克隆。