1、什么是GITGit是一个强调速度的分布式版本控制软件和源代码管理系统(SCM,source code management)。
Git最初是由Linus Torvalds为内核开发而设计的管理软件。
自从Git推出以来,已经被很多开源项目所采纳。
每一个Git工作目录是一个带有完全历史记录和版本信息的仓库,不依赖于网络和中央服务器。
Git是一个免费的开源软件,遵从GNU v2协议。
Git这个词在英语中的原意是很笨拙,没用的人。
Linus自嘲说:“我是一个任性的笨蛋,所以我把我的所有的项目的名字都和我很相似。
第一个是Linux,现在是Git。
”Git的帮助文档中描述Git为:笨拙的内容跟踪者(the stupid content tracker)。
(翻译自WIKI)关于开发Git的一些历史由来,可以看看这个网站:https:///lkml/2005/4/6/1212、为什么要用GIT∙更顺畅的工作流程,开发过程中,完全可以离线操作∙快速,Git分布式架构使得本地仓库包含所有的历史版本信息,你可以在不同的版本之间快速切换∙弹性的本地分支,在svn下,你建一个分支需要把源代码复制到另外一个文件夹,而在Git下,创建分支的代价是非常小的,只需一条命令∙仓库目录结构简洁,用Git复制一个项目,只会在项目根目录创建一个.git的目录,而其他目录很干净∙内容按元数据方式存储,所有的版本信息都位于.git目录下∙完整性好,更易于协作开发∙用户群大,现在已经有成千上万个开源项目采用Git来做项目管理,github上更是有无数个代码仓库3、GIT安装与配置a) 安装1.从源码安装在安装之前,你必须保证以下几个依赖包已经安装在你的系统上:curl, zlib, openssl, expat, libiconv。
如果你的系统是Ubuntu,你可以这样安装:apt-get install curl-devel expat-devel gettext-devel openssl-devel zlib-devel当所有的依赖项已经解决,就可以从/download上下载Git的源码,然后编译安装,具体命令如下:tar -zxf git-1.*.*.*.tar.gzcd git-1.*.*make prefix=/usr/local allsudo make prefix=/usr/local install2.在Linux上安装如果你的系统是Linux或者Fedora,你可以通过以下命令直接安装Git:yum install git-core (fedora)apt-get install git-core (ubuntu)3.在Windows上安装尽管Git是发源于Linux,但现在Windows上也有能够正常使用Git,只不过不支持中文,在Windows下所有的中文都显示问号,另外还有一些功能上的BUG。
所以建议还是在Linux 上去使用Git,如果你不得不工作在Windows上,你可以到/上下载msysgit的最新版,安装过程和其他Windows程序差不多,基本上点下一步就OK了。
Msysgit默认会安装git bash和git GUI这两个程序,一般用git bash就可以了,它支持常用的命令。
如果对Linux命令行不熟,你也可以用用git GUI,但功能有限制。
b) 第一次使用GIT在你安装好Git之后,你需要修改一些配置,才能正常使用Git。
Git通过“git config”命令来配置Git,这个命令有2个选项:--system, --global, 加上默认选项,分别对应Git上3级配置文件。
第一个是/etc/gitconfig文件,和--system对应,这是全局配置文件,修改这个文件,将会影响系统上所有的用户,所有的仓库。
第二个是你家目录下的/.gitconfig文件,与--global对应,修改它会对你当前用户的所有仓库产生影响。
第三个是你仓库中的.git/.gitconfig文件,这是“git config”默认修改的配置文件,它只会对你当前仓库产生影响。
在第一次使用Git时,你需要告诉你的协同开发者,你是谁以及你的邮箱,在你提交的时候,Git需要这两个信息。
具体通过以下命令设置:git config --global “Test OSS”git config --global user.email @当然你也可以不用--global选项,但这意味这你在每一个仓库中都要这样设置。
同时,你也可以指定你的编辑器,你的Diff工具:git config --global core.editor vimgit config --global merge.tool vimdiff你还可以通过”git config --list”命令来查看你的设置。
当你把Git设置好之后,如果你要和从Git服务器上获得仓库,或者向Git服务器提交你的代码(比如github),你可能需要生成你自己的ssh密钥对。
Git支持4种与服务器端通信的协议:git、http、ssh和https。
其中git只是一个只读协议,也就是说你只可以从服务器端获取仓库,但是你不能提交你自己的代码。
而http和https用的很少,大部分都只支持ssh 协议和Git协议。
当你通过ssh协议与远端服务器进行通信的时候,你可以通过以下命令生成ssh密钥对:ssh-keygen -t rsa如果你没有指定密钥名称和存放路径的话,它默认把两个不对称密钥放在你的家目录下的.ssh目录下,密钥文件默认名称为id_rsa和id_rsa.pub,前者是私钥,后者是公钥。
中间可能会要你设定访问密钥密码,这个可以设,可以不设,但为了安全考虑,还是建议你设一个访问密码。
否则,意味着任何持有你密钥的人都可以使用该密钥。
然后把你的公钥发给Git仓库管理员,然后你就可以通过ssh协议来访问服务器端,期间程序会自动进行密钥对匹配,如果你设了访问密码,你可能需要输入密码。
更多关于ssh的内容,请访问这里:/doc/zh_CN/books/handbook/openssh.html这些设定完之后,你可以通过获得任何一个公开的代码仓库来检测你的git是否工作正常。
比如下面这个:git clone git:///pub/scm/git/git.git4、GIT仓库Git做为一个资源管理和跟踪系统,如果想要把自己的文件托管在Git上,那么首先你得让Git知道你需要管理的文件在哪。
比如说现在我有一个项目,它在test文件夹里,我想让Git 管理这个项目,这个时候你需进入到这个目录,然后运行“git init”命令。
这个时候Git就会在该目录下生成一个.git的隐藏目录,Git用来进行版本控制和内容跟踪的所有文件都在该文件夹下。
处于git跟踪下的文件只具有三种状态:∙Modified(working directory):被修改过的文件∙Staged(staging area):通过git add添加到暂存区域的文件∙Committed(git directory):通过git commit提交到仓库的文件所以,一般的git工作流程可能是这样:修改过某些文件,然后把这些文件添加都暂缓区,再提交到仓库中形成一个版本或快照,最后提交到git服务器上。
而在中间,可能伴随着分支管理,分支切换,撤消与合并。
可能有些人会觉得很奇怪,为什么git会有暂存区域这个概念,直接提交到仓库中不就ok 了。
其实这是git为了做版本控制用的,试想如果没有暂存区域,每修改一个文件,就会形成一个版本,太过频繁,不易于管理。
暂存区域其实就是下一个版本的文件清单,你可以自由控制该往仓库中提交什么文件,这也可以避免在一个版本中包含一些中间文件,比如编译后的文件。
5、GIT基本流程1.初始化仓库初始化仓库有两种情况,一种是直接在一个空目录里建立一个项目,这时候你可以这样干:git init另一种是从其他机器复制一个仓库,比如这样:git clone git:///pub/scm/git/git.git (远程仓库)git clone https:///jQuery/jquery.git (远程仓库)git clone git@:wengpingbo/MicroBlog.git (远程仓库)git clone /home/oss/test.git (本地仓库)第一次从服务器上复制一个仓库,可能比较慢,因为git要把所有的历史记录和版本全部复制下来,这也算git的一个弊端吧!复制完后,就会在当前目录下生成一个工作目录,名字以仓库名字命名。
如果你不想指定目录,那就在上面的命令后加一个目录就ok了。
比如我想把test仓库放到oss仓库中:git clone /home/oss/test.git oss之后,你就可以开始你的工作啦!2.添加文件在编辑了几个文档之后,你可能突然想起来,好像文件还没有让git跟踪。
Git并不会实时的跟踪你的文件,只在你明确让它记录你的文件时,它才会把指定的文件的当前状态记录到仓库中去,然后又撒手不管了。
我想这就是说git笨的原因吧。
这个时候,你需要手动添加你的文件当暂存区域:git add filename1 filename2如果你懒得一个一个加,你可以试试这个:git add -A它会把当前目录下所有的文件都添加到暂存区域。
3.添加一个版本在添加完文件后,你可能觉得应该创建一个commit了。
git commit怎么样?是不是有点不对劲,好像这个命令并没有按你想象的那样跳出一个提交成功的提示,而是直接跑到了你在配置中指定的编辑器中了。
仔细看一下,原来是让你给这个版本做一些备注,随便写点什么,然后保存退出就ok了。
如果你不想这么麻烦,可以这么干:git commit -m …initial version‟可能你觉得之前讲的太罗嗦了,提交一个commit还这么麻烦,其实有一个捷径可以使你跳过添加文件这个过程:git commit -a -m …initial version‟大功告成,这个命令会把之前所有的已经添加的文件都加入到这个版本中。
可能你又有疑问了,之前添加的文件不是自动会加入到下一个版本中吗,问什么还加这个-a 参数?其实git add命令只是把指定文件的当前状态添加到暂存区域,并不代表一个文件一旦添加,就会一直存在每个版本中。
如果你添加一个文件后对这个又进行了修改,在你commit时候,只会commit这个文件添加时的状态,不会把之后的修改也commit进去,除非你再次添加。
4.推送变更在你commit完之后,你可能想把自己的代码提交到github或者其他git服务器上,与他人交流共享,这时候就需要和远程服务器打交道了。