git
2020-12-21 本文已影响0人
挑战_bae7
1.安装git
rpm -qa git
yum install -y git
git --version
2.通常配置git 信息 用户名 邮箱 颜色
git config --global user.name "yaohui"
git config --global user.email "471281312@qq.com"
git config --global color.ui true
git config --list
cat ~/.gitconfig
保存当前家目录下 .gitconfig
3.创建目录
mkdir /data
cd /data
git init 初始化 产生.git 目录
git status 查看状态
[root@localhost data]# ll .git/
总用量 12
drwxr-xr-x. 2 root root 6 12月 19 14:10 branches 分支目录
-rw-r--r--. 1 root root 92 12月 19 14:10 config 定义项目特有的配置选项
-rw-r--r--. 1 root root 73 12月 19 14:10 description 仅供git web 程序使用
-rw-r--r--. 1 root root 23 12月 19 14:10 HEAD 指示当前的分支
drwxr-xr-x. 2 root root 242 12月 19 14:10 hooks 包含git钩子文件
drwxr-xr-x. 2 root root 21 12月 19 14:10 info 包含一个全局排除文件(exclude文件)
drwxr-xr-x. 4 root root 30 12月 19 14:10 objects 存放所有数据内容 有info pack两个子文件 本地仓库
drwxr-xr-x. 4 root root 31 12月 19 14:10 refs 存放指向数据(分支)的提交对象的指针
index 保存暂存区信息 在执行git init时候 这个文件没有 暂存区域
图片.png
4.git的四种状态
图片.png4.1工作目录---暂存区
touch a b c
[root@localhost data]# git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# a
# b
# c
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
git add a 一个文件
git add . 或者* 所有文件
[root@localhost data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
# (使用 "git rm --cached <file>..." 撤出暂存区)
#
# 新文件: a
# 新文件: b
# 新文件: c
git rm --cached a 撤出暂存区
rm a 删除文件就是永久删除
git rm --cached * 撤出所有暂存区文件
git rm -f b 直接从暂存区永久删除文件
4.2暂存区---本地仓库 通过版本管理git 管理完成
[root@localhost data]# git commit -m "touch c"
[master(根提交) 786d323] touch c
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 c
[root@localhost data]# git status
# 位于分支 master
无文件要提交,干净的工作区
这种-am 必须是已提交过版本控制的文件
git commit -am "add c"
4.3 git 改名
方法一:
[root@localhost data]# mv c c.txt
[root@localhost data]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add/rm <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 删除: c
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# c.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@localhost data]# git rm --cached c
rm 'c'
[root@localhost data]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 删除: c
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# c.txt
[root@localhost data]# git add c.txt
[root@localhost data]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 重命名: c -> c.txt
[root@localhost data]# git commit -m "mv c c.txt" 改名成功
[master fff3f64] mv c c.txt
1 file changed, 0 insertions(+), 0 deletions(-)
rename c => c.txt (100%)
[root@localhost data]# git status
# 位于分支 master
无文件要提交,干净的工作区
方法二:
[root@localhost data]# git mv c.txt c
[root@localhost data]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 重命名: c.txt -> c
4.4 git文件比对
echo 36767>c
比对目录跟本地仓库的不同
[root@localhost data]# git diff c
diff --git a/c b/c
index e69de29..e946b7e 100644
--- a/c
+++ b/c
@@ -0,0 +1 @@
+36767
比对暂存区跟本地仓库的不同
[root@localhost data]# git diff --cached c
4.5查看历史提交
git commit 相当于快照
[root@localhost data]# git log 查看提交
commit 5b739c7049bbf057c11acaf6fc4f4d071b76b68a
Author: yaohui <471281312@qq.com>
Date: Sat Dec 19 15:05:30 2020 +0800
add c
commit 3665b4bd7671723a1d85d2686be08fbda7ca954d
Author: yaohui <471281312@qq.com>
Date: Sat Dec 19 15:03:15 2020 +0800
add neirong
commit fff3f647142994946e6b3066bacfe83254f22324
Author: yaohui <471281312@qq.com>
Date: Sat Dec 19 14:50:08 2020 +0800
mv c c.txt
commit 786d3238ddf8465c2e73d253b46a54efd79e4260
[root@localhost data]# git log --oneline 精简查看
5b739c7 add c
3665b4b add neirong
fff3f64 mv c c.txt
786d323 touch c
[root@localhost data]# git log --oneline --decorate 查看当前指针
5b739c7 (HEAD, master) add c
3665b4b add neirong
fff3f64 mv c c.txt
786d323 touch c
[root@localhost data]# git log -p 显示更改内容
commit 5b739c7049bbf057c11acaf6fc4f4d071b76b68a
Author: yaohui <471281312@qq.com>
Date: Sat Dec 19 15:05:30 2020 +0800
add c
diff --git a/c b/c
index e946b7e..9daeafb 100644
--- a/c
+++ b/c
@@ -1 +1 @@
-36767
+test
commit 3665b4bd7671723a1d85d2686be08fbda7ca954d
Author: yaohui <471281312@qq.com>
Date: Sat Dec 19 15:03:15 2020 +0800
add neirong
diff --git a/c b/c
new file mode 100644
index 0000000..e946b7e
git log -1 -p 显示最近一条信息
4.6恢复历史
5b739c7 add c
3665b4b add neirong
fff3f64 mv c c.txt
786d323 touch c
[root@localhost data]# git reset --hard fff3f64714 回滚到某一个提交
HEAD 现在位于 fff3f64 mv c c.txt
[root@localhost data]# git reset --hard 5b739c7 回滚回来
HEAD 现在位于 5b739c7 add c
[root@localhost data]# git reflog 查看之前的所有操作
5b739c7 HEAD@{0}: reset: moving to 5b739c7
fff3f64 HEAD@{1}: reset: moving to fff3f64714
5b739c7 HEAD@{2}: commit: add c
3665b4b HEAD@{3}: commit: add neirong
fff3f64 HEAD@{4}: commit: mv c c.txt
786d323 HEAD@{5}: commit (initial): touch c
5.git 分支
图片.png[root@localhost data]# git log --oneline --decorate 查看当前指针 HEAD master
5b739c7 (HEAD, master) add c
3665b4b add neirong
fff3f64 mv c c.txt
786d323 touch c
[root@localhost data]# git branch 查看目前所在分支
* master
testing
[root@localhost data]# git checkout testing 切换分支
切换到分支 'testing'
[root@localhost data]# git checkout master 删除分支 先切换后删除分支
切换到分支 'master'
[root@localhost data]# git branch testing -d 删除也会有快照
已删除分支 testing(曾为 5b739c7)。
例如:
[root@localhost data]# touch aaa bbb ccc
[root@localhost data]# git add aaa
[root@localhost data]# git commit -m 'add aaa'
[master 0beee23] add aaa
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 aaa
[root@localhost data]# git add bbb
[root@localhost data]# git commit -m 'add bbb'
[master ca23c70] add bbb
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bbb
[root@localhost data]# git add ccc
[root@localhost data]# git commit -m 'add ccc'
[master 1d158c9] add ccc
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 ccc
[root@localhost data]# git checkout -b testing 新建并切换到分支
切换到一个新分支 'testing'
分支会自动复制当前master中的所有文件
[root@localhost data]# touch ddd
[root@localhost data]# git add ddd
[root@localhost data]# git commit -m 'add ddd' 这样ddd只是在分支中 不会出现在master中
[testing 9fce38d] add ddd
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 ddd
[root@localhost data]# git checkout master
切换到分支 'master'
[root@localhost data]# touch master-eee
[root@localhost data]# git add master-eee
[root@localhost data]# git commit -m "add eee"
[master 44d7547] add eee
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 master-eee
合并分支
[root@localhost data]# git merge testing
:wq保存合并了
Merge branch 'testing'
m
merge branch 'testing'
# 请输入一个提交信息以解释此合并的必要性,尤其是将一个更新后的上游分支
# 合并到主题分支。
#
# 以 '#' 开头的行将被忽略,而且空提交说明将会终止提交。
~.git/MERGE_MSG" 6L, 238C
".git/MERGE_MSG" 6L, 238C written
Merge made by the 'recursive' strategy.
ddd | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 ddd
[root@localhost data]# ls
a aaa bbb c ccc ddd master-eee
这样原分支就可以删除了
[root@localhost data]# git branch testing -d
已删除分支 testing(曾为 9fce38d)。
解决合并冲突
[root@localhost data]# git branch testing
[root@localhost data]# ls
a aaa bbb c ccc ddd master-eee
[root@localhost data]# echo test>aaa
[root@localhost data]# git add .
[root@localhost data]# git commit -m 'modity aaa'
[master a4b41da] modity aaa
2 files changed, 1 insertion(+)
create mode 100644 a
[root@localhost data]# git checkout testing
切换到分支 'testing'
[root@localhost data]#
[root@localhost data]# cat aaa
[root@localhost data]# echo "fenzhi" >aaa
[root@localhost data]# git add .
[root@localhost data]# git commit -m "xiugai aaa"
[testing fa173bf] xiugai aaa
1 file changed, 1 insertion(+)
[root@localhost data]# git merge testing 合并分支
自动合并 aaa
冲突(内容):合并冲突于 aaa
自动合并失败,修正冲突然后提交修正的结果。
[root@localhost data]# cat aaa
<<<<<<< HEAD
test
=======
fenzhi
>>>>>>> testing
将代码修改完成后提交
6.git tag
相当于给仓库版本取个名字 跟commit 相当于软连接 对应 仓库版本不好记 分支不同 标签可以一样
git tag -a v1.0 -m "tag v1.0"
git log --oneline
git tag -a v1.1 3fbcde5 -m "tag v1.1" 指定某次版本控制 打tag
git tag 查看
git show v1.0 查看标签的信息
git reset --hard v1.0 回滚
git tag v1.1 -d
7.github
Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web界面,您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业
1、注册用户 # 课前注册好用户
2、配置ssh-key
3、创建项目
4、克隆项目到本地
5、推送新代码到github
git branch -M main 分支改名
图片.png
图片.png
[root@localhost data]# ssh-keygen -t rsa 本地主机生成密钥对
git remote add origin git@github.com:onlineyh/git_data.git
git branch -M main
git push -u origin main
git push -u origin master 推送对远程仓库
[root@localhost data]# ssh-keygen -t rsa
[root@localhost data]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLtVE/vMQ+HdwERChiQUQiYCn/ccv6Mnxd0cM7L6FV/r3AMpbwwgNe0WBSSIzKeT1kDbJQPQ9FML6MoAHsFk8H7WutrWeftC0UGhGiU1uTbxwu5+x90bdqjkN7wD96VQXvjGtelfwg57yqkHnW0X/hfAxyGPOZml4BT6NeUp+8wNWTDRqJgezoW83LWZ9wPW672WxDsDBMEyLd+6FAFMNu1jUM2wFjkJw/mf5X1dM2ps2lgJxUTgI8ekgBQyMIgOw3XiOH2vPwr7M48ZJaq0Ze0Si/CWq77w+oN9uS+R0e8DELVSzcjett/dcUTN9kAXaI4Yh2367FY4PwKiy4664j root@localhost.localdomain
图片.png
图片.png
[root@localhost data]# git push -u origin master 推送成功
Counting objects: 23, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (16/16), done.
Writing objects: 100% (23/23), 1.82 KiB | 0 bytes/s, done.
Total 23 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To git@github.com:onlineyh/git_data.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
图片.png
其他主机 可以使用克隆代码了
[root@localhost ~]# git clone https://github.com/onlineyh/git_data.git
正克隆到 'git_data'...
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 23 (delta 5), reused 23 (delta 5), pack-reused 0
Unpacking objects: 100% (23/23), done.
8.gitlab-install
https://about.gitlab.com/install/#centos-7
gitlab 依赖包
yum install -y curl policycoreutils-python openssh-server
国内清华大学源
wget https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
提示信息:
Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
sudo gitlab-ctl reconfigure
For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.122.102'
gitlab-ctl reconfigure 启动信息
/opt/gitlab/ # gitlab的程序安装目录
/var/opt/gitlab # gitlab目录数据目录
/var/opt/gitlab/git-dfata # 存放仓库数据
gitlab-ctl status # 查看目前gitlab所有服务运维状态
gitlab-ctl stop # 停止gitlab服务
gitlab-ctl stop nginx # 单独停止某个服务
gitlab-ctl tail # 查看所有服务的日志
Gitlab的服务构成:
nginx: #静态web服务器
gitlab-workhorse: #轻量级的反向代理服务器
logrotate: #日志文件管理工具
postgresql: #数据库
redis: #缓存数据库
sidekiq: #用于在后台执行队列任务(异步执行)。(Ruby)
unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。(Ruby Web Server,主要使用Ruby编写)
用户名:root
密码:自己输入
首次输入密码.png
界面.png
修改登录界面提示信息.png
显示.png
限制自动注册.png
版本汉化
1、下载汉化补丁
git clone https://gitlab.com/xhang/gitlab.git
2、查看全部分支版本
git branch -a
3、对比版本、生成补丁包
git diff remotes/origin/10-2-stable remotes/origin/10-2-stable-zh > ../10.2.2-zh.diff
4、停止服务器
gitlab-ctl stop
5、打补丁
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /tmp/10.2.2-zh.diff
6、启动和重新配置
gitlab-ctl start
gitlab-ctl reconfigure
gitlab的使用
先组 --- 再仓库---后用户
项目.png
图片.png
Existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin git@192.168.122.102:test/git_data.git
git push -u origin --all
git push -u origin --tags
根据提示修改到本地仓库
[root@localhost data]# git remote
origin
[root@localhost data]# git remote remove origin 删除原来的远程仓库
[root@localhost data]# git push -u origin master 推送成功
The authenticity of host '192.168.122.102 (192.168.122.102)' can't be established.
ECDSA key fingerprint is SHA256:fWR3bRtOPjjyfaYM0xuOVs5xFT1RexIcl7+zC25aNZA.
ECDSA key fingerprint is MD5:80:43:28:71:28:6c:1d:60:4d:11:6c:d3:59:10:ac:da.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.102' (ECDSA) to the list of known hosts.
Counting objects: 23, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (16/16), done.
Writing objects: 100% (23/23), 1.82 KiB | 0 bytes/s, done.
Total 23 (delta 5), reused 0 (delta 0)
To git@192.168.122.102:test/git_data.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
图片.png
测试推送新文件
[root@localhost data]# touch tttt
[root@localhost data]# git add .
[root@localhost data]# git commit -m 'add tttt'
[master 54d508a] add tttt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 tttt
[root@localhost data]# git push -u origin master
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 241 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@192.168.122.102:test/git_data.git
3fbcde5..54d508a master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
尝试一台新的主机 以dev这个用户登录 拉取文件
yum install git -y
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
git clone git@192.168.122.102:test/git_data.git 克隆下来
echo 123 > aaaa
git status
git add .
git commit -m 'add aaaa'
git push -u origin master
9.gitlab 分支保护
分支保护.png[root@localhost git_data]# git push -u origin master
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 260 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: GitLab: You are not allowed to push code to protected branches on this project. 这样就无法推送代码了
To git@192.168.122.102:test/git_data.git
! [remote rejected] master -> master (pre-receive hook declined)
error: 无法推送一些引用到 'git@192.168.122.102:test/git_data.git'
新建分支
[root@localhost git_data]# git branch dev
[root@localhost git_data]# git push -u origin dev 推送分支到远程仓库
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 260 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote:
remote: To create a merge request for dev, visit:
remote: http://192.168.122.102/test/git_data/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
To git@192.168.122.102:test/git_data.git
* [new branch] dev -> dev
分支 dev 设置为跟踪来自 origin 的远程分支 dev。
合并分支
[root@localhost git_data]# git branch
* dev
master
[root@localhost git_data]# vim zzzz
[root@localhost git_data]# git add .
[root@localhost git_data]# git commit -m "add zzz"
合并请求.png
管理员界面.png
管理员确认.png
10.Gitlab备份与恢复
对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。 gitlab提供了一个简单的命令行来备份整个gitlab,并且能灵活的满足需求。
备份文件将保存在配置文件中定义的backup_path中,文件名为TIMESTAMP_gitlab_backup.tar,TIMESTAMP为备份时的时间戳。TIMESTAMP的格式为:EPOCH_YYYY_MM_DD_Gitlab‐version。如果自定义备份目录需要赋予git权限。
[root@localhost ~]# egrep -v "^#|^$" /etc/gitlab/gitlab.rb
external_url 'http://192.168.122.102'
gitlab_rails['manage_backup_path'] = true 是否开启备份
gitlab_rails['backup_path'] = "/gitlab/backups" 备份目录
gitlab_rails['backup_archive_permissions'] = 0644 备份权限
gitlab_rails['backup_keep_time'] = 604800 多少时间失效 默认单位是秒
[root@localhost ~]# mkdir -p /gitlab/backups/
[root@localhost ~]# chown git.git -R /gitlab/backups/
[root@localhost ~]# gitlab-ctl reconfigure 重新加载
[root@localhost ~]# gitlab-ctl restart
[root@localhost ~]# gitlab-rake gitlab:backup:create 手动执行备份
[root@localhost ~]# ll /gitlab/backups/ 查看备份 恢复的时候必须相同gitlab版本
-rw-r--r--. 1 git git 81920 12月 23 10:16 1608689769_2020_12_23_10.2.2_gitlab_backup.tar
备份脚本
[root@localhost backups]# vim gitlab_backup.sh
#!/bin/bash
/usr/bin/gitlab-rake gitlab:backup:create CRON=1
0 0,6,12,18 * * * /bin/bash -x /data/gitlab/backups/gitlab_backup.sh > /dev/null 2>&1
还原:
rm -rf /data/* 删除当前本地仓库目录下所有文件
git add .
git commit -m "clear"
git push -u origin master
[root@git ~/git_test]# gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
[root@git ~/git_test]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 1s, normally up
[root@git ~/git_test]# gitlab-ctl status
#Gitlab的恢复操作会先将当前所有的数据清空,然后再根据备份数据进行恢复
[root@git ~/git_test]# ll /gitlab/backups/
-rw-r--r--. 1 git git 71680 12月 23 14:44 1608705894_2020_12_23_10.2.2_gitlab_backup.tar
[root@git ~/git_test]# gitlab-rake gitlab:backup:restore BACKUP=1608705894_2020_12_23_10.2.2
#启动gitlab
[root@git ~/git_test]# gitlab-ctl start
[root@git ~/git_test]# gitlab-rake gitlab:check SANITIZE=true