Git 版本控制系统¶
该文档参考Git 教程 廖雪峰 进行编写以及记录,目的在于整理以及学习Git分布式版本控制系统
版本控制系统¶
集中式(CVS及SVN)VS 分布式(Git)¶
集中式版本控制系统 SVN¶
版本库集中存放在中央repository,这个repository像一个文件服务器,它会记住每一次用户提交的文件改动,所以用过可以查看文件的变动历史,也可以将文件恢复到之前的版本。新人开始干活了,用的都是个人电脑,所以要先从中央repository获取最新的版本,然后开始干活,干完活了,再把自己的文件修改上传给中央repository,生成新的版本。集中式版本控制系统必须联网才能工作,局域网中速度还行,但是在互联网环境下,网速通常比较慢
repository(源代码库):源代码统一存放的地方,用户提取、提交、更新代码的地方
checkout(提取):刚开始工作时,你需要从repository checkout一份
commit(提交):工作对代码进行了修改,你需要将修改的文件Commit到repository
update (更新):别人也会提交新代码到repository, Update一下你就可以和repository上的源代码同步了
分布式版本控制系统 Git¶
working directory(工作区):在本地电脑里的工作目录
staging area(暂存区):index文件中,缓冲commit操作
repository(版本库):管理所有版本文件的仓库
工作流程: 克隆Git资源作为工作目录;在本地的资源上修改或添加文件;如果他人提交了修改,你可以更新资源;调试通过后提交修改的文件;发现还是有错误,可以撤回提交再次修改后提交。git add从工作区提交到暂存区,git commit从暂存区提交到本地仓库,git push从本地仓库提交到远程仓库。
文本文件、二进制文件¶
所有的版本控制系统,只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
如果要真正使用版本控制系统,就要以纯文本方式编写文件。因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
分支管理¶
解决冲突¶
当Git无法 自动合并分支 时,就必须首先解决冲突。解决冲突后,再提交,合并完成
-
有关文档内容的冲突: Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:
多人协作¶
多人协作的工作模式通常是这样:
- 首先,可以尝试用
git push origin <branch-name>
推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并;- 如果本地分支和远程分支的链接关系没有创建,提示
no traching information
, 使用git checkout -b <branch-name> origin/<branch-name>
, 本地和远程分支的名称最好一致;
然后建立本地分支和远程分支的关联,使用git branch --set-upstream <branch-name> origin/<branch-name>
. - 如果合并有冲突,则解决冲突,并在本地提交;
- 如果本地分支和远程分支的链接关系没有创建,提示
- 没有冲突或者解决掉冲突后,再用
git push origin <branch-name>
推送就能成功!