git
git
参考资料
参考网站:
https://www.kernel.org/pub/software/scm/git/docs/
http://git-scm.com
自带文档,在命令行输入git help <cmd>,比如想了解merge,输入:
git help merge
try git
光说不练是永远也掌握不好git的。而git的最强大之处在于协同开发的支持。其实我们完全不需要任何git服务器就能模拟一个服务器+两个用户协同开发的情景。找一个测试目录,建立以一个空文件夹server,再进入server,执行命令:git init --bare,这样就建立了一个本地的服务器,目录结构如下:
返回server所在目录(try_git),分别clone两个仓库出来:
注意,两处红圈换成自己的目录。
这样就形成了下面的结构,u1,u2用来模拟两个用户:
分别为两个仓库设置两个username,否则在log中看到的都是全局配置的username:
在u1下执行:
git config --local user.name u1
在u2下执行:
git config --local user.name u2
练习git,最好不要在生产项目中练,一来很多权限你可能不具备,试不出效果来;二来不一小心,还可能造成很严重的后果。。
lv1= lv2= type=
基础练习
现在,我们可以在u1、u2中练习一下基本操作了,如:
本地操作:
commit add checkoout branch reset merge/rebase log diff
远端操作:
pull fetch push remote
工具安装
git
TortoiseGit
beyond comparer(后面简称bc)
lv1= lv2= type=
beyond comparer
乌龟自带的比较、冲突软件不是很好用。推荐beyond comparer。先设置比较(Diff Viewer):
再设置合并工具(Merge Tool):如我的设置为:C:\Program Files (x86)\Beyond Compare\BCompare.exe %mine %theirs %base %merged。注意根据自己的安装路径修改。
冲突
并行开发必然会遇到冲突,项目越大,冲突越多,越难解决。有些人一看到冲突就发憷,是因为他还不懂得如何使用一些工具。
制造冲突
要学会如何处理冲突,我们得先能制造冲突。就像做安全防御,你不懂进攻,如何防守呢?
制造冲突很简单:两个用户,同时针对同一个文件的一个地方进行修改。比如u1进行了如下修改,并commit、push到server:
在同时,u2进行了如下操作并commit:
commit后尝试push到server会报错,此时需要先把server上的代码(u1的commmit)拉下来,合并后才能push。但合并时会报冲突:
到了这一步,就必须要借助工具才能很好的解决问题了(这个demo太简单,也许你可以手动解决,但真正的工程中,手动解决是极其低效,极容易出错的)。
点击resolve,打开冲突解决界面,所有红色的文件都是有冲突的(status为Conflict)。
解决的办法是一个一个的鼠标双击,此时会启动bc的三方合并:
此时去冲突文件所在的目录查看,发现生成了三个文件:
这三个文件,就是bc用于冲突解决的重要依据,作为输入,并排在bc的上方,并且是只读的,在合并过程中无法编辑。
最下面的一个窗口是合并结果区,同时可以手动编辑。合并完成后,点击右边的保存图标(),保存合并结果。
关闭bc,回到乌龟,在冲突文件上右键,选择Resolved(点击后BASE、LOCAL、REMOTE这些临时文件将被删除):
此时文件恢复为正常颜色,status变成了modified,这个文件的冲突解决。
重复上述操作,直到所有文件冲突解决为止。
lv1= lv2= type=
git 培训
git 规范
git 分享
git ignore
永存于历史记录,体积无法变小。
强推一定要通知所有的人员
两种操作:local & remote:fetch、pull、push;
local:编辑 & 形成历史(commits)
remote:交换commits
objects
file:///E:/ebook_decompile/TortoiseGit/Introductio.html
git cat-file -p <commit>
tree:root tree就是一个版本
refs & objects
Reset Demystified
--hard --mixed --soft
merge
E:\xjc\yscx_xjc\web\Webadmin\Action\OrderAction.class.php
cherry-pick & rebase
3 way merge;冲突解决
upstream,origin merge
.gitignroe
help!!
git help *, eg: git help log
<> & []
一个成功的Git分支模型
lv1= lv2= type=
git pull auto rebase
只有分支间的合并采用merge!其他时候都用rebase。git pull时要用rebase,不要merge!!
给git pull默认加上rebase功能
https://blog.csdn.net/zzqhost/article/details/71307716
git config --global branch.autosetuprebase always
这样对于新建的分支都会设定上面的rebase=true了。已经创建好的分支还是需要手动配置的:
git config branch.master.rebase true