Git 是一款开源的分布式版本控制系统,是当今最流行、先进的版本控制软件,没有之一。
Git 是一个分布式的版本控制系统,相反 SVN 就是一个集中式的版本控制系统了。SVN 每修改完一个文件要提交到服务端进行保存,而 Git 在本地有一个完整的版本库。
一、安装 Git
shell > yum -y install git
## 没错,已经安装完成了
2、Windows( WIN7 )
下载地址:https://github-windows.s3.amazonaws.com/GitHubSetup.exe
> 双击图标,选择 install( 会自动下载程序包 )
> 选择 skip ,如果你有 github 用户,也可以登陆哦
> 点击左上角的 "+" ,添加自己的版本库,输入版本库名、选择版本库路径,最后点击创建
> 然后就可以添加文件到版本库了,可以使用 Git Shell 命令行操作哟
二、Git( CentOS )
1、创建版本库
shell > git config --global user.name "linuxidc"
shell > git config --global user.email "linux@linuxidc.com"
shell > git config --global color.ui true
## 第一、二条是设置自己的用户名、邮件地址,分布式版本控制系统嘛,用来证明你是你。由于是全局配置,本地所有的版本库都是这个名,也可以单独为某个版本库设置( 这是必须设置的 )
## 第三条是智能颜色显示,输出的结果有颜色区分,看着方便、显着高大上,对就是这个意思
shell > mkdir -p /git/gitdb ; cd /git/gitdb
shell > git init
Initialized empty Git repository in /git/gitdb/.git/
shell > ls .git/
branches config description HEAD hooks info objects refs
## 使用 git init 初始化版本库( 在哪个目录下执行,哪个目录就是版本库目录 )
## 这样就创建好了一个 gitdb 的版本库了,版本库的相关文件全保存在隐藏目录 .git 下,一般不要手动去修改里面的东西,否则会把版本库玩坏
2、向版本库中添加文件
## 关于 Git 的操作,没有特殊说明情况下,操作目录都是 /git/gitdb/ 这里
shell > head -5 /etc/passwd | tee passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
## 把 /etc/passwd 文件中的前 5 行数据重定向到了 /git/gitdb/passwd 文件中,内容如上
shell > git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# passwd
nothing added to commit but untracked files present (use "git add" to track)
## 这时通过 git status 指令可以看到,工作区有一个名为 passwd 的文件,还没有提交( 提交前要使用 git add <file> 指令将文件添加到暂存区 )
## 工作区:版本库目录即为工作区( 在版本库目录中创建一个文件,就是在工作区创建一个文件 )
## 暂存区:使用 git add 指令时,实际上就是把文件从工作区添加到暂存区的过程
## 分支:创建版本库时,git 会自动创建一个 master 分支,使用 git commit 指令时,实际上就是把暂存区的所有文件提交到 master 分支
## 所以这三者之间的关系是:工作区-->暂存区-->分支
## git add 可以多次添加、也可以一次添加多个文件到暂存区,git commit 会一次性把暂存区的所有修改提交到分支
shell > git add passwd
shell > git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: passwd
#
## 添加完成后,发现暂存区有一个名为 passwd 的文件还没有提交( 可以使用 git rm --cached <file> 指令将暂存区的文件删除,注意:不是工作区的文件 )
shell > git rm --cached passwd
rm 'passwd'
## 删除后,你会发现:工作区的 passwd 文件还在,当使用 git status 指令时,状态又变回了没有 git add 时的状态
shell > git add passwd
shell > git commit passwd -m "one"
git commit -m "one"
[master (root-commit) 7af25e2] one
1 files changed, 5 insertions(+), 0 deletions(-)
create mode 100644 passwd
## 提交时,-m 参数用来做个标记,你可以标注一些有意思的东西,例如你做了什么修改之类的...
shell > git status
# On branch master
nothing to commit (working directory clean)
## 这时使用 git status 指令发现工作区已经没有东西了( 提交完成 )
3、恢复到上个版本或某个版本
shell > sed -i 's/nologin/login/g' passwd
shell > git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: passwd
#
no changes added to commit (use "git add" and/or "git commit -a")
## 由于把文件中 nologin 字段修改成了 login ,git status 发现 passwd 文件被修改了,但是还没有更新( git checkout -- <file> 待会说 )