Git 安装配置
Windows 平台上安装
在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行:
安装包下载地址:https://git-scm.com/download/win
安装完后,就可以打开命令行控制台进行操作:
Git 配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了 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 装在什么目录,就以此作为根目录来定位。
(1) 用户名与Email:由于GIt是分布式版本控制系统,在本地上有一个版本库,我们可以设置自己的用户名与联系方式:
ken@Linux:~/project$ git config --global user.email "rock@163.com"
ken@Linux:~/project$ git config --global --list
user.name=rock
user.email=rock@163.com
其中,--global指明user.name, user.email是全局变量。所谓全局变量,就是在你的PC上任何版本库这些变量都是有效的。
user.name, user.email分别表示用户名与邮箱。我们可以通过--list列举出我们已经设置过的内容。需要说明的是,user.name,
user.email是必须设置的,以后才知道是谁修改了项目。实际上git可设置的选项超过130个,只是大部分我们是不常用的。
(2)Git输出颜色:如果你想git反馈的信息中以不同颜色代表不同类型内容,那么可以设置颜色为"always"/'auto':
ken@Linux:~/project$ git config --global --list
user.name=ken
user.email=ken@gmail.com
color.ui=always
(3)git help:git有着非常丰富的用户手册,只要在命令行上敲入:
当然,前提是要安装好git-doc。也可以在线浏览:http://www.kernel.org/pub/software/scm/git/docs/
创建版本库
接下来我们可以开始学习如何用git来管理我们的项目了。
第一步,我们必须在本地创建一个版本库,即:.git目录。创建版本库很简单,用Git 提供的git init命令就可以创建了:
rock@Linux:~$ cd project/
rock@Linux:~/project$ git init
Initialized empty Git repository in /home/ken/project/.git/
上面的操作我们先创建了project目录,你的项目文件都存放在这个目录下。接着在目录执行:git init。OK。很简单,这时候会在/project/目录下生成一个.git目录,ls -a就可以看到。切换进去该目录,会看到一些文件和目录,主要用来存放版本库的元数据。
3、添加和提交记录
假设我们的项目只有一个C文件,这里用经典的hello world作为例子:
添加文件到库
提交保存到库
然后修改main.m文件内容
查看修改的文件:
可以看到main.m文件显示红色的modified为修改状态。
两次添加并提交保存
查看是否提交成功:
我们已经又提交了一次,为了查看是否提交成功,可以用git log -1。最后面是数字'1',不是字母'l'。数字1表示我要查看最近的一次提交,如果不加上这个参数,那么以往的提交就会全部打印出来了。而事实上,我们并不需要查看那么多的记录。
4、分支
分支是维护项目中并行历史记录的方法。分支如何理解?我们打两个比方来说明:
第一种情况:有两个人A和B走在同一条大路上(主分支master)要去同一个目的地C,在这条大路上有一条小路可以绕过去到达目标C,但是沿途风景不一样嘛。A还是直接走大路,而B选择了小路,绕了一个弯最后跟A在C相遇了。A跟B这时候交流自从分别后各自沿途看到了什么,于是他们对对方的见闻都有了了解。
第二种情况:A走在一条大路,中途有一条小路,A不知道这条小路能不能成功通向某一个地方,于是A记录了自己现在的位置,走小路一边走一边做记录沿途的风景,最后得到了一个结果:可以通向(或者不可以)。这时候A如果觉得这次实验他只是想知道结果,过程不重要,那么就扔掉刚才的记录(删除分支),如果他觉得有必要留下记录,那就不扔了,暂且保留(不删除分支)。
其实刚才说的两种情况就是最常用到的两种分支:用来支持不同版本的分支(第一个比喻)和特定功能开发的分支(第二个比喻)。接下里我们准备创建一个分支,看看分支有什么特点:
这条命令中,第三个参数是新的分支,第四个参数表示父分支,在这里我们的父分支是主分支master。所以这条命令就是在主分支master上创建一条新分支sub_1。我们可以用git branch命令来查看一共有多少个分支已经我们现在所在的分支:
* master
sub_1
前面的星号表示所在分支,所以我们现在有两个分支,所在的分支是master。
这个时候我们想修改刚才的文件。随便条件一个打印语句:printf("Hello, Git!\n");在打印"Hello, world!"的后面,然后提交:
[master 97661f6] add a print line after print hello world
1 files changed, 1 insertions(+), 0 deletions(-)
ken@Linux:~/project$ git log -1
注意到commit 前面有个-a参数,这个参数表示提交全部修改过的文件,连add指令也省了。
那么我们如何切换到新的分支上面去呢?很简单,用checkout命令就OK了。
Switched to branch 'sub_1'
切换成功了,如果你现在执行git branch命令,星号应该是在sub_1前面了。这时候你再去看看你的helloworld.c,里面的内容跟刚才修改后的一样吗?
5、发布版本
假如我们要发布项目,定版本号为1.0,那么可以为这个版本打一个标签:
rock@Linux:~/project$ git tag
1.0
上面第一条指令中,第三个参数是标签,最后一个则是表示打标签的点;接下来呢,我们要做的最后一件事是为发布的版本做打包成一个tar或者zip包。命令git archive可以实现这个功能:
> --prefix=helloworld-1.0/ 1.0 \
> | gzip > helloworld-1.0.tar.gz
rock@Linux:~/project$ ls
helloworld-1.0.tar.gz helloworld.c
上面的命令相对来说复杂了点。如果你的命令太长,可以用'\'来分行;format参数指定哪种格式输出,也可以是zip;prefix表示发布的包前缀;1.0是指定要对哪个标签打包;最后面就是压缩了,用的是Unix的管道,假如不熟悉的话,baidu一下吧:)