分布式版本控制系统——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 "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