1.Git的诞生:
Git是什么?
Git是目前世界上最先进的分布式版本控制系统。
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
引自Git官网
Git is a free and open source distributed version control system
designed to handle everything from small to very large projects with
speed and efficiency.Git is easy to learn and has a tiny footprint with lightning fast
performance. It outclasses SCM tools like Subversion, CVS, Perforce,
and ClearCase with features like cheap local branching, convenient
staging areas, and multiple workflows.
如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
2.分布式系统和集中式系统:
集中式:
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
分布式:
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
总结:
Git:最快、最简单也最流行(目前来说)。
3.Git安装:
官网:https://git-scm.com/downloads。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
●注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
4.创建版本库:
版本库又名仓库,英文名repository,怎么理解?即一个目录,在这个目录里面的所有文件都在被Git管理,每个文件的修改、删除,Git都能跟踪,以便时时刻刻都可以追踪历史,或者随时“还原”。
1.选择一个合适的地方,创建一个新的空目录:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
●pwd命令用于显示当前目录。在此电脑上,这个仓库位于/Users/michael/learngit。
若为Windows系统,为了避免出现各种问题,请确保目录名(包括父目录)不包含中文。
2.通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
Git仓库就建好了,并且是一个空的仓库(empty Git repository),当前目录下便多了一个.git的目录,这个目录是用来跟踪管理版本库的,没事不要手动修改。
如果没有看到,可以使用ls -ah命令就可以看见。
注:本人已经事先创建好了仓库,所以第一步不需要再重做。
5.将文件加入版本库:
所有的版本控制系统,只能跟踪文本文件的改动,比如TXT文件,网页,以及所有的程序代码等等,Git也不例外。而图片这些二进制文件,虽然可以管理,但是无法跟踪文件内部的变化,比如只知道图片从100KB变到了120KB,但是具体改动了什么,版本系统也不知道。
并且Microsoft的Word也是二进制格式,因此,也无法跟踪。
使用Windows的同学请注意:
不要使用系统自带的记事本编辑文本。因为此记事本的开发团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!
记得把Notepad++的默认编码设置为UTF-8 without BOM即可。
现在我们编写一个readme.txt文件
Git is a version control system.
Git is free software.
一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。编辑完成之后按Ctrl+Z退出(不建议用Ctrl+Z),专业使用为:
如果是输出状态,首先Esc退出输入状态,然后Shift+;,再输入q!或wq!(不保存改动,wq!是保存文件的写入修改)退出
1.用命令git add 告诉Git,把文件添加到仓库:
$ git add readme.txt
执行上面的命令没有任何显示就对了,要知道,Unix的哲学是“没有消息就是好消息”,说明添加成功。
2.用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
[master (root-commit) c8bfb57] wrote a new readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
简单解释一下git commit命令, -m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里面方便的找到改动记录。也可以不输入 -m “XXX”,但是不建议这么做,毕竟输入说明是让自己也知道,让别人也明白。
成功之后会告诉你,1 file changed:1个文件被改动(即我们新添加的readme.txt), 2 insertions(+):插入了两行内容(readme.txt有两行内容)。
为什么Git添加文件需要两步?
因为commit一次可以提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files"
小结:
初始化一个Git仓库,使用Git init命令。
添加文件到Git仓库,使用Git add 以及 git commit -m 来完成。
6.文件的修改:
我们继续修改之前写的readme.txt文件。首先使用cd learngit进入learngit文件夹,然后,输入vi readme.txt,改成如下内容:
Git is a distributed version control system.
Git is free software.
现在运行git status命令查看结果:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
git status命令可以让我们时刻掌握仓库当前的状态,上面的输出告诉我们,readme.txt被修改过,但是还没有准备提交的修改。
孙然Git告诉我们readme.txt被修改了,但如果能看看修改了什么,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看:
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。
知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了。
提交修改和提交新文件是一样的两步。