Skip to content

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 add readme.txt
    git commit -m "conflict fixed"
    

多人协作

多人协作的工作模式通常是这样:

  1. 首先,可以尝试用 git push origin <branch-name> 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
    1. 如果本地分支和远程分支的链接关系没有创建,提示 no traching information, 使用 git checkout -b <branch-name> origin/<branch-name>, 本地和远程分支的名称最好一致;
      然后建立本地分支和远程分支的关联,使用 git branch --set-upstream <branch-name> origin/<branch-name>.
    2. 如果合并有冲突,则解决冲突,并在本地提交;
  3. 没有冲突或者解决掉冲突后,再用 git push origin <branch-name> 推送就能成功!