一种分布式版本控制系统。
版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,会把人憋死。
分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要搞很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都无法干活了。
在实际使用分布式版本系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
当然,Git的优势不单是不必联网这么简单,还有它极其强大的分支管理,把SVN等远远抛在了后面。
msysgit是Windows版的Git,从 官网 下载,然后按默认选项安装即可。
安装完成后,在开始菜单里找到Git -> Git Bash,一个类似命令行窗口的东西,就说明Git安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "Your Email"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意
git config
命令的--global
参数,用了这个参数,表示你这台机器行所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
版本库,又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
第一步,选择一个合适的地方,创建一个空目录:
$ mkdir myrepo
$ cd myrepo
$ pwd
/c/Users/Roger/myrepo
第二步,通过git init
命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in c:/Users/Roger/myrepo/.git/
至此,仓库创建完成且提示你是这是一个空的仓库(empty Git repository)。当然,不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。
首先要明确,所有的版本控制系统,其实只能跟踪文本文件的改动,比如txt文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第几行增删修改了什么。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100kb改成了120kb,但到底改了什么,版本控制系统不知道,也无法知道。
不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的。
因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留的问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
把文件添加到版本库也是很简单的事情。
首先,我们编写一个readme.txt
文件,内容如下:
Git is a version control system.
Git is free software.
注意,该文件一定要放在
myrepo
目录下(子目录也行)。
接下来,把这个文件放到Git仓库。这个过程只需要两步。
第一步,用命令git add
告诉Git,把文件添加到仓库:
$ git add readme.txt
执行上面的命令,没有任何的显示,这就对了!Unix的哲学是“没有消息就是好消息。”,说明添加成功。
第二步,用命令git commit
告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
[master (root-commit) dc767dc] wrote a readme file
1 file changed, 2 inserttions(+)
create mode 100644 readme.txt
git commit
命令中-m
后面输入的是本次提交的说明,可以输入任意内容,建议填写有意义的内容,方便日后从历史记录里快速找到改动记录。
git commit
命令执行成功后会告诉你,1个文件被改动(新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。
为什么Git添加文件需要add,commit这么两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件。比如:
$ git add file1.txt
$ git add file2.txt
$ git add file3.txt
$ git commit -m "add 3 files."
详细教程请戳这里:Git教程 - 廖雪峰的官方网站