Git分布式版本控制系统
使用Git服务的时候,要知道三种重要模式,分别是:
已提交(committed):表示数据文件已经顺利提交到Git数据库中。
已修改(modified):表示数据文件已经被修改,但未被保存到Git数据库中。
已暂存(staged):表示数据文件已经被修改,并会在下次提交时提交到Git数据库中。
1、首先配置你的个人用户和电子邮件,设置默认的文本编辑器;
[root@web01 ~]# git config --global user.name "web01" [root@web01 ~]# git config --global user.email "root@web01.com" [root@web01 ~]# git config --global core.editor vim [root@web01 ~]# git config --list
2、提交数据
[root@web01 ~]# mkdir linux [root@web01 ~]# cd linux [root@web01 ~]# git init #初始化git [root@web01 ~]# echo "first git repository" >read.txt [root@web01 ~]# git add read.txt #将该文件添加到暂存区 [root@web01 ~]# git commit -m "add the read file" #将文件提交到Git版本仓库 [root@web01 ~]# git status #当前Git版本仓库的状态:
3、设置忽略目录,把不想上传的文件写入到(工作目录/.gitignore)文件中
[root@web01 linux]# touch git.c #创建文件 [root@web01 linux]# vim .gitignore #设置忽略文件 git.c [root@web01 linux]# git add . #添加所有文件至暂存区 [root@web01 linux]# git commit -m "add the .gitignore file" #提交至版本库 如果有多个文件传至版本库中,可采用-a参数,这个就跳过暂存步骤,直接提交到版本库中 [root@web01 linux]# echo "Modified again" >>read.txt [root@web01 linux]# git commit -a -m "Modified again" 如果想把忽略文件git.c也提交上去,可以加-f参数强制提交 [root@web01 linux]# git add -f git.c #强制提交文件 [root@web01 linux]# git commit -a -m "Second modified again" #再一次提交至版本库
4、数据移除( rm -f )
[root@web01 linux]# touch database #创建一个新的文件 [root@web01 linux]# git add database #添加至暂存区 [root@web01 linux]# git status #查看已经添加database文件; [root@web01 linux]# git rm --cached database #利用cached参数,只是在暂存区移除,真实数据不会删除 [root@web01 linux]# ls #查看文件并没有删除 database git.c read.txt 而如果我们想将文件数据从Git暂存区和工作目录中一起删除,可以这样操作: [root@web01 linux]# git add . #添加所有文件至暂存区 [root@web01 linux]# git rm -f database #删除文件 [root@web01 linux]# ls #查看已经删除文件 git.c read.txt
5、数据移动 ( git mv )
[root@web01 linux]# git mv read.txt introduction.txt #重命名 [root@web01 linux]# git commit -m "change name" #提交文件到Git版本仓库
6、查看历史记录(git log )
[root@web01 linux]# git log #查看所有的历史记录 [root@web01 linux]# git log -2 #查看近两条历史记录 [root@web01 linux]# git log -p -2 # -p参数来展开显示每次提交的内容差异 [root@web01 linux]# git log --stat -2 #--stat参数来简要的显示数据增改行数 [root@web01 linux]# git log --pretty=oneline #--pretty参数显示每行一条提交记录 [root@web01 linux]# git log --pretty=fuller -2 #以更详细的模式输出最近两次的历史记录
还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:
%s | 提交说明 |
%cd | 提交日期 |
%an | 作者的名字 |
%cn | 提交者的姓名 |
%ce | 提交者的电子邮件 |
%H | 提交对象的完整SHA-1哈希字串 |
%h | 提交对象的简短SHA-1哈希字串 |
%T | 树对象的完整SHA-1哈希字串 |
%t | 树对象的简短SHA-1哈希字串 |
%P | 父对象的完整SHA-1哈希字串 |
%p | 父对象的简短SHA-1哈希字串 |
%ad | 作者的修订时间 |
查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名:
[root@web01 linux]# git log --pretty=format:"%h %cn"
7、数据还原
[root@web01 linux]# git log --pretty=oneline #查看历史记录 还原版本使用命令(git reset),而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,用HEAD~5来表示往上数第五个提交版本。 [root@web01 linux]# git reset --hard HEAD^ #还原到上一个版本; [root@web01 linux]# git log --pretty=oneline #查看历史记录已经更新到上个版本; 查看所有历史版本,包括已经还原过的版本;用命令(git reflog) [root@web01 linux]# git reflog [root@web01 linux]# git reset --hard d990d1 #另外可通过SHA-1值进行还原,SHA-1值没有必要写全,Git会自动去匹配; 还可以使用checkout,还原最近的一条数据; checkou规则是如果暂存区中有该文件,则直接从暂存区恢复,如果暂存区没有该文件,则将还原成最近一次文件提交时的快照 [root@web01 linux]# git checkout -- read.txt
8、标签管理
[root@web01 linux]# git tag v1.0 #添加标签 [root@web01 linux]# git tag #查看标签 v1.0 [root@web01 linux]# git show v1.0 #查看此标签的详细信息; 创建带有说明的标签,通过git密文的前几位设置标签名,-m指定说明文字。 [root@web01 linux]# git tag v0.9 -m "version 0.9 released" 00953 [root@web01 linux]# git tag -d v1.0 #用-d删除标签名。
9、管理分支结构
(1)创建分支
[root@web01 linux]# git branch test #创建分支名称为test; [root@web01 linux]# git checkout test #切换至分支; [root@web01 linux]# git branch #查看分支情况;当前分支前有*号 * test master [root@web01 linux]# echo "Create a new branch is quick" >>read.txt #添加内容 [root@web01 linux]# git add read.txt #添加至暂存区; [root@web01 linux]# git commit -m "new branch" #提交至版本库; [root@web01 linux]# git checkout master #切换至主分至; [root@web01 linux]# cat read.txt #查看文本内容;
(2)合并分支
[root@web01 linux]# git merge test #合并test分支; [root@web01 linux]# cat read.txt #查看上图中文本添加的内容是否正常; [root@web01 linux]# git branch -d test #删除分支; [root@web01 linux]# git branch #查看分支情况; * master
(3)内容冲突,只能手动处理。
[root@web01 linux]# git checkout -b test #创建一个test新分支并切换至该分支; [root@web01 linux]# vim read.txt #在应文件中添加一句话,如下 Creating a new branch is quick & simple. [root@web01 linux]# git add read.txt [root@web01 linux]# git commit -m "Creating a new branch is quick & simple. " [root@web01 linux]# git checkout master #切换至主分支; [root@web01 linux]# vim read.txt #同时也在文本中添加一句话,如下 Creating a new branch is quick AND simple. [root@web01 linux]# git add read.txt [root@web01 linux]# git commit -m "Creating a new branch is quick AND simple. " [root@web01 linux]# git merge test #合并提示内容有冲突,无法正常合并; Auto-merging read.txt CONFLICT (content): Merge conflict in read.txt Automatic merge failed; fix conflicts and then commit the result. [root@web01 linux]# vim read.txt <<<<<<< HEAD Creating a new branch is quick AND simple. ======= Creating a new branch is quick & simple. >>>>>>> linuxprobe Git用< <<<<<<,=======,>>>>>>>分割开了各个分支冲突的内容,我们需要手工的删除这些符号,并将内容修改为: Creating a new branch is quick and simple. [root@web01 linux]# git add read.txt [root@web01 linux]# git commit -m "conflict fixed" [root@web01 linux]# git log --graph --pretty=oneline --abbrev-commit #查看Git历史提交记录(可以看到分支的变化) [root@web01 linux]# git branch -d test #最后删除test分支; [root@web01 linux]# git branch #正常显示为一个主分支; * master
9、部署Git服务器
Git服务器 | centos7 | 192.168.10.10 |
Git客户端 | centos7 | 192.168.10.20 |
(1)服务器部署
[root@web01]# yum install git #安装git程序 [root@web01]# mkdir linux.git #新建Git库 [root@web01]# chown -Rf git:git linux.git/ #修改权限 [root@web01]# cd linux.git/ #进入库目录 [root@web01 linux.git]# git --bare init #初始化Git版本仓库
(2)客户端配置
[root@web02]# ssh-keygen #生成公钥文件 [root@web02]# ssh-copy-id 192.168.10.10 #把文件传送给Git服务器 [root@web02]# git clone root@192.168.10.10:/root/linux.git #从Git服务器中克隆版本仓库 [root@web02]# cd linux #进入库中初始化Git工作环境,如下 [root@web02]# git config --global user.name "web02" [root@web02]# git config --global user.email "root@web02.com" [root@web02]# git config --global core.editor vim [root@web02]# echo "I successfully clone the git repository" >read.txt #向Git服务器中提交新文件 [root@web02]# git add read.txt #添加至暂存区 [root@web02]# git commit -m "Clone the Git repository" #提交至版本库 [root@web02]# git status #查看库状态 [root@web02]# git remote add server root@192.168.10.10:/root/linux.git #定义远程Git服务器 [root@web02]#git push -u server master #将文件提交到远程Git服务器
10、Github托管服务
(1)首先https://github.com,注册一个账号用于存放自己的代码;本人账号链接为:https://github.com/hume88/linux.git/,进入配置好版本库名称,还要填好公钥地址,以免客户端连不上服务器;
(2)配置客户端
[root@web02]# git clone https://github.com/hume88/linux.git/ #把版本仓库克隆到本地 [root@web02]# git remote add origin https://github.com/hume88/linux.git/ #定义远程Git服务器,远程库的默认名称是origin [root@web02]# git remote #查看远程库里的文件 linux origin [root@web02]# cd linux #进入远程版本库 [root@web02]# echo "Test the centos system" > features #向版本库中添加新文件测试 [root@web02]# git add features #添加至暂存区 [root@web02]# git commit -m "add features" #提交至版本库 [root@web02]# git push -u origin master #将本地的Git仓库同步到远程Git服务器,需要填写用户名与密码; 此时已经完成所有操作,刷新服务器网页会多一个features这个文件,表示连接服务器已经连接并发布新的代码成功。