Git简介
Git是什么?
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git有什么特点?简单来说就是:高端大气上档次!
集中式VS分布式
Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?
先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
在Windows上安装Git
在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
创建版本库
1、选择一个工作目录,右键Git Bash Here
2、输入命令$ mkdir learngit,会该目录下创建一个空的文件夹
3、切换到learngit目录(这就是你的repository):$ cd learngit
4、将repository纳入git的管理:$ git init ,此命令会在learngit目录下创建一个.git文件夹,默认不可见,其中包含了git版本库(对应你的learngit目录)和一些配置信息,切记不要改动。
向版本库中添加文件
1、在工作目录learngit中创建文件readme.tx,并使用EditPlus或Notepad++编辑(设置字符集为utf-8 without BOM),因为word或记事本会影响文件的编码,文件内容如下:
Git is distributed version system.
Git is a free software.
2、将文件添加到版本库分为两步:先add后commit
$ git add readme.txt ,执行后没有反应?没有消息就是好消息!
$ git commit -m "create a file readme.txt"
1 file changed, 2 insertions(+) ,一个文件成功更新到版本库,文件的变更有两行内容
create mode 100644 readme.txt
commit的参数-m是注释本次提交的信息,便于我们以后在版本库中找到对应的版本,作为一个程序员,你应该养成这个好习惯。
先add是将文件资源管理器中的文件加入到版本库(.git)中的暂存区(stage),这是Git中很重要的一个概念,工作目录的文件要更新到版本库中必须都经过暂存区
你可以添加任意个文件到暂存区中,commit命令会将暂存区中的所有文件更新到版本库。
修改文件
当你需要把readme文件的内容修改如下:
Git is distributed version control system.
Git is a free software.
你想同步更新到版本库中,也需要先add后commit,在此之前我们可以看一下暂存区的状态:
命令为:$ git status 提示消息如下:On branch masterChanges not staged for commit:(没有文件被add到暂存区中) (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt(有文件被修改了)
我们可以查看具体的修改细节:
$ git diffdiff --git a/readme.txt b/readme.txtindex b0e8017..5f5c4e8 100644--- a/readme.txt+++ b/readme.txt@@ -1,2 +1,2 @@-Git is distributed version system.(修改前)+Git is distributed version control system.(修改后) Git is a free software.\ No newline at end of file如我所言, 现在我们可以放心提交了
$ git add readme.txt
在修改之前我们再看一下暂存区的状态:
$ git status
# On branch master# Changes to be committed:(已有更改的文件被add到暂存区)# (use "git reset HEAD <file>..." to unstage)## modified: readme.txt(该文件被修改过)git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:$ git commit -m "insert a word control"[master 1065292] insert a word control 1 file changed, 1 insertion(+)(有一行被修改), 1 deletion(-)
版本回退
我们再将readme内容修改如下:
Git is distributed version control system.
Git is a free software distributed under GPL.
并add后commit
$ git commit -m "append GPL"这时对应之前的三次commit,版本库中已经有了readme文件的三个版本,依次是:
1、create a file readme
Git is a version control system.
Git is free software.
2、insert a word control
Git is a version control system.
Git is free software.
3、append GPL
Git is a version control system.
Git is free software distributed under the GPL.
如果我们有n次提交,我们不可能将这些版本信息都记在脑子里,这时就用到了log命令:
$ git log
commit 0c9d4ec59e2975a28d7178abf9862afa542d56d8 (HEAD -> master)
Author: zaw <872852458@qq.com>
Date: Wed Feb 7 23:16:37 2018 +0800
append GPL
commit 10652926b09e0f9191db72cd5bad5cb84bf23dc3
Author: zaw <872852458@qq.com>
Date: Wed Feb 7 23:05:49 2018 +0800
insert a word control
commit 78d680c4b62d2e7d190c5ea820308e7297844410
Author: zaw <872852458@qq.com>
Date: Wed Feb 7 22:52:38 2018 +0800
create a file readme.txt:
log将为我们显示当前版本之前所有的提交信息,commit后面的一长串字母是每次提交的id(我们不一样),方便我们找到对应版本,
(HEAD -> master),HEAD是一个指针指向master分支,master分支是默认主分支,这点在后续会详解。关注后续练习。