分布式版本控制系统——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 
Date:   Tue Dec 4 19:33:08 2018 +0800
 
v1.0

 

对象的对应关系:

分布式版本控制系统——git_第1张图片


        

git diff [--color]

              比较任意的两次提交之间的差别比较:

[root@slave1 gittest]# git log
commit de40c12e931f0796a975185873eac2829e1b896b
Author: ljy 
Date:   Tue Dec 4 20:19:25 2018 +0800
 
    v1.1
 
commit 6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c
Author: ljy 
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 
Date:   Tue Dec 4 20:19:25 2018 +0800
 
    v1.1
 
commit 6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c
Author: ljy 
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 ..." 更新要提交的内容)
#   (使用 "git checkout -- ..." 丢弃工作区的改动)
#
#     修改:      testgit.txt
#
# 未跟踪的文件:
#   (使用 "git add ..." 以包含要提交的内容)
#
#     789.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@slave1 gittest]# git log
commit 6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c
Author: ljy 
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