1.工作原理
git是Linux
创始人Linus Torvalds
于2005年为Linux内核开发而创作的分布式版本管理系统,在此之前广泛使用的集中化的版本控制系统,Centralized Version Control Systems
,如subversion
等,GIT出现后虽其使用相对复杂一些,但因其高效率,获得了程序员的普遍接受。
版本控制系统就是为了存储文件的修改历史,最初人们使用本地版本控制系统,就是在本地手动备份不同版本文件,记录文件修改历史信息,之后是集中化的版本控制系统,多人开发时仅需获取最新版本的文件快照,共同维护一份单一集中管理服务器上的文件,这中做法很简单,缺点是开发者的工作高度依赖单点的中央服务器,可靠性容灾性很差。分布式版本控制系统中,每个开发者都需把远程的代码仓库完整的拉取(pull)下来,本地文件又分成了工作区,缓冲区,历史仓库,因此能够在本地独立开发。
git本地工作是通过维护不同的文件状态来实现的,可分为三个区,
工作区(Working Directory):这是开发时对文件进行直接编辑修改的区域,开发完成后,如果想把自己的修改提交到远程服务器仓库对应的分支,还有两个状态要走。缓冲区(Stage):工作区的修改,首先是要提交到缓区,缓冲区是作为工作区到本地仓库的一个过渡,可通过add
和stash
命令将工作区修改加入到缓冲区。本地仓库:通过add
加入到缓冲区的文件修改,如果要放入本地仓库,可通过commit
命令来操作,至此,工作区的修改才放入到本地仓库,修改放入本地仓库后,才算准备好提交到远程服务器仓库上。最后,通过push
命令即可即可将本地修改最终推送到远程服务器仓库对应分支上。
2.常用操作
下载客户端、配置帐号、初始化仓库、add/commit/pull/push,解决冲突等可参考码云社区
2.1分支管理策略
首先要明白,git分支是指文件修改的快照并不是文件的完整copy,
可以理解为1个分支上只记录了该分支的上的修改(除非主动merge或rebase主分支上的修改),因此分支切换是非常方便快速的。
开发流程中,从开发到部署代码分支会分为development
,release
和master
,这是三个最关键的分支,在正常的版本开发工作中,开发者都基于development
分支新建功能分支,1个功能特性开发完成即合并到development
分支转测试,待版本所有功能特性都开发测试完成,development
分支代码pull request
到release
分支上准备发布上线,发布上线成功后,release
分支代码合并到master
分支上进行备份,当大版本之间需要修改系统bug
时,此时可以从release
上直接拉bug fix
分支,修改后同时checkout
到development
,备份到master
分支,如此,既能保持release
分支与master
分支一致,又能保证release
分支代码不会有超前development
分支的修改,有效避免代码的分歧和冲突。
2.2如何merge部分文件到主分支
现在前后台独立开发,代码仓库还是同个,若某个后台人员与前台同事共同在一个功能分支开发时,需要把自己完成的服务提前合到主分支时,该如何操作呢?这个时候checkout
就会发挥出非常好的作用,首先基于当前功能分支,新建一个ready_to_master_branch
分支
,切换到ready_to_master_branch
分支,从共同开发的功能特性分支feature_branch
挑捡(checkout)出自己修改的文件夹或文件,然后便可将ready_to_master_branch
合并到master
分支。
git branch ready_to_master_branch
git checkout ready_to_master_branch
git checkout feature_branch ./src/web.back.end.code/service.java
2.3如何将另个仓库merge到新仓库
可保留旧仓库的提交历史记录
git remote add repository2 /data/repository2
git checkout -b new_branch
git pull repository2 branch_of_repository2 --allow-unrelated-histories
git checkout master
git merge branch_of_repository2
参考材料:
[1] https://git-scm.com/book/zh
[2] https://blog.csdn.net/chenxiqilin/article/details/54408817
[3] GitHub入门与实践.[日]大塚宏记著,支鹏浩等译:提取码: cj8h
[4] https://gitee.com/help/articles/4107
[5] http://www.allitebooks.org/version-control-with-git-2nd-edition/