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

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

git能夠快速高效的處理小型和大型項目的全部事務;對於版本的控制,git能夠很從容的應對;數據庫

Base源中有Git,全部能夠直接用git安裝;bash

git是在工做區中工做的,因此須要咱們建立對應目錄,git在目錄中工做;app

 

git的配置文件分爲三類:分佈式

       系統級:/etc/git/configide

              對全部的git倉庫都生效;與用戶無關;post

       全局級:~/.gitconfigspa

              對此用戶所管理的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 "ljy@123.com"

       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 <ljy@123.com>
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 <ljy@123.com>
Date:   Tue Dec 4 20:19:25 2018 +0800
 
    v1.1
 
commit 6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c
Author: ljy <ljy@123.com>
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 <ljy@123.com>
Date:   Tue Dec 4 20:19:25 2018 +0800
 
    v1.1
 
commit 6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c
Author: ljy <ljy@123.com>
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 <ljy@123.com>
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
相關文章
相關標籤/搜索