git使用手册

写在最前

git 版本管理

版本管理是程序开发中必不可少的环节,常用的版本管理工具有git 和svn
git的版本管理方式与SVN略有不同;在SVN中,代码的版本控制是集中式管理, git属于分布式管理. 本文的最后会有详细介绍.

git 的管理方式如下图所示:
首先需要从服务器上clone 程序, 当程序下载到本地以后, 可以在本地修改代码,建立分支等等;
如果想要提交代码,需要push 操作,产生冲突的时候需要merge

git的使用图

在server上创建代码仓库

此处以gitblit服务器为例
可以选择版本库的权限和初始化的文件


在服务器中建立版本库

使用Pycharm 同步server 的代码

Pycharm提供了有关版本控制的客户端工具:git、svn、cvs等等;使用方法如下: 在Pycharm的welcome 界面点击 checkout from version control-->git

使用pycharm

在提示框中填写正确的URL和项目下载的目录即可(目录名称可以和项目的名称不一致)

填写URL

Pycharm 中提交本地的git

点击 view->选中“toolbar”,此时在窗口的菜单栏下方出现了git工具栏,按照下图方式操作,即可完成本地的版本信息提交(注意: 本地版本的message 信息一定要写)。此时本地的版本与server上的不再同步了。

在本地修改版本

将本地版本提交到server上

如果想要将本地修改的程序与服务器的程序同步,需要做push操作;

push操作
这里需要选择本地的分支(此处是 ADD MESSAGE )

建立分支

在做push操作的时候,可能会产生 “冲突”导致无法正常提交; 这个时候需要在server上建立分支,并将程序提交到分支上去,后期再进行merge操作;

在向server 提交代码的时候,可以建立分支
push到分支

如何解决冲突?

冲突出现的原因是 server上的内容和本地的内容完全不一致导致的。可以采用两种方式解决:

  1. 建立分支,
  2. 将本地的版本合并到master 版本中(首先建立分支,然后合并分支)

建立分支的过程在上一节已经讲过;本节主要介绍合并;合并分支的过程如下所示:

Step1: 首先,选要将分支合并到哪个版本:点击pycharm右下角的按钮,切换版本

点击pycharm右下角的按钮,切换版本

Step2: 选择合并

合并操作可以在pytcharm中操作,如下图所示。如果服务器上存在冲突,就修改服务器的冲突; 如果本地出现的冲突,就修改本地的冲突 ;


pycharm中的merge操作

合并做完以后,可以在pycharm的Version Control中查看是否已经合并:

pycharm的Version Control

Step3 : 将合并的版本提交到server中即可

这次,再提交到服务器即可,通过查看查看提交次数来验证是否合并

服务器上查看提交次数

总结


说一下我的理解: 以上主要讲述pycharm的操作过程,对操作的描述比较简单,重在理解。 通过以上诸多操作,我们发现:几乎所有的操作(创建分支、提交代码、添加Tag)都是可以在本地完成的,如果想把本地的代码和服务器的同步,使用push操作即可。

如果产生冲突,就比较麻烦了:冲突的产生是由于本地和服务器之间的数据不能正常同步,存在冲突文件

需要先将产生冲突的文件放在新的分支里,并且上传到服务器 然后将版本切换到mster下,将新的分支合并到master里面 最后,再提交到maste上

其他

关于pycharm中git 的文件颜色

细心的同学应该发现pycharm使用了git以后,很多文件开始显示不同的颜色,在此解释一下:


clipboard.png

Git发展史

cvs –svn

在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!你也许会想,为什么Linus不把Linux代码放到版本控制系系统呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对 CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和 Linux的开源精神不符。

Linus花了两周时间用C写了一个分布式版本控制系统,这就是Git。一个月之内,Linux系统的源码已经由Git管理了。Git也迅速成为最流⾏的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移到GitHub,包括jQuery,PHP,Ruby等等。

集中式VS分布式的版本控制

1)集中式版本控制系统,

版本库是集中存放在中央服务器的,你干活的时候,用的都是自己的电脑,所以要先从 中央服务器取得最新的版本,然后开始干 活,干完活了,再把自己的活推送给中央服 务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后 回到家自己改,改完了,再放回图书馆。集中式版本控制系统最大的弊端就是必须联网 才能工作,如果在局域网内还好,速度够快,可如果在互联网上,遇到网速慢的话,可 能提交个10M的文件就需要5分钟,这还不得把人给憋死啊。

总之是一句话: 使用之前,需要先从server上同步代码,如果出现冲突,需要修改自己的代码,或者修改服务器的代码,解决了冲突以后才能提交---》服务器和本地始终是只有一个版本的

2)分布式版本控制系统

没有“中央服务器”,每个⼈的电脑上都是一个完整的版本库,这 样,你工作的时候, 就不需要联网了,因为版本库就在你自己的电脑上。既然每个认电脑上都有个完整的版 本库,那多个人如何协作呢?比如说你在自己电脑上改 了文件A,你的同事也在他的 电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到 对方的修改了。和集中式版本控制系统相比,分布式版本控制系统的安全性要好很多, 因为每个电脑里都有完整的版本库,某个人的电脑坏掉了不要紧,而集中式版本控制 系统的中央服务器要是出了问题,所有人都没法干活了

总之是一句话: 使用之前,需要先从server上同步代码,如果出现冲突,需要修改自己的代码,或者修改服务器的代码,解决了冲突以后才能提交---》服务器和本地的版本可以不同步,也可以提交与Sever上不同的版本,即是从master上建立分支

常用的git服务器

目前可以创建私人代码仓库的网站:
gitlab

github

gitblit

推荐阅读更多精彩内容