Git在Windows下的安装
Git安装过程当中,一路默认便可。直到这个界面 html
为了咱们可以在windows的cmd中执行Git的操做,咱们选择第二项。接下来再一路默认便可。安装完成后,能够在cmd中输入
git --version,检查当前git是否已正确安装。
设置Git
首先须要设置的是user.name和user.email这两个全局变量值。这两个值用来讲明当前操做Git的操做人与其联系方式,在你修改代码后便会留下你的"足迹"。"全局"的意思是,你在这台计算机上使用任何Git版本库时,这些全局变量都是起做用的。
示例以下,实践中你得替换你本身的名字:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
经过命令git config,用户能够把此类信息提供给本地版本库,--global就是全局配置的意思了。
用下列命令可检查上述设置是否成功:
git config --global --list
除此以外,咱们一般还想将命令行中的输出根据不一样类型用不一样的颜色显示出来。能够设置如下命令。
git config --global color.ui "always"
在命令行中键入:
git help <command>,用但愿了解的具体命令名称替代<command>。Git将显示用户手册中该命令的描述。
建立第一个项目
在这里,咱们以一个很小的HTML项目为例,使用Git来记录和跟踪这个项目,用以演示Git的基本操做。
建立版本库
在Git中建立版本库,首先要决定把项目源代码存放在哪里。本例中,要建立一个简单的HTML页面,因此给这个项目取名为mysite。首先建立一个同名目录"mysite",并进入到这个目录,而后输入命令git init。整个过程以下:
$ mkdir mysite
$ cd mysite
$ git init
命令git init会建立一个.git目录。这个目录用来存放版本库的所有元数据,mysite目录做为工做目录树,存放从版本库中检出的代码。
代码修改
如今该往版本库中添加一个文件了,如今咱们建立一个名为index.html的文件,并添加标题文本"html world"。详细内容以下:
<html>
<body>
<h1>hello world</h1>
</body>
</html>
建立完一个简单的html文件后,咱们须要让Git跟踪这个文件,要让它知道这个文件要分为两步走:首先使用git add命令把该文件添加到版本库的索引(index);而后使用git commit命令提交。
$ git add index.html
$ git commit -m "add in hello world HTML"
git commit命令建立一个提交记录。提交记录是存储在版本中的历史记录,每提交一次建立一个记录,并标出代码的演进。Git把提交者的姓名和邮件地址,以及提交留言,都添加到提交记录中。
前面命令中参数-m的做用是,告诉Git本次提交的留言为add in hello world HTML。对于任何版本控制系统,适当书写的提交留言都是极其重要的。它能够说明提交的缘由。
运行git log能够看到这个提交相关的信息:
git
命令git log运行后输出的第一行显示提交名称,该名称是Git自动产生的SHA-1码。Git经过它来跟踪提交。Git使用该hash码能够保证每一个提交的名称都是独一无二的,这在分布式系统中很是重要。 github
在项目中工做
下面学习怎样处理文件修改。
这个HTML文件里尚未<head>和<title>元素。下面为该文件添加这些元素:
<html>
<head>
<title>Hello World in Git</title>
</head>
<body>
<h1>hello world</h1>
</body>
</html>
修改完毕,Git能够检测到文件被修改。命令git status会显示工做目录树的状态,即当前的视图状态。
windows
上面的输出结果代表Git检测到了修改,修改过的文件在changed but not updated下列出来,若是要提交,需要暂存(stage)修改。
暂存修改,以准备把修改提交到版本库。Git中有三个地方能够存放代码。第一个是工做目录树,编辑文件时能够直接在这里操做。第二个是索引(index),也就是暂存区(staging area)。暂存区是工做目录树和版本库之间的缓冲区。第三个,也就是最终的一个,是版本库。暂存区中存放的是准备提交到版本库中的修改。
回头看命令git add,它能够暂存对index.html刚刚作的修改,它跟前面章节中添加一个新文件时使用的是同一个命令,只不过,此次它告诉Git要跟踪的是一个新的修改而非新的文件。 maven
暂存index.html后,执行命令
git status能够看到,输出信息中的标题从Changed but not updated变成了changes to be commited。若是打开了颜色开关,index.html这一行会由红色变为绿色。
接下来,可使用git commit提交在暂存区中的修改。
$git commit -m "add <head> and <title> to index" \
-m "This allows for a more semantic document"
注意这里使用了两个-m 参数。Git能够接受任意屡次提交留言的输入,每次另起一段。命令git log能够快速浏览提交留言。
这里引入了命令git log的一个新参数-1。能够经过改变该数字来限制命令git log输出的提交条目的个数。 分布式
理解并使用分支
分支是维护项目中并行历史记录的方法。在实际应用中,有两种分支比较有用:用来支持项目的不一样发布版本的分支,以及用来支持一个特定功能的开发的分支(常被称为Topic Branch)。在本节中,介绍第一种。
当前mysite项目的代码能够发布了,与此同时,借助分支,能够开始下一版本的新功能的开发了。分支能够为要发布的代码保留一份拷贝,因此无须中止正在开发的工做。建立分支的命令是git branch,该命令须要两个参数:新分支名称和父分支名称。新建立的分支基于已经存在的父分支。
$ git branch RB_1.0 master
该命令从主分支(master branch)上建立一个叫RB_1.0的分支。主分支是Git的默认分支。分支名称中的RB表示发布分支(release branch)。该前缀可让人快速分辨出哪些分支是发布分支。
如今来作一些新的改动。这些改动不影响准备发布的代码。下面给"bio"页面添加一个连接,在</body>以前增长以下代码:
<ul>
<li><a href="bio.html">Biography</a></li>
</ul>
而后使用下面命令提交这些修改:
$ git commit -a -m "add bio.html"
-a参数告诉Git提交所有修改过的代码。
如今主分支上有最新的修改,而发布分支上仍是原来的代码,请切换到发布分支,最发布前的最后修改。切换分支的命令是git checkout。
$ git checkout RB_1.0
在发布前作最后的修改:在<head>标记块中添加一些描述性的元标签。代码以下所示:
<head>
<title>Hello World in Git</title>
<meta name="description" content="hello world in Git"/>
</head>
保存并提交该修改:
$git commit -a -m "add meta info"
处理发布
如今准备发布1.0版本了,要给它打个标签。给Git中的代码打标签,意味着在版本库的历史中标记出特定的点,这样未来就容易找到相应版本的代码。由于是要作1.0版的发布,因此打一个名为"1.0"的标签:
$git tag 1.0 RB_1.0
以上的命令中的两个参数分别指明了标签的名称和但愿打标签的点,它们分别是1.0和RB_1.0分支的末梢(所对应的版本,或者说所对应的提交)。用不带参数的命令git tag能够查看版本库中的标签列表。目前只显示了刚刚打过的标签1.0:
$git tag
1.0
如今要把RB_1.0分支上所作的修改合并到主分支上来。变基命令git rebase能够完成这项工做。变基是把一条分支上的修改在另外一条分支的末梢重现。如今的版本树如(a)图所示,变基之后的版本树如(b)图所示。
首先使用git checkout切换回主分支。
$ git checkout master
接着运行命令git rebase,后面跟着一个参数:但愿变基到哪条分支的末梢,就使用哪条分支名称作参数。
$ git rebase RB_1.0
如今的版本库就如(b)图所示了。
最后,做为整理工做的一部分,删除发布分支RB_1.0。这看上去好像很危险,不过不用担忧,刚刚打的标签已经记录下了那个时候它的状态了(只要标签还在,从标签到版本树起点的一连串提交记录就都在)。这时删除该分支只是删除了分支的名字,并不会删除分支上的任何实际内容。
使用git branch -d 能够删除分支:
$ git branch -d RB_1.0
Deleted branch RB_1.0.
若是没有发布分支,未来如何给"1.0.x"分支打补丁呢?很简单,只须从打标签的地方再建立一条分支便可。此次依然使用git branch命令,当时命令的最后一个参数是新分支的父分支名称,如今只须把父分支名称改为发布标签名便可。命令以下:
$ git branch RB_1.0.1 1.0
$ git checkout RB_1.0.1
Switched to branch "RB_1.0.1"
使用Git作的最后一件事是,为代码发布建立归档文件。一般状况下,将标签对应的版本内容打包成一个tar包或zip包就够了。通常在项目中打包操做可使用maven执行,因此这里就不介绍使用Git 的archive打包了。
克隆远程版本库
到目前为止,咱们一直在介绍本地版本库的操做,尚未涉及到远程版本库。除了前面的功能外,Git也能够与远程版本库打交道,以分享本地的工做成果,或者复制其余的版本库到本地。
要与远程版本库打交道,首先要用命令git clone克隆远程版本库,它会在本地建立远程版本库的完整拷贝。
在GitHub(一个提供Git版本库托管服务的网站)上共享本书中mysite项目的所有拷贝,可使用git clone来把它们克隆到本地。
$ git clone git://github.com/tswicegood/mysite.git mysite-remote
命令git clone带有两个参数:远程版本库的位置和存放该版本库的本地目录。第二个参数是可选的,可是在个人本地已经有wysite目录,因此须要提供第二个参数指定远程版本库拷贝的目标目录。在后面的章节还会介绍更多的参数,可是大多数状况下这两个参数就足够了。在后面的章节还会介绍Git把本地改动推入到远程版本库,以及从远程版本库取来改动。