歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Git 單機版安裝使用

Git 單機版安裝使用

日期:2017/2/28 13:53:39   编辑:Linux教程

簡介:

Git 是一款開源的分布式版本控制系統,是當今最流行、先進的版本控制軟件,沒有之一。
Git 是一個分布式的版本控制系統,相反 SVN 就是一個集中式的版本控制系統了。SVN 每修改完一個文件要提交到服務端進行保存,而 Git 在本地有一個完整的版本庫。

一、安裝 Git

1、Linux( CentOS )

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 "[email protected]"
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> 待會說 )

shell > git diff HEAD -- passwd
diff --git a/passwd b/passwd
index 03dab68..96635c1 100644
--- a/passwd
+++ b/passwd
@@ -1,5 +1,5 @@
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
+bin:x:1:1:bin:/bin:/sbin/login
+daemon:x:2:2:daemon:/sbin:/sbin/login
+adm:x:3:4:adm:/var/adm:/sbin/login
+lp:x:4:7:lp:/var/spool/lpd:/sbin/login

## 可以使用 git diff 指令查看工作區跟版本庫( 分支 )的文件( 改動 )差異( HEAD 代表分支中( 版本庫 )當前版本,即最新版本 )

shell > git add passwd
shell > git commit -m "two"
[master 6fd5803] two
1 files changed, 4 insertions(+), 4 deletions(-)
shell > git status
# On branch master
nothing to commit (working directory clean)

## 將修改後的文件提交到了版本庫中,搞了個標記叫 two ,呃,代表第二次提交
## 提交完成後,工作區就沒有東西了

shell > sed -i 's/bash/python/' passwd
shell > git add passwd
shell > git commit -m "three"
[master 4cba143] three
1 files changed, 1 insertions(+), 1 deletions(-)
shell > git status
# On branch master
nothing to commit (working directory clean)
shell > git diff HEAD -- passwd

## 第三次提交完成,使用 git diff 指令發現版本庫中最新版本跟工作區文件完全相同

shell > git log
git log
commit 4cba14306c482080f442043b33f1dd640352a3f9
Author: linuxidc <[email protected]>
Date: Tue Jul 21 19:51:30 2015 +0200

three

commit 6fd5803a3fc2d3039ceaf6fc0b9c4fb8f0dfc67a
Author: linuxidc <[email protected]>
Date: Tue Jul 21 19:43:17 2015 +0200

two

commit 7af25e23a89ba16e5ff14a8da305542bc9cc6062
Author: linuxidc <[email protected]>
Date: Tue Jul 21 18:54:41 2015 +0200

one

## 通過 git log 指令可以清楚的看到總共有三次提交,標記為 one 、two 、three ,現在想回到上次版本( two )怎麼辦 ?

shell > git reset --hard HEAD^
HEAD is now at 6fd5803 two
shell > cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/login
daemon:x:2:2:daemon:/sbin:/sbin/login
adm:x:3:4:adm:/var/adm:/sbin/login
lp:x:4:7:lp:/var/spool/lpd:/sbin/login

## 使用 git reset 指令,HEAD^ 代表上個版本,HEAD^^ 代表上兩個版本,現在已經回到了 two 版本了( three 版本的 bash 變為 python 已經又恢復成 bash 了 )

shell > git log
commit 6fd5803a3fc2d3039ceaf6fc0b9c4fb8f0dfc67a
Author: linuxidc <[email protected]>
Date: Tue Jul 21 19:43:17 2015 +0200

two

commit 7af25e23a89ba16e5ff14a8da305542bc9cc6062
Author: linuxidc <[email protected]>
Date: Tue Jul 21 18:54:41 2015 +0200

one

## 現在就剩兩個版本了,最上面 two 為最新版本,即當前版本
## 恢復到某個版本,假設有好多好多個版本,使用 HEAD^^^^ 或 HEAD~[number] 的方式就很不方便了( 都要數 )
## 既然 HEAD 代表版本號,那麼恢復時直接輸入版本號不就可以了?非常方便,git log 指令輸出的 commit 字段( 7af25e23a89ba16e5ff14a8da305542bc9cc6062 )就是版本號

shell > git reset --hard 7af25e2
HEAD is now at 7af25e2 one
shell > cat 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

## 使用 git reset 指令時,只需輸出版本號的前幾位即可,可以看到已經恢復到了第一版,文件內容也變回了最初的狀態

shell > git log
commit 7af25e23a89ba16e5ff14a8da305542bc9cc6062
Author: linuxidc <[email protected]>
Date: Tue Jul 21 18:54:41 2015 +0200

one

## 這時使用 git log 指令發現只有第一次提交的版本了,那麼現在想回到 two 或 three 版本該怎麼辦?( 版本號沒有了 )

shell > git reflog
7af25e2 HEAD@{0}: 7af25e2: updating HEAD
6fd5803 HEAD@{1}: HEAD^: updating HEAD
4cba143 HEAD@{2}: commit: three
6fd5803 HEAD@{3}: commit: two
shell > git reset --hard 4cba143
HEAD is now at 4cba143 three

## 使用 git reflog 指令可以看到操作記錄,第一列就是我們想要的版本號,再次使用 git reset 指令恢復即可

