Git

Git

Git概述

Git是一个免费的开源的分布式版本控制系统.

Git易于学习,占地面积小,性能极快.

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统.

Git常用命令

Git首次安装必须设置用户签名,否则无法提交代码.注意,这个签名随便设置.

image-20221010011500676
  • 删除操作

    • 从暂存区和工作区删除:

      1
      2
      git rm xxx # 从暂存区和工作区删除
      若删除之前已经修改过并且已经放到暂存区的话,必须加上-f选项
    • 从暂存区移除,但是想保留在工作区中:

      1
      git rm --cached xxx
  • 查看详细版本记录

    1
    2
    git log # 查看详细版本记录
    git log --pretty=oneline # 简化输出

Git分支

1
2
3
4
5
6
7
8
git branch -v # 查看当前分支
git branch -a # 查看所有分支
git checkout xxx # 切换分支
git branch test # 创建分支
git brach -d xxx # 删除指定分支
git branch -D # 强制删除指定分支,分支在没有被合并前不允许删除,需要强制删除。
git branch -M/m # 分支改名
git merge test # 把test分支合并到当前分支

什么时候会出现合并冲突?

当两个分支对同一个位置有着完全不同的修改.需要人为决定合并

1
2
3
4
5
6
7
8
9
hello
hello
<<<<<<< HEAD
hello 123432
hello
=======
hello
hello 123123
>>>>>>> hot-fix2

上半部分是当前分支的修改,下半部分是待合并分支的修改

手动用vim等编辑器修改后,直接git commit -m "xxx" 后面不能有文件名,否则报错

Git团队协作

Git远程仓库

1
2
3
4
5
git remote -v 查看远程仓库
git remote add 别名 远程地址
git remote rm 别名
git push 别名 分支
git pull 别名 分支

SSH免密登录

1
2
3
ssh-keygen -t rsa -C d4wn@acdawn.cn
# 然后把公钥放到github
# 然后push就不用每次输入密码

GitLab

什么是CI/CD?

CI:持续集成

CD:连续交付

CI

中心思想是每一次push到github的时候,都会触发一次脚本执行,进行测试编译部署等

Runner

GitLab Runner是一个开源项目,用于运行作业并将结果发送到GitLab

特点:

  • 同时执行多个作业

类型:

  • shared共享类型 运行整个平台项目的作业
  • group 项目组类型 运行特定group下所有项目的作业
  • specific项目类型 运行指定的作业

状态:

  • locked 锁定状态,无法运行项目作业
  • paused 暂停状态,暂时不会接收新的作业

步骤

  • 注册:gitlab-runner register(此为交互式)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sudo gitlab-runner register \
    --non-interactive \ #代表非交互模式
    --url "http://192.168.221.133/" \
    --registration-token "QHkFLuzFHobsdksAmw8s" \
    --executor "shell" \
    --description "docker-runner" \
    --maintenance-note "this is a test" \
    --tag-list "Test" \
    --run-untagged="true" \
    --locked="false" \
    --access-level="not_protected"
  • 其他命令

    1
    2
    3
    4
    5
    6
    gitlab-runner list # 列出保存在配置文件中的所有运行程序
    gitlab-runner verify # 检查注册的runner是否可以连接
    gitlab-runner unregister --name xxx # 注销runner
    gitlab-runner unregister --all-runners # 注销所有runner
    gitlab-runner unregister --url xxx --token xxx # 使用令牌注销
    gitlab-runner status # 查看gitlab runner服务的状态

如何检查/gitlab-ci.yml语法是否正确?

在项目中->CI/CD->CI Lint

Pipeline语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
job # 每个配置文件可有多个作业,每个作业至少一个script
before_script # 该命令在每个作业前运行,必须是一个数组
after_script # 该命令在每个作业后运行,分配一个独立的shell,必须是一个数组
stages # 定义作业可以使用的阶段
stage为 .pre和.post分别对应管道的第一个和最后一个阶段
variables # 变量
tags # 指定runner
allow_failure # 允许失败
when # 控制作业运行
on_success # 前面的作业都成功时
on_failure # 前面的作业有失败时
always # 总是
manual # 手动
delayed # 延迟执行
retry # 配置在失败的情况下重试的次数
timeout # 超时时间
parallel # 并行运行
only # 定义哪些分支和标签的git项目将会被job执行
expect # 定义哪些分支和标签的git项目将不会被job执行
rules # rules将逐步替代only/expect
# rules不能与only。expect组合使用
if 如果条件匹配
changes 指定文件发生变化
exists 指定文件存在
由于缓存在job之间是共享的,如果不同的job使用不同的路径就出现了缓存覆盖的问题,那么如何让不同的job缓存不同的cache呢?
设置不同的key
所谓的key,就是为缓存做个标记

可能遇到的问题:

并行无法执行。需要修改runner每次运行的作业数量,默认为1。vim /etc/gitlab-runner/config.toml

concurrent = 10更改后无需重启

1
2
job1:
script: "xxx"

代理

1
2
3
4
5
6
7
8
9
设置代理:
git config --global http.proxy http://<your proxy address>:<port>
git config --global https.proxy https://<your proxy address>:<port>
ServicePointManager 不支持 socks5 方案的代理。
查看当前代理:
git config --list
删除代理:
git config --global --unset http.proxy
git config --global --unset https.proxy

大文件上传github

Git LFS 的工作原理是将大文件转化为指针文件存储在 Git 仓库中,而将大文件本身存储在外部的 LFS 存储区中。这样,每当从 Git 仓库中克隆或拉取文件时,Git LFS 只会下载指针文件,但不会下载实际的大文件。这种方式可以大大减少克隆仓库的时间和仓库体积,提高Git仓库的可维护性。

git lfs install

git lfs track xxx

git add

Token与SSH Key

如果使用SSH协议push代码,则需要使用SSH key,如hexo blog

如果使用HTTPS协议push代码,则需要使用token或者PAT,如常见的仓库

测试SSH连接:ssh -T git@github.com

学习链接

GitLab

https://blog.csdn.net/sinat_17775997/article/details/115700703

https://www.bilibili.com/video/BV18y4y1S7VC/

https://www.bilibili.com/video/BV1YP411N7sT


Git
https://d4wnnn.github.io/2022/10/10/DevOps/Git/
作者
D4wn
发布于
2022年10月10日
许可协议