分布式版本控制系统,控制系统


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

mkdir:已创建目录"gittest"

[root@slave1~]#cdgittest

[root@slave1gittest]#gitinit

初始化空的Git版本库于/root/gittest/.git/

[root@slave1gittest]#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

9directories,13filesgitconfig

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

配置文件中的信息;

[root@slave1gittest]#gitconfiguser.name"ljy"

[root@slave1gittest]#gitconfiguser.email"ljy@123.com"

git add

将未被追踪的文件添加至暂存区;

[root@slave1gittest]#echo123>testgit.txt

[root@slave1gittest]#

[root@slave1gittest]#gitaddtestgit.txt

git commit [-m “message”]

将暂存区的文件提交到工作区;

[root@slave1gittest]#gitcommit-m"v1.0"

[master(根提交)6a4d95c]v1.0

1filechanged,1insertion(+)

createmode100644testgit.txt

[root@slave1gittest]#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

15directories,21files

git status

显示暂存区中的索引状态;

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

显示暂存区和工作区中的而文件的信息;

[root@slave1gittest]#gitls-files-s

100644190a18037c64c43e6b11489df4bf0b9eb6d2c9bf0testgit.txt

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

显示仓库中对象的内容,类型及大小等信息;

[root@slave1gittest]#gitcat-file-t190a

blob

[root@slave1gittest]#gitcat-file-t46a8

tree

[root@slave1gittest]#gitcat-file-t6a4d

commit

git mv

移动或者重命名一个工作区或暂存区中的文件;

git rm

在工作区和暂存区同时删除文件,--cached将暂存区中被追踪的文件变为未被追踪的状态;

git log

显示git的日志信息;

[root@slave1gittest]#gitlog

commit6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c

Author:ljy

Date:TueDec419:33:082018+0800

v1.0

对象的对应关系:

image.png

git diff [--color]

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

[root@slave1gittest]#gitlog

commitde40c12e931f0796a975185873eac2829e1b896b

Author:ljy

Date:TueDec420:19:252018+0800

v1.1

commit6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c

Author:ljy

Date:TueDec419:33:082018+0800

v1.0

[root@slave1gittest]#gitdiff6a4dde40--color

diff--gita/789.txtb/789.txt

newfilemode100644

index0000000..285ff73

---/dev/null

+++b/789.txt

@@-0,0+1@@

+7890

diff--gita/testgit.txtb/testgit.txt

index190a180..ce8c77d100644

---a/testgit.txt

+++b/testgit.txt

@@-1+1,2@@

123

+456

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

撤销提交;将HEAD指向某个指定的提交状态;

[root@slave1gittest]#gitlog

commitde40c12e931f0796a975185873eac2829e1b896b

Author:ljy

Date:TueDec420:19:252018+0800

v1.1

commit6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c

Author:ljy

Date:TueDec419:33:082018+0800

v1.0

[root@slave1gittest]#gitreset--mixed6a4d

重置后撤出暂存区的变更:

Mtestgit.txt

[root@slave1gittest]#gitstatus

#位于分支master

#尚未暂存以备提交的变更:

#(使用"gitadd..."更新要提交的内容)

#(使用"gitcheckout--..."丢弃工作区的改动)

#

#修改:testgit.txt

#

#未跟踪的文件:

#(使用"gitadd..."以包含要提交的内容)

#

#789.txt

修改尚未加入提交(使用"gitadd"和/或"gitcommit-a")

[root@slave1gittest]#gitlog

commit6a4d95c1c6980bd0a5a121696b301cb6bfd9d10c

Author:ljy

Date:TueDec419:33:082018+0800

v1.0

[root@slave1gittest]#gitadd789.txt

[root@slave1gittest]#gitcommit-m"v1.1"

[master7c7a8e3]v1.1

1filechanged,1insertion(+)

createmode100644789.txt

相关内容