shell > cat passwd
root:x:0:0:root:/root:/bin/python
bin:x:1:1:bin:/bin:/sbin/login
daemon:x:2:2:daemon:/sbin:/sbin/login
adm:x:3:4:adm:/var/adm:/sbin/login
lp:x:4:7:lp:/var/spool/lpd:/sbin/login
shell > git log
commit 4cba14306c482080f442043b33f1dd640352a3f9
Author: linuxidc <[email protected]>
Date: Tue Jul 21 19:51:30 2015 +0200

three

commit 6fd5803a3fc2d3039ceaf6fc0b9c4fb8f0dfc67a
Author: linuxidc <[email protected]>
Date: Tue Jul 21 19:43:17 2015 +0200

two

commit 7af25e23a89ba16e5ff14a8da305542bc9cc6062
Author: linuxidc <[email protected]>
Date: Tue Jul 21 18:54:41 2015 +0200

one

## 文件內容、版本信息都回來了,現在的版本恢復到了 three 狀態

4、git checkout -- <file> :還記得這個不 ?

shell > sed -i '1d' 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")

## 當修改了工作區文件內容後,使用 git status 指令可以看到這樣的提示( git checkout -- <file> 可以撤銷工作區文件的修改 )

shell > cat passwd
bin:x:1:1:bin:/bin:/sbin/login
daemon:x:2:2:daemon:/sbin:/sbin/login
adm:x:3:4:adm:/var/adm:/sbin/login
lp:x:4:7:lp:/var/spool/lpd:/sbin/login

shell > git checkout -- passwd

## 使用 git checkout 指令撤銷工作區文件的改動( 恢復到跟版本庫一樣的狀態,就是剛才所有的修改全部被撤回 )

shell > sed -i '1d' passwd
shell > git add passwd
shell > sed -i '1d' passwd
shell > git status
shell > git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: passwd
#
# 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
#

## 現在是一個什麼情況呢 ?首先刪除了文件第一行,執行了 git add 指令( 文件的修改被添加到了暫存區 ),接著又刪除了一次,那麼現在執行 git checkout 指令文件被恢復成什麼樣 ?

shell > git checkout -- passwd

## 實踐證明:文件被恢復到了暫存區的狀態,也就是刪除一次的狀態

shell > git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: passwd
#

## 這是暫存區的狀態,怎麼恢復暫存區的狀態,也就是把第一次的刪除也撤銷( 注意:這已經 git add 了 )

shell > git reset HEAD passwd
Unstaged changes after reset:
M passwd

## 還記得 git reset 這個指令不,沒錯用來恢復文件到上個版本的,也可以用來將暫存區的改動回退到工作區

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")

## 再次查看狀態,提示工作區有改動,可以使用 git checkout -- <file> 將工作區的改動也撤銷

## git reset 將文件回退到上一次版本 / 將暫存區的改動回退到工作區
## git checkout 將工作區的改動撤銷 / 將工作區的改動回退到暫存區

5、刪除文件

shell > git rm passwd
rm 'passwd'
shell > git commit -m "delete passwd"
[master 3be8d7a] delete passwd
1 files changed, 0 insertions(+), 5 deletions(-)
delete mode 100644 passwd

## 使用 git rm 指令將版本庫中的文件刪除,然後提交刪除( 文件就被刪除了,版本庫目錄下也沒有了 )

shell > git log
commit 3be8d7a3ade6f8947135843832bb6cfa075638a4
Author: linuxidc <[email protected]>
Date: Wed Jul 22 13:18:23 2015 +0200

delete passwd

commit 4cba14306c482080f442043b33f1dd640352a3f9
Author: linuxidc <[email protected]>
Date: Tue Jul 21 19:51:30 2015 +0200

three

commit 6fd5803a3fc2d3039ceaf6fc0b9c4fb8f0dfc67a
Author: linuxidc <[email protected]>
Date: Tue Jul 21 19:43:17 2015 +0200

two

commit 7af25e23a89ba16e5ff14a8da305542bc9cc6062
Author: linuxidc <[email protected]>
Date: Tue Jul 21 18:54:41 2015 +0200

one

shell > git reset --hard 4cba14
HEAD is now at 4cba143 three

## ... 好不容易刪除了,結果又給恢復了 ^_^ ,不要高興太早,如果修改完文件,沒有提交就刪除了文件,那麼剛才的修改就真的丟失了..

shell > rm -rf passwd
shell > git reset --hard 4cba14
HEAD is now at 4cba143 three

## 是不是再也不用擔心誤刪除文件了 ^_^ ( 單機情況下你別物理磁盤爆炸了,那就真的啥也沒有了 )

Git 教程系列文章

GitHub 使用教程圖文詳解 http://www.linuxidc.com/Linux/2014-09/106230.htm

Git 標簽管理詳解 http://www.linuxidc.com/Linux/2014-09/106231.htm

Git 分支管理詳解 http://www.linuxidc.com/Linux/2014-09/106232.htm

Git 遠程倉庫詳解 http://www.linuxidc.com/Linux/2014-09/106233.htm

Git 本地倉庫(Repository)詳解 http://www.linuxidc.com/Linux/2014-09/106234.htm

Git 服務器搭建與客戶端安裝 http://www.linuxidc.com/Linux/2014-05/101830.htm

Git 概述 http://www.linuxidc.com/Linux/2014-05/101829.htm

分享實用的GitHub 使用教程 http://www.linuxidc.com/Linux/2014-04/100556.htm

Ubuntu下Git服務器的搭建與使用指南 http://www.linuxidc.com/Linux/2015-07/120617.htm

Git 的詳細介紹:請點這裡
Git 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved