远程仓库
- 一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下(不建议)
- 只要注册一个GitHub账号,就可以免费获得Git远程仓库
- 请自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git
Bash),创建SSH Key:
$ ssh-keygen -t rsa -C “youremail@example.com”
- 你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
为什么GitHub需要SSH Key呢?
- 因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
“有了远程仓库,妈妈再也不用担心我的硬盘了。”——Git点读机
添加远程库
-
要关联一个远程库,使用命令git remote add origin
git@server-name:path/repo-name.git; -
关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名;
-
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
-
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
-
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!
从远程库克隆
- 要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
- GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
分支管理
分支就是科幻电影里面的平行宇宙
- 其他版本控制系统如SVN等都有分支管理
- Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。
创建与合并分支
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch 【name】
切换分支:git checkout 【name】 或者 git switch 【name】
创建+切换分支:git checkout -b 【name】 或者 git switch -c 【name】
合并某分支到当前分支:git merge 【name】
删除分支:git branch -d 【name】
解决冲突
不同分支在同一个文件上做了不同修改后,Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
- 解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
查看分支合并图:git log --graph --pretty=oneline --abbrev-commit
分支管理策略
- Git分支十分强大,在团队开发中应该充分应用。
master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活,干活都在dev分支上,也就是说,dev分支是不稳定的。你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。所以,团队合作的分支看起来就像这样:
- 合并分支时,加上–no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而 fast forward合并就看不出来曾经做过合并。
实战–no-ff方式的git merge:
1.首先,仍然创建并切换dev分支:
git branch 【name】
2.修改文件,并提交一个新的commit:
git add 【文件名】
git commit -m “提交修改”
3.切换回master:
git checkout 【name】
4.准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward:
git merge --no-ff -m “merge with no-ff” dev
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
5.合并后,我们用git log看看分支历史:
git log --graph --pretty=oneline --abbrev-commit
Bug分支
-
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
-
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
-
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 【commit】命令,把bug提交的修改“复制”到当前分支,避免重复劳动。