一、git介绍
1.1Git特点:
速度
简单的设计
对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
完全分布式
有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
Git必看秘籍:https://git-scm.com/book/zh/v2
1.2Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
二、安装Git:
yum install -y git
获取 Git 仓库通常有两种方式:
将尚未进行版本控制的本地目录转换为 Git 仓库。
从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone
2.1初始化版本库:
[root@server4 ~]# mkdir demo 创建目录
[root@server4 ~]# cd demo/ 进入目录
[root@server4 demo]# git init 初始化
Initialized empty Git repository in /root/demo/.git/
[root@server4 demo]# ls .git/ .git目录是git跟踪管理版本库的,无特殊情况不乱操作
branches config description HEAD hooks info objects refs
2.2Git使用
git工具的使用1
[root@server4 demo]# touch README 创建文件
[root@server4 demo]# git status 查看信息
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# README
nothing added to commit but untracked files present (use "git add" to track)
[root@server4 demo]# git status -s 简化输出信息
?? README ??:表示此文件已经添加到目录中,Git没有跟踪,文件只是存在于Git目录中
[root@server4 demo]# git add README 天剑文件到
[root@server4 demo]# git status -s
A README 暂存区
提交文件之前需要设置全局用户信息
[root@server4 demo]# git config --global user.name "wxh" 用户名
[root@server4 demo]# git config --global user.email [email protected] 邮件
[root@server4 demo]# git status -s
A README
[root@server4 demo]# git commit -m "add README" 提交文件搭配版本系统当中
[master (root-commit) fcd0c8d] add README
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README
[root@server4 demo]# git status -s 再次查看没有输出文件已经提交
git工具的使用2
[root@server4 demo]# echo westos > README 之前创建的文件并没有内容,现在写入内容
[root@server4 demo]# git status -s 查看发现文件一直被Git跟踪,更改后文件在工作区
M README 此M在中间
[root@server4 demo]# cat README 查看文件内容
westos
[root@server4 demo]# git status 显示详细输出
# On branch master
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: README
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@server4 demo]# git checkout -- README 使用命令撤销刚才的操作
[root@server4 demo]# cat README 文件复位内容为空
[root@server4 demo]# git status -s 并且退回到版本系统中
git工具的使用3:文件内容的更改、文件状态的认识
[root@server4 demo]# echo westos > README 文件写入内容后直接到工作区
提交文件,需要先到暂存区,然后才能到版本库中
[root@server4 demo]# git add README 添加修改的文件到暂存区
[root@server4 demo]# git status -s 查看
M README 此时M在最左侧,及暂存区,M:之前添加过的文件然后被更改
[root@server4 demo]# echo linux > file 重新创建一个新的由内容的文件
[root@server4 demo]# git status -s 查看??:在Git目录中
M README
?? file
[root@server4 demo]# git add . 点表示当前所有。添加到暂存区,
[root@server4 demo]# git status -s 查看,A:新添加的文件
M README
A file
[root@server4 demo]# git commit -m "v1" 提交 -m:指定当前提交所有文件的一个变量总名称
[master 19f82d6] v1 默认提交暂存区所有的文件不需要特定指定
2 files changed, 2 insertions(+)
create mode 100644 file
[root@server4 demo]# git status -s 查看已经全部提交
git工具的使用4:文件内容的更改、文件状态的认识
[root@server4 demo]# echo westos >> file
[root@server4 demo]# git status -s
M file
[root@server4 demo]# git add file
[root@server4 demo]# git status -s
M file
[root@server4 demo]# echo file >> file
[root@server4 demo]# git status -s
MM file
[root@server4 demo]# git add file
[root@server4 demo]# git status -s
M file
[root@server4 demo]# git commit -m "v2"
[master 69cf94e] v2
1 file changed, 2 insertions(+)
[root@server4 demo]# git status -s
git工具的使用5:文件内容的更改
[root@server4 demo]# echo westos >> file 追加内容到文件
[root@server4 demo]# git status -s 查看文件在工作区
M file
[root@server4 demo]# git add file 添加
[root@server4 demo]# git status -s 文件在暂存区
M file
[root@server4 demo]# echo file >> file 再次追加内容到文件(注意此时在暂存区内添加)
[root@server4 demo]# git status -s 有两个M
MM file
前面是在工作区追击内容再添加,此次是在暂存区追加内容必须也要添加一次。否则此次不生效
[root@server4 demo]# git add file
[root@server4 demo]# git status -s 查看
M file
[root@server4 demo]# git commit -m "v2" 自定义添加的名称:v2=file
[master 69cf94e] v2
1 file changed, 2 insertions(+)
[root@server4 demo]# git status -s 查看已经提交
git工具的使用6:屏蔽一些隐藏文件和目录
[root@server4 demo]# mkdir env 创建目录
[root@server4 demo]# cd env/
[root@server4 env]# touch ealues
[root@server4 env]# ls
ealues
[root@server4 env]# cd ..
[root@server4 demo]# touch .a 创建文件
[root@server4 demo]# touch .o
[root@server4 demo]# ls
env file README
[root@server4 demo]# ls -a 都是一些隐藏文件,但是不想放到版本库中
. .. .a env file .git .o README
[root@server4 demo]# git status -s 而且在查看的时候有输出
?? .a
?? .o
?? env/
[root@server4 demo]# vim .gitignore 编辑此文件
.* 忽略所有隐藏文件
env 忽略此目录
server4 demo]# git status -s 查看没有输出
git工具的使用7查看已暂存和未暂存的修改
[root@server4 demo]# echo file >> README
[root@server4 demo]# git diff README 比较
diff --git a/README b/README
index 00f9aaf..0cb4d7a 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
westos
+file 加入的内容
跳过使用暂存区域
[root@server4 demo]# git status -s
M README
[root@server4 demo]# git commit -a -m "v3"
[master c752179] v3
1 file changed, 1 insertion(+)
[root@server4 demo]# git status -s
git工具的使用8:移除文件、重命名文件、查看提交历史
移除文件
[root@server4 demo]# git rm file 删除file文件
rm 'file'
[root@server4 demo]# git status -s 文件在暂存区D:删除的文件
D file
[root@server4 demo]# git commit -m "v4" 需要提交当前文件彻底删除
[master 4319341] v4
1 file changed, 3 deletions(-)
delete mode 100644 file
[root@server4 demo]# git status -s 查看没有信息
[root@server4 demo]# ls file文件不存在
env README
重命名文件
[root@server4 demo]# ls
env README
[root@server4 demo]# git mv README HELLO 重命名
[root@server4 demo]# git status -s 此时在暂存区
R README -> HELLO
[root@server4 demo]# git commit -m "v5" 提交
[master 88057e0] v5
1 file changed, 0 insertions(+), 0 deletions(-)
rename README => HELLO (100%)
[root@server4 demo]# git status -s
[root@server4 demo]# ls 查看 已经更改
env HELLO
其实,运行 git mv 就相当于运行了下面三条命令:
mv README.md README 重名名
git rm README.md 删除之前的
git add README 添加更名之后的
查看提交历史
git log
git log -p -2
git log --stat
git log --pretty=oneline
[root@server4 demo]# git log --pretty=oneline
88057e0db7747885c927168f1ea541d26372906b v5
4319341521c9591bcb231f46bb18f15ec19a9f00 v4
c752179e41a5928d876016b812263b40830e6b0d v3
69cf94e373ad8cbac4cdf31de6f615996990e33f v2
19f82d6a8e7bddf110cdafb4557e2b19ded22d7b v1
fcd0c8da183a486d86d332fd1f683cbc7c6b5e1f add README
[root@server4 demo]# git reflog
88057e0 HEAD@{0}: commit: v5
4319341 HEAD@{1}: commit: v4
c752179 HEAD@{2}: commit: v3
69cf94e HEAD@{3}: commit: v2
19f82d6 HEAD@{4}: commit: v1
fcd0c8d HEAD@{5}: commit (initial): add README
git工具的使用9:取消暂存的文件、撤消对文件的修改、版本回退
[root@server4 demo]# git reflog 查看历史提交
88057e0 HEAD@{0}: commit: v5
4319341 HEAD@{1}: commit: v4
c752179 HEAD@{2}: commit: v3
69cf94e HEAD@{3}: commit: v2
19f82d6 HEAD@{4}: commit: v1
fcd0c8d HEAD@{5}: commit (initial): add README
[root@server4 demo]# git reset --hard c752179 回退v3
HEAD is now at c752179 v3
[root@server4 demo]# ls 文件恢复,之前删掉了
env file README
[root@server4 demo]# cat README 查看内容
westos
file
[root@server4 demo]# git reset --hard 69cf94e 再次回退到v2
HEAD is now at 69cf94e v2
[root@server4 demo]# ls
env file README
[root@server4 demo]# cat README 查看内容只有一行
westos
[root@server4 demo]# ls
env file README
[root@server4 demo]# vim README 编辑文件
[root@server4 demo]# cat README
westos
westos
westos
westos
westos
westos
westos
westos
[root@server4 demo]# git status -s 查看文件在工作区
M README
[root@server4 demo]# git add README 添加文件到暂存区
[root@server4 demo]# git status 查看显示可以回退到工作区
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: README
#
[root@server4 demo]# git status -s 此时在暂存区
M README
[root@server4 demo]# git reset HEAD README 回退到工作区
Unstaged changes after reset:
M README
[root@server4 demo]# git status -s 查看在工作区
M README
[root@server4 demo]# git checkout -- README 在此回退文件
[root@server4 demo]# git status -s
[root@server4 demo]# ls
env file README
[root@server4 demo]# cat README 文件内容已经恢复到之前
westos
三、远程仓库:注册github帐号,并新建一个仓库
3.1生成秘钥并上传到GitHub
3.2推送本地仓库内容到github:
[root@server4 ~]# cd demo/
关联远程仓库
[root@server4 demo]# git remote add origin [email protected]:wcwccheng/demo.git
[root@server4 demo]# git push -u origin master 第一次推送需要加 -u参数
3.3克隆远程仓库
手动操作删除demo目录,然后恢复
[root@server4 ~]# rm -rf demo/
[root@server4 ~]# git clone [email protected]:wcwccheng/demo.git 复制下图中的克隆链接接
Cloning into 'demo'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 10 (delta 0), reused 10 (delta 0), pack-reused 0
Receiving objects: 100% (10/10), done.
[root@server4 ~]# cd demo/ 恢复目录
[root@server4 demo]# ls
file README
软件下载(官方下载慢,推荐使用国内镜像站点)
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
软件安装: (官方推荐至少4G内存)
yum install -y curl policycoreutils-python openssh-server
安装
yum install -y gitlab-ce-12.8.5-ce.0.el7.x86_64.rpm
vim /etc/gitlab/gitlab.rb 编辑配置文件
29: external_url 'http://172.25.254.4' //访问gitlab的地址
gitlab-ctl reconfigure //重载服务(里面含有多个服务)
登录gitlab:
http://172.25.254.4 //用户:root 第一次登录需要强制修改密码
root
westoswestos
常用命令:
gitlab-ctl start 启动所有 gitlab 组件
gitlab-ctl stop 停止所有 gitlab 组件
gitlab-ctl restart 重启所有 gitlab 组件
gitlab-ctl status 查看服务状态
gitlab-ctl reconfigure 重载服务
gitlab-ctl tail 查看日志
添加ssh密钥:
[root@server4 demo]# git config --global user.email [email protected] 邮箱
[root@server4 demo]# git config --global user.name "wxh" 用户
[root@server4 demo]# git clone [email protected]:root/demo.git 关联远程仓库
Cloning into 'demo'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
[root@server4 demo]# git remote -v
origin git@172.25.254.4:root/demo.git (fetch)
origin git@172.25.254.4:root/demo.git (push)
[root@server4 demo]# echo www.westos.org > index.html
[root@server4 demo]# git status -s
?? index.html
[root@server4 demo]# git add index.html 添加文件到暂存区
[root@server4 demo]# git commit -m index.html 添加文件到git版本库
[master 0aeb559] index.html
1 file changed, 1 insertion(+)
create mode 100644 index.html
[root@server4 demo]# git status -s
?? demo/
[root@server4 demo]# git push -u origin master 上传推送文件
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@172.25.254.4:root/demo.git
e7a78ab..0aeb559 master -> master
Branch master set up to track remote branch master from origin.