分佈式版本控制系統——git

分佈式版本控制系統——git

git可以快速高效的處理小型和大型項目的所有事務;對於版本的控制,git可以很從容的應對;

Base源中有Git,所有可以直接用git安裝;

git是在工作區中工作的,所以需要我們創建對應目錄,git在目錄中工作;

 

git的配置文件分爲三類:

       系統級:/etc/git/config

              對所有的git倉庫都生效;與用戶無關;

       全局級:~/.gitconfig

              對此用戶所管理的git倉庫都生效;

       庫級:~/.git/config

              僅對當前git倉庫生效;

 

              無論是什麼級別的配置文件,必須配置的參數有:(git對信息來源有要求)

                     user.name

                     user.email

 

 

git的對象類型

       blob:等效於文件;

       tree:等效於目錄;

       commit:對tree對象在一起而提交;

tag:對另一個對象的引用;

 

git的三種狀態

       已提交:commited,已經保存到本地對象數據庫中;

       已修改:modified,在工作區中修改了文件,但沒有保存到數據庫中;

       已暫存:staged,僅僅對已經修改的文件進行標記;

 

git中文件的分類:

       已追蹤:tracked,在版本庫中,用git add命令添加至索引的文件;

       未追蹤:只是在版本庫中新建文件,併爲用git命令進行任何操作;

       已忽略:ignored,通過文件忽略列表聲明被忽略的文件;

      

       注意:git不會對未追蹤的文件進行任何操作,只能處理已追蹤的文件;

 

git中幾個常用的命令:

       git init [--bare]

              用於對版本倉庫進行初始化,或者創建一個空的版本庫;

[root@slave1 ~]# mkdir -pv gittest
mkdir: 已創建目錄 "gittest"
[root@slave1 ~]# cd gittest
[root@slave1 gittest]# git init
初始化空的 Git 版本庫於 /root/gittest/.git/   
[root@slave1 gittest]# tree .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags
 
9 directories, 13 files    git config

       git config [--system] [--global]

              配置文件中的信息;

[root@slave1 gittest]# git config user.name "ljy"
[root@slave1 gittest]# git config user.email "[email protected]"

       git add

              將未被追蹤的文件添加至暫存區;

[root@slave1 gittest]# echo 123 > testgit.txt
[root@slave1 gittest]#
[root@slave1 gittest]# git add testgit.txt

       git commit [-m “message”]

              將暫存區的文件提交到工作區;

[root@slave1 gittest]# git commit -m "v1.0"
[master(根提交) 6a4d95c] v1.0
 1 file changed, 1 insertion(+)
 create mode 100644 testgit.txt
[root@slave1 gittest]# tree .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master
├── objects
│   ├── 19
│   │   └── 0a18037c64c43e6b11489df4bf0b9eb6d2c9bf
│   ├── 46
│   │   └── a8ca82107ff110975175732f18c351d5eecd01
│   ├── 6a
│   │   └── 4d95c1c6980bd0a5a121696b301cb6bfd9d10c
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags
 
15 directories, 21 files

       git status

              顯示暫存區中的索引狀態;

       git ls-files [-s] [-o]

              顯示暫存區和工作區中的而文件的信息;

[root@slave1 gittest]# git ls-files -s
100644 190a18037c64c43e6b11489df4bf0b9eb6d2c9bf 0     testgit.txt

       git cat-file [-t] [-s]

              顯示倉庫中對象的內容,類型及大小等信息;

[root@slave1 gittest]# git cat-file -t 190a
blob
[root@slave1 gittest]# git cat-file -t 46a8
tree
[root@slave1 gittest]# git cat-file -t 6a4d
commit

       git mv

              移動或者重命名一個工作區或暫存區中的文件;

       git rm

              在工作區和暫存區同時刪除文件,--cached將暫存區中被追蹤的文件變爲未被追蹤的狀態;

       git log

              顯示git的日誌信息;

[root@slave1 gittest]# git log
commit 6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c
Author: ljy <[email protected]>
Date:   Tue Dec 4 19:33:08 2018 +0800
 
v1.0

 

對象的對應關係:

image.png


        

git diff [--color]

              比較任意的兩次提交之間的差別比較:

[root@slave1 gittest]# git log
commit de40c12e931f0796a975185873eac2829e1b896b
Author: ljy <[email protected]>
Date:   Tue Dec 4 20:19:25 2018 +0800
 
    v1.1
 
commit 6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c
Author: ljy <[email protected]>
Date:   Tue Dec 4 19:33:08 2018 +0800
 
    v1.0
[root@slave1 gittest]# git diff 6a4d de40 --color
diff --git a/789.txt b/789.txt
new file mode 100644
index 0000000..285ff73
--- /dev/null
+++ b/789.txt
@@ -0,0 +1 @@
+7890
diff --git a/testgit.txt b/testgit.txt
index 190a180..ce8c77d 100644
--- a/testgit.txt
+++ b/testgit.txt
@@ -1 +1,2 @@
 123
+456

 

       git reset { [--soft] | [--mixed] | [--hard] }

              撤銷提交;將HEAD指向某個指定的提交狀態;

[root@slave1 gittest]# git log
commit de40c12e931f0796a975185873eac2829e1b896b
Author: ljy <[email protected]>
Date:   Tue Dec 4 20:19:25 2018 +0800
 
    v1.1
 
commit 6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c
Author: ljy <[email protected]>
Date:   Tue Dec 4 19:33:08 2018 +0800
 
    v1.0
[root@slave1 gittest]# git reset --mixed 6a4d
重置後撤出暫存區的變更:
M    testgit.txt
[root@slave1 gittest]# git status
# 位於分支 master
# 尚未暫存以備提交的變更:
#   (使用 "git add <file>..." 更新要提交的內容)
#   (使用 "git checkout -- <file>..." 丟棄工作區的改動)
#
#     修改:      testgit.txt
#
# 未跟蹤的文件:
#   (使用 "git add <file>..." 以包含要提交的內容)
#
#     789.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@slave1 gittest]# git log
commit 6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c
Author: ljy <[email protected]>
Date:   Tue Dec 4 19:33:08 2018 +0800
 
    v1.0
[root@slave1 gittest]# git add 789.txt
[root@slave1 gittest]# git commit -m "v1.1"
[master 7c7a8e3] v1.1
 1 file changed, 1 insertion(+)
 create mode 100644 789.txt


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章