分佈式版本控制系統——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
對象的對應關係:
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