git

作者: 挑战_bae7 | 来源:发表于2020-12-21 17:19 被阅读0次

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的四种状态

图片.png

4.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

相关文章

网友评论

      本文标题:git

      本文链接:https://www.haomeiwen.com/subject/mnfcnktx.html