
Support this site by buying a print version of the Pro Git book.
第一章
1.1关于版本控制
1)本地版本控制系统

2)集中版本控制系统

3)分布式版本控制系统
Git基础
快照而不是改变(snapshot not difference)
其他的系统存储每一个文件基于最初版本改变的数据
Git存储项目的快照
Git的操作几乎每一个都在本地进行
Git具有完整性
Git中所有的东西在存储前都会进行校验,然后被那个校验码引用。也就是说你不可能改变文件或目录的内容而不让Git知道。Git使用的校验机制是SHA-1 。
Git通常只添加数据
三种状态
注意了,如果你想让接下来的学习更轻松一点的话,这是你了解Git最重要的部分。在Git里,你的文件可以处于三种主要的状态:committed, modified, 和staged。Committed意味着你的数据已经被安全的存储在你的本地数据库里了。Modified意味着你已经修改了文件但是还没有提交到数据库里。Staged意味着你在当前的版本中已经标记了一个修改过的文件,接下来就是提交了。
一个Git工程中有三个主要的section:the Git directory, the working directory, and the staging area.
The Git directory是存储工程元数据和对象的数据库。这是Git中最重要的部分,从另一台电脑clone a repository就是拷贝的它。
The working directory是从工程中check out出来的一个单独的版本。这些文件是从The Git directory中pulled out出来的经过压缩的数据库,它存在你的硬盘上供你使用或修改。
The staging area是一个简单的文件,它包含你下一次提交的信息。这个文件通常包含在你的Git directory里。它有时被称为索引,但是它的标准叫法是临时区域(staging area)。
Git大概的基本工作流程:
1、你在working directory里修改文件
2、你stage文件,将它们的快照添加到staging area里
3、你commit一下,这将会拿staging area里的文件并且将这个快照永远存储在Git directory里
如果一个文件在Git directory里有一个特定的版本,那么它就是committed。如果它被修改了,但是已经被添加到staging area里了,那么它是staged。如果它从check out出来后已经被改变了,但是没有staged,那么它就是modified。在第二章,你将会更深入了解这些状态,以及如何利用它们,或者如何完全跳过staged部分。
首次安装
配置
/etc/gitconfig
: 包括所有用户所有库的配置。如果你对git config
指定选项--system
, 它就会从这个文件读取信息。~/.gitconfig
: 特定用户。 可以让Git读写这个文件通过指定选项--global
.
- 在git directory里的配置文件(也就是,
.git/config
) 你当前使用的库里的: 只是对这个库起作用.每一个层次都会覆盖前面的一个,所以.git/config
将会覆盖/etc/gitconfig
身份标识
安装完Git后的第一件事情就是设置用户名和Email。这很重要,因为每次提交Git都会使用这些信息。它将会一直留在你提交的信息里。
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
编辑器
$ git config --global core.editor emacs
diff工具
$ git config --global merge.tool vimdiff
Git 支持 kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, and opendiff 。也支持自定义的工具。
查看设置
$ git config --list
user.name=Scott Chacon
user.email=schacon@gmail.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
查看指定的键值使用 git config {key}
:
$ git config user.name
Scott Chacon
获得帮助
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
you can try the #git
or #github
channel on the Freenode IRC server (irc.freenode.net) for in-person help。
---end chapter 1