一、git的使用
1. 简介
-
git:版本控制系统,它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
-
git特点:
- 速度快
- 简单的设计
- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
-
获取 Git 仓库通常有两种方式:
- 将尚未进行版本控制的本地目录转换为 Git 仓库。
- 从其它服务器克隆一个已存在的 Git 仓库。比如: git clone
参考链接:https://git-scm.com/book/zh/v2
2. 原理
-
Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)
- 已修改表示修改了文件,但还没保存到数据库中
- 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
- 已提交表示数据已经安全地保存在本地数据库中
-
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录
3. 本地目录转换为git仓库并使用
[root@server1 ~]# yum install -y git #安装Git
[root@server1 ~]# mkdir demo
[root@server1 ~]# cd demo/
[root@server1 demo]# ls
[root@server1 demo]# git init #初始化版本库
Initialized empty Git repository in /root/demo/.git/
[root@server1 demo]# l.
. .. .git #.git目录是git跟踪管理版本库的,里面保存了相关更改信息,不要对这个目录中的内容进行更改
[root@server1 demo]# pwd
/root/demo
[root@server1 demo]# cd .git/
[root@server1 .git]# ls
branches config description HEAD hooks info objects refs
[root@server1 .git]# cd ..
[root@server1 demo]# touch README.txt
[root@server1 demo]# git status
[root@server1 demo]# git status -s
?? README.txt
[root@server1 demo]# git add README.txt
[root@server1 demo]# git status -s
A README.txt
配置git用户信息(在提交更改到版本库中之前需要配置用户信息):
git config --global user.name "xxx"
git config --global user.email xxxx
检查当前文件状态:
git status
git status -s %简化输出
git状态总述:
$ git status -s
M README %已经在版本库中的文件做了更改但未add(添加)
MM Rakefile %文件第二次更改且未添加到暂存区(左边的M表示暂存区的数据没有提交,右边的M表示工作区又修改了同样的文件)
A lib/git.rb %文件创建完后未更改直接添加到暂存区,但未提交
M lib/simplegit.rb %已经在版本库中的文件文件做完更改后添加到暂存区但未提交
?? LICENSE.txt %文件创建完后未添加到暂存区
注意:暂存区也相当于在版本库中
[root@server1 demo]# git config --global user.name "westos"
[root@server1 demo]# git config --global user.email "ddddd@westos.org"
[root@server1 demo]# git commit -m "add file"
[root@server1 demo]# git log
commit b7721f515011f31a6cbdcd25aa2cdb44161e51f7
Author: westos <ddddd@westos.org>
Date: Sun May 30 22:40:09 2021 +0800
add file
[root@server1 demo]# git status -s
[root@server1 demo]# ls
README.txt
[root@server1 demo]# vim README.txt
[root@server1 demo]# git status -s
M README.txt
[root@server1 demo]# git add README.txt
[root@server1 demo]# git status -s
M README.txt
[root@server1 demo]# vim README.txt
[root@server1 demo]# git status -s
MM README.txt
##右边的M是表示修改工作区的数据 左边的M是表示数据在暂存区 但未提交
[root@server1 demo]# git add README.txt
[root@server1 demo]# git status -s
M README.txt
[root@server1 demo]# git commit -m "update file"
[master c821753] update file
1 file changed, 2 insertions(+)
[root@server1 demo]# git status -s
[root@server1 demo]# git log
4. 常用命令
忽略文件(当需要屏蔽某个目录及文件时,例如开发人员在编译代码时会产生临时文件,这些就需要忽略)
$ cat .gitignore
.* %忽略所有隐藏文件
/test %只忽略当前目录下的test文件
build/ %忽略任何目录下名为 build 的文件夹
[root@server1 demo]# mkdir .dir
[root@server1 demo]# cd .dir/
[root@server1 .dir]# ls
[root@server1 .dir]# touch file
[root@server1 .dir]# cd ..
[root@server1 demo]# git status -s
?? .dir/
[root@server1 demo]# touch .file2
[root@server1 demo]# git status -s
?? .dir/
?? .file2
[root@server1 demo]# vim .gitignore
[root@server1 demo]# git status -s
[root@server1 demo]# vim .gitignore
[root@server1 demo]# cat .gitignore
.*
[root@server1 demo]# touch test.txt
[root@server1 demo]# git add test.txt ##跟踪新文件(将文件添加到暂存区)
[root@server1 demo]# git commit -m "add test.txt" ##提交更新
[root@server1 demo]# git log
[root@server1 demo]# rm -f test.txt
[root@server1 demo]# git status -s
D test.txt ##文件已被删除
[root@server1 demo]# git checkout -- test.txt #撤消对文件的修改
[root@server1 demo]# git status -s
[root@server1 demo]# ls
README.txt test.txt
查看已暂存和未暂存的修改
$ git diff
跳过使用暂存区域
$ git commit -a -m 'added new benchmarks'
使用checkout从版本库中恢复文件
通过版本回退我们可以恢复某些误删的文件:
[root@server1 demo]# git rm test.txt ##在版本库中删除
rm 'test.txt'
[root@server1 demo]# git status -s
D test.txt ##现在在暂存区中
[root@server1 demo]# git commit -m "delete test.txt" #提交后无法撤销
[master c0d80f7] delete test.txt
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 test.txt
[root@server1 demo]# git status -s
[root@server1 demo]# ls
README.txt
[root@server1 demo]# git reflog
c0d80f7 HEAD@{0}: commit: delete test.txt
21df6af HEAD@{1}: commit: add test.txt
c821753 HEAD@{2}: commit: update file
b7721f5 HEAD@{3}: commit (initial): add file
##版本回退
[root@server1 demo]# git reset --hard 21df6af
HEAD is now at 21df6af add test.txt
[root@server1 demo]# ls
README.txt test.txt
[root@server1 demo]# git reflog
21df6af HEAD@{0}: reset: moving to 21df6af
c0d80f7 HEAD@{1}: commit: delete test.txt
21df6af HEAD@{2}: commit: add test.txt
c821753 HEAD@{3}: commit: update file
b7721f5 HEAD@{4}: commit (initial): add file
[root@server1 demo]# l.
. .. .dir .file2 .git .gitignore
[root@server1 demo]# ll -d .git
drwxr-xr-x 8 root root 183 May 30 23:17 .git
.git目录是git跟踪管理版本库的,里面保存了相关更改信息,如果把这个目录删了将会无法实现版本回退
5. 远程仓库使用
- 通过上述示例我们可以看到,只有本地仓库是不够稳妥的,我们最好能将数据上传到云端进行备份,这样就可以免除后顾之忧了,需要的时候只需要将远程项目克隆到本地即可
- 远程仓库:注册github帐号(或者是码云等国内平台,速度更快),并新建一个仓库:
- 通过ssh方式上传
[root@server1 ~]# ssh-keygen
[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# ls
id_rsa id_rsa.pub
[root@server1 ~]# cd demo/
[root@server1 demo]# git remote add origin git@gitee.com:dan-2021/demo.git
[root@server1 demo]# git remote -v
origin git@gitee.com:dan-2021/demo.git (fetch)
origin git@gitee.com:dan-2021/demo.git (push)
[root@server1 demo]# git push -u origin master #公钥上传到远端
- 生成本地公钥和私钥
- 关联远程仓库
- 上传ssh公钥
- push到远端仓库默认的master分支下
- 本地仓库文件已经上传到远端仓库
- 删除本地仓库,从远程仓库克隆即可
[root@server1 demo]# cd ..
[root@server1 ~]# rm -fr demo/
[root@server1 ~]# git clone git@gitee.com:dan-2021/demo.git
Cloning into 'demo'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 8 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (8/8), done.
[root@server1 ~]# ls
demo
[root@server1 ~]# cd demo/
[root@server1 demo]# ls
README.txt test.txt
二、搭建gitlab代码仓库
利用gitlab自己搭建一个类似github那样的代码仓库
官网:https://about.gitlab.com/install/
软件下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
1.gitlab安装
[root@server1 ~]# yum install -y curl policycoreutils-python openssh-server #软件安装
[root@foundation jenkins]# scp gitlab-ce-13.2.2-ce.0.el7.x86_64.rpm 192.168.0.1:
[root@server1 ~]# ls
demo gitlab-ce-13.2.2-ce.0.el7.x86_64.rpm
[root@server1 ~]# rpm -ivh gitlab-ce-13.2.2-ce.0.el7.x86_64.rpm
[root@server1 ~]# cd /etc/gitlab/
[root@server1 gitlab]# ls
gitlab.rb
[root@server1 gitlab]# vim gitlab.rb
[root@server1 gitlab]# gitlab-ctl reconfigure #重载服务
[root@server1 gitlab]# gitlab-ctl status
2.gitlab使用
- 克隆远程项目到本地
[root@server1 ~]# git clone git@192.168.0.1:root/demo.git
[root@server1 ~]# cd demo/
[root@server1 demo]# ls
README.md
[root@server1 demo]# git remote -v
origin git@192.168.0.1:root/demo.git (fetch)
origin git@192.168.0.1:root/demo.git (push)
[root@server1 demo]# touch index.html
[root@server1 demo]# echo www.westos.org > index.html
[root@server1 demo]# git status -s
?? index.html
[root@server1 demo]# git add index.html
[root@server1 demo]# git commit -m "add index.html"
[master ac7ea76] add index.html
1 file changed, 1 insertion(+)
create mode 100644 index.html
[root@server1 demo]# git status -s
[root@server1 demo]# git push -u origin master