对于git,大家都很熟悉,版本控制的不二人选。分散式的管理方式为人所喜欢,给人以方便。
博客新地址:https://yaoyuanyy.github.io
本文立足实际案例,可能这个案例对于应用开发的技术人员不是很常见,对于运维人员应当是必须的知识。如果你既是技术又是运维,那么恭喜你,你离大牛不远了
实际案例:
今天刚哥交给我一个任务:把项目集合(a,b,c,d,e,f每个都是一个项目应用)从我们部门的git远程库迁移到公司级别的远程库上。
开始我以为很简单:就像本地建个项目,然后提交到github上呗。后来仔细一想,不对啊,我的任务需要我把这些项目的历史记录都要同步到新的远程库B上,包括提交历史,分支,tags。提交历史好办,直接提交就可以了,但是分支和tags就难办了,每个项目都有那么多的分支、那么多的tags,我如果要一个个的add、commit、push,这样会疯的。
假如,项目a有本地分支和tag:
a-features-0.0.1
a-features-0.0.2
a-features-0.0.3
a-features-0.0.4
a-features-0.0.5
master
tag:
a-features-0.0.1
a-features-0.0.2
a-features-0.0.3
如果冒然开始操作,会是这样:
[test@yy]$ git checkout master
[test@yy]$ git remote add yy remote-rep-B.git
[test@yy]$ git push yy master
[test@yy]$ git checkout a-features-0.0.1
[test@yy]$ git remote add yy remote-rep-B.git
[test@yy]$ git push yy a-features-0.0.1
这样需要5次反复操作,还有tag呢,还有其他多个项目呢,每个项目又有那么多的分支和tag呢。
所以,这样做效率很低下,而且容易出错,a-features-0.0.1提到a-features-0.0.2这样的提错分支就麻烦了。
带着我的想法,开始度娘,搜了很多关键词,没有想要的答案。终于,在google上发现了惊喜,上代码:
在git-bash中输入下列命令
[test@yy]$ git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t' #配置命令:创建所有远程分支对应的本地分支,起了别名
[test@yy]$ git clone OLD_REPO_URL #从老的远程库克隆项目到本地
[test@yy]$ cd new-cloned-project #进入项目git中
[test@yy]$ git clone-branches #运行刚才配置的命令别名
[test@yy]$ git remote add newrepo NEW_REPO_URL #创建新的远程库
[test@yy]$ git push --all newrepo #把所有本地分支提交到新远程库的对应的远程分支上
[test@yy]$ git push --tags newrepo #把原来的所有tag提交到新远程库上
通过以上的命令,可以大大提高工作效率,确认又清晰。这个告诉我们一个通用的技巧:不要着急写代码,敲键盘。先全局思考,脑子里过一遍,看看你要这么做会不会产生问题,产生什么问题,怎么解决这个问题。这样,相信你最终的操作就很完善了
博客新地址:https://yaoyuanyy.github.io