概述
背景
之前需要从外部gitlab同步代码到公司服务器上, 不想一个分支一个分支检出代码, 于是搜索了下git命令的实现方式, 在Stack Overflow 发现了Set up git to pull and push all branches这个问题
实现思路
- 直接push, 注意替换成自己的变量根据自己情况选用
git clone <url_of_old_repo> #克隆旧仓库代码 cd <name_of_old_repo> #进到本地代码路径即克隆完成后的代码目录 git remote add new-origin <url_of_new_repo> #新建远程仓库 git push -f --all new-origin # 推送代码到新的远程仓库上
需要特别注意:
这种方式只会推送本地已经检出的分支例如master, 如果其他分支没有检出就不会推送
- 通过refs引用方式推送(不推荐,会多创建一个HEAD分支)
git clone <url_of_old_repo> #克隆旧仓库代码 cd <name_of_old_repo> #进到本地代码路径即克隆完成后的代码目录 git remote add new-origin <url_of_new_repo> #新建远程仓库 git push -f new-origin refs/remotes/origin/*:refs/heads/* #推送代码到新的远程仓库上 git push -f new-origin --delete HEAD #删除新的远端仓库中多余的HEAD分支
需要特别注意: 由于通配符会导致新的仓库里面会多一个
HEAD
分支, 所以在最后一步需要删除远端仓库的HEAD分支
, 如果你用的是gitlab的话可能会出现远端仓库默认分支是HEAD分支
并且无法删除的情况, 不要问我是怎么知道的 ????
-
通过refs引用方式推送并排除HEAD分支 (推荐方式)
git clone <url_of_old_repo> #克隆旧仓库代码 cd <name_of_old_repo> #进到本地代码路径即克隆完成后的代码目录 git remote add new-origin <url_of_new_repo> #新建远程仓库 git ls-remote . | grep 'refs/remotes/origin/' | grep -v 'HEAD' | awk -F 'origin/' '{print $2}' | xargs -i git push -f new-origin --tags refs/remotes/origin/{}:refs/heads/{} #排除HEAD分支后再推送到新的远端仓库
命令解释:
git ls-remote .
会打印出origin
即原有远端仓库下的所有分支
例如[aaa@bbb proj.git]$ git ls-remote . 3a14dbb3d42461e7596702ceefd0c3b86d187d76 HEAD 3a14dbb3d42461e7596702ceefd0c3b86d187d76 refs/heads/master 3a14dbb3d42461e7596702ceefd0c3b86d187d76 refs/remotes/origin/HEAD 3a14dbb3d42461e7596702ceefd0c3b86d187d76 refs/remotes/origin/master cc53d8bd2e66218aefcfb1470e83370110a255c1 refs/remotes/origin/v0.6.0
通过
grep 'refs/remotes/origin/' | grep -v 'HEAD' | awk -F 'origin/' '{print $2}'
命令就能获得第二列除HEAD
外的所有远端分支名
参考
Set up git to pull and push all branches
How to delete HEAD branch on remote Git repository?
最后
以上就是虚拟萝莉为你收集整理的git上传代码库所有分支到另一个代码仓库的命令背景实现思路参考的全部内容,希望文章能够帮你解决git上传代码库所有分支到另一个代码仓库的命令背景实现思路参考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复