前言

git和svn概念上有很大区别,如果你以前使用过svn一类的工具,那么使用git的时候,你需要把观念转换过来。不要用svn的理念来使用git。

git与svn相比的一些优势区别:

  1. svn 更新版本库对,提交等等操作需要在线完成。git则不需要,git本地会有一个版本库,当一段时间需要同步的时候,联网更新下本地版本库就可以。
  2. svn 版本库没有本地版本一说,所以当我们创建分支,更新分支,必须是在服务器上。git在本地可以创建任意分支,本地创建任意分支的好处就是,当我们正在开发一个功能,突然又有一个新需求,这个时候你就可以新建一个分支,来完成你的新功能,然后提交,最后切换到原来的分支,完成你原来的功能,然后合并分支,就可以把2个功能合并一起。这对于突发任务什么的,能起到很好的效果。

优势有很多,这里就不一一介绍,我们主要目的还是能运用。所以下面主要是介绍实际操作。

Git客户端的安装

Mac 上一般自带了git。 所以无需安装。如果没有安装请到http://sourceforge.net/projects/git-osx-installer/界面下载安装。

Windowns 用户请到 http://msysgit.github.com/ 页面去下载安装。

安装完成后即可使用git命令了。

安装完成后我们需要做一下基本的配置。以后使用git提交文件的时候用户名,邮箱都是在这里配置的。

Git 提供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
  • 在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings\$USER。此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。

设置用户信息

邮箱和名称请修改成你们自己的。

使用 git config –list 可以查看配置信息

在本地生成公钥

下面的邮箱替换成自己的。

$ ssh-keygen -t rsa -C “xcary89@gmail.com”

将公钥(id_rsa.pub文件)提交给管理员 让管理员把公钥添加进去,并配置权限。

id_rsa.pub 文件在用户目录下,如果是mac或者linux 这个文件在 ~/.ssh目录中。

添加example项目

$ git clone git@you_server_ip:example.git

如果提示需要输入密码。

请联系管理员。可能是用户公钥未添加。

GIT命令使用

创建仓库

在服务器操作

建立sample裸仓库

我这里是把测试用的仓库都放在test目录下,所以我要新建一个test目录

裸仓库已经创建成功了

本地获取sample.git

Clone命令的使用

如何clone到指定目录呢?

提交代码

这是提交到本地仓库.

这是提交到远程仓库。

本地提交后,才能提交到远程仓库。

特别注意,以后我们提交文件,必须要写好提交理由。 即-m 后面的那段文字。

更新仓库

github的更新有2个命令可以使用。

master 可以换成分支名,如果换成分支名,那么你这个命令就是更新分支。

git fetch origin master 命令是从远程仓库更新,但不合并到本地

git pull origin master 命令是从远程仓库更新,并且合并到本地

区别就是一个合并,一个不合并。合并是指像svn一样,update后就直接合并了文件。不合并是把远程的库同步到了本地的库,但是文件没有合并。

创建分支

这就是创建分支的命令了。dev1是我创建的分支。

如何查看我们创建了多少分支呢?

这里我们可以输入如下命令:

这条命令就是查看分支。

删除分支

切换分支

这条命令的意思是切换到dev1分支。

合并分支

前面说过,我们可以合并分支,将我们在分支上开发的功能合并起来。

举个例子,比如说我在dev1分支上开发了新功能,现在需要把dev1上的新功能合并到master.这里我如何操作呢?

master是主线版本的意思。

这2行命令的意思是切换到master,然后将dev1合并到master。

分支衍合

如果在远程分支master上。一个人对某个文件进行了修改,然后你在本地,对这个文件也进行了一些修改。那么,远程分支master和本地分支都“前进”了,这里就产生了分叉。这个时候我们可以用pull命令将远程分支合并到本地的分支,这个操作跟svn有点像。当是,如果你想要master分支历史看起来像没有经过合并一样,你就可以使用rebase命令。

衍合的时候也有可能出现冲突。所以你也需要解决。当在衍合的时候,如果遇到冲突,衍合会停止,并且需要你去解决冲突,解决完后可以继续衍合,输入如下命令:

你也可以终止衍合

这个时候会自动回到衍合之前的状态。

如何回退

会退到上一次提交前的状态

这是将最新的3次提交全部重置,就像没有提交一样。

$ git reset –hard commit(版本号)

这是回退到某一提交。

这个版本号可以通过git log来查看。

查看单个文件版本号

git的版本号不像svn是数字,git是md5值。

打TAG

每次上线,我们都需要养成一个好习惯,给上线的代码打tag。

命名方式有很多,这里我们可以自己定义以下。比如 v1.0.0