浅谈原理
首先说一下git是怎么样保存数据的。git通过保存快照的方式保存着数据,计算机储存结构类似TCP/IP一样的栈结构,有兴趣的可以更多的去看一下网络的七层协议。应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。快照的储存栈分为四部分,应用层、文件系统层、卷管理层、物理层。
git仓库中保存着五个对象,分别是两个树对象和三个blob对象。两个树对象分别是,提交信息对象树,这个树对象中主要保存了提交信息和另一个数对象的索引。第二个树对象主要记录这三个blob对象索引值和目录结构。
commit树主要是保存了一个指针和个人信息,指针会指向对应的blob树,而在blob树中的指针又会指向每一个blob对象。
2.remote->repository->workspace
remote(远程仓库)
repository(本地仓库)
workspace(开发工作区)
Index(缓存区)
对应这张图可以知道 pull,fetch,checkout,push,commit,add的多个命令怎么进行操作了。
3.分支开发到解决冲突
在GitHub上新建了一个新项目叫gitTest,先clone下来。
里面只有一个README.md文件,进行简单的修改。
git add .
git commit -m '修改readme文件'
git push
可以看到当前在maste分支上,进行add操作后在进行commit。这样就在master分支上把README.md文件修改成功。
切换分支
git checkout test
切到test分支,再对README.md文件进行修改操作。
这时候再进行合并操作
git merge master
发生了冲突,这时候git会把两个分支上的README.md文件自动的merge。此时再打开README文件可以看到
HEAD后面是当前分支的变化,master就是代表发生冲突的分支名。这时候就需要我们在这个基础上进行手动修改,删除冲突的部分,保留需要的部分提交。
这就是完美的解决了一次冲突。不过这是命令行解决的,还是比较麻烦,也可以去用图形化工具去解决冲突,比如IDE中自带的git工具也是很好用。window用户可以继续沿用svn的小乌龟工具,是有git版本的。都是解决冲突很好的方法。
4.分支规范及发布
在实际开发规范中,会有三条主要的开发分支,分别是dev,test,master。而在比较大的分支开发中会有跟多的分支和相应的分支规范。可能会多出预发布分支(release)、备份分支和紧急bug分支。这些都是各自的公司去制定规范去实施的。
5.git相关配置
(1).gitignore文件相关
在svn中是可以设置ignore的文件的,而在git中就更偏向于开发了。
文件是可以设置不在git仓库中上传的文件的。*表示全部,还有其他的具体文件。
6.了解更多
git还有很多很炫的使用,比如在文档中有git的钩子,git是用C编写的,理解C的指针概念就会上手git起来会比较快。目前楼主在了解git + jekins + docker自动化部署环境和持续交付,有兴趣的可以一起。