我使用克隆的存储库和分支在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)
如果您确实希望将远程分支包含在克隆中,则需要基于远程分支创建本地分支。但是,由于您无论如何都不在远程分支中工作,因此一旦开始在分支上工作,您就会创建本地分支。在此之前,您的克隆中并不真正需要它,因为您可以随时从远程获取它。
但是,如果笔记本没有网络连接,则必须为所需的所有远程分支创建本地分支,以便在克隆本地存储库时克隆它们。
但是,如果您确实有网络连接,请使用git remote add origin2 ssh://adahl@gollum//net/repos/netcube/patches.git
然后git fetch origin2
- 随意替换origin2
为更有意义的名称。