kuroomi头像
Git入门封面图

Git入门

Git 使用笔记

基础操作:初始化、暂存、提交、忽略、撤销、回退。

1. 安装与初始化

yum install -y git          # 安装 git
mkdir demo && cd demo       # 创建项目目录
git init                    # 初始化本地版本库,生成 .git 目录

2. 查看状态

git status                  # 查看详细状态
git status -s               # 简化输出

状态简写含义:

标记含义
??未跟踪文件
A已暂存的新增文件
M已暂存的修改
M工作区已修改,未暂存
MM暂存后又修改,暂存区和工作区都有变化
D已暂存的删除
D工作区删除,未暂存

3. 基本提交流程

echo test > README.md       # 创建文件
git status -s               # 输出 ?? README.md
git add README.md           # 添加到暂存区
git status -s               # 输出 A  README.md
首次提交前需配置用户信息(全局)
git config --global user.email "yakexi007@westos.org"
git config --global user.name "wxh"
git commit -m "add README.md"   # 提交到本地仓库

修改文件后再次提交:

echo hello >> README.md
git status -s               # 输出 " M README.md"(工作区修改)
git add README.md
git status -s               # 输出 "M  README.md"(已暂存)
echo world >> README.md
git status -s               # 输出 "MM README.md"(暂存后又修改)
git commit -m "v1"          # 只提交已暂存的内容
git status -s               # 输出 " M README.md"(剩余修改未暂存)
git add .                   # 添加所有修改
git commit -m "v2"

4. 忽略文件

touch .a                    # 创建隐藏文件
git status -s               # 输出 ?? .a
vim .gitignore              # 创建忽略规则文件
.*                          # 忽略所有以 . 开头的文件
git status -s               # 不再显示 .a

5. 撤销与取消暂存

echo helloworld > test.txt
git add test.txt
git commit -m "add test.txt"
删除工作区文件
rm -f test.txt
git status -s               # 输出 " D test.txt"(工作区删除)
git checkout -- test.txt    # 从暂存区恢复文件到工作区
取消暂存区文件(保留工作区)
git rm test.txt             # 删除文件并放入暂存区
git status -s               # 输出 "D  test.txt"
git reset HEAD test.txt     # 取消暂存,文件回到工作区

6. 版本回退

git rm test.txt
git commit -m "delete test.txt"   # 提交删除操作
git reflog                        # 查看所有操作记录(含提交哈希)
输出示例:58b1bc2 HEAD@{0}: commit: delete test.txt
git reset --hard 6db53fe          # 回退到指定提交,工作区和暂存区都重置

--hard 会丢弃当前工作区和暂存区的修改,慎用。

github远程代码仓库

登录:GitHub · Change is constant. GitHub keeps you ahead. · GitHub · GitHub

注册登录

创建仓库

上传公钥

[root@server1 demo]# ssh-keygen

Git 推送与克隆仓库

将本地仓库推送到远程(GitHub),以及从远程克隆仓库到本地。使用 SSH 协议需提前配置好 SSH 公钥。

1. 重命名分支为 main

GitHub 默认分支为 main,本地初始化后通常是 master,可重命名保持一致。

cd demo/
git branch -M main          # -M 强制重命名当前分支为 main

2. 添加远程仓库

git remote add origin git@github.com:westos007(自己的github名字)/demo.git
# origin 是远程仓库的别名,可自定义
# git@github.com:... 表示使用 SSH 协议

查看已添加的远程仓库:

git remote -v

输出示例:

origin  git@github.com:westos007/demo.git (fetch)
origin  git@github.com:westos007/demo.git (push)

3. 推送本地分支到远程

git push -u origin main
  • -u:设置上游分支,之后直接 git push 即可推送到 origin/main。

  • 首次连接 GitHub 会提示确认主机指纹,输入 yes 继续。

输出示例:

The authenticity of host 'github.com (20.205.243.166)' can't be established.
...
Are you sure you want to continue connecting (yes/no)? yes
...
To git@github.com:westos007/demo.git
 * [new branch]      main -> main
Branch main set up to track remote branch main from origin.

4. 克隆远程仓库

rm -fr demo/                # 删除本地旧目录,模拟全新克隆
git clone git@github.com:westos007/demo.git

输出示例:

Cloning into 'demo'...
remote: Enumerating objects: 12, done.
...
Receiving objects: 100% (12/12), done.

查看克隆结果:

cd demo/
ls
# 输出:README.md  test.txt

部署gitlab

提前下好rpm包

EXTERNAL_URL="https://gitlab.example.com" dnf install gitlab-ce-18.11.12-ce.0.el9.x86_64.rpm
 gitlab-ctl reconfigure

登录

用户:root

初始密码: cat /etc/gitlab/initial_root_password

语言设置

修改密码,初始密码24小时后过期

新建项目

添加密钥

克隆项目

root@server1 ~]# git clone git@192.168.56.11:root/demo.git
Cloning into 'demo'...
The authenticity of host '192.168.56.11 (192.168.56.11)' can't be established.
ECDSA key fingerprint is SHA256:wENyii9Q7PhKduD9pHQD5G3EbAt68JiY51ifHt4lD7Y.
ECDSA key fingerprint is MD5:65:e0:39:b7:a3:97:d2:19:81:6e:70:f2:a4:e0:12:d8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.56.11' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

[root@server1 ~]# ls
demo
[root@server1 ~]# cd demo/
[root@server1 demo]# git remote -v
origin  git@192.168.56.11:root/demo.git (fetch)
origin  git@192.168.56.11:root/demo.git (push)

推送本地修改到远程

在本地完成修改后,通过以下流程将改动推送到远程仓库:

echo www.westos.org > index.html   # 创建或修改文件
git add index.html                 # 添加到暂存区
git commit -m "add index.html"     # 提交到本地仓库
git push -u origin main            # 推送到远程 main 分支

输出示例:

Counting objects: 4, done.
Writing objects: 100% (3/3), 286 bytes | 0 bytes/s, done.
To git@192.168.56.11:root/demo.git
   30504ed..e72f22d  main -> main
Branch main set up to track remote branch main from origin.

部署jenkins

yum install fontconfig java-21-openjdk
rpm -ivh jenkins-2.395-1.1.noarch.rpm
启动服务
[root@server5 ~]# systemctl enable --now jenkins.service

[root@server5 ~]# netstat -antlp|grep :8080
tcp6       0      0 :::8080                 :::*                    LISTEN      9579/java

登录

http://192.168.150.195:8080/

初始密码

[root@server5 jenkins]# cat /var/lib/jenkins/secrets/initialAdminPassword

直接使用admin登录,进入后修改密码

安装推荐插件

替换国内插件源

cd /var/lib/jenkins

# 全局替换下载地址,把国外地址换成清华镜像

sed -i 's|https://updates.jenkins.io/download|https://mirrors.tuna.tsinghua.edu.cn/jenkins|g' updates/default.json

# 重启jenkins生效

systemctl restart jenkins

配置

修改密码

新建项目

在jenkins主机上安装git工具

[root@server5 ~]# yum install -y git

创建密钥并上传gitlab

[root@server5 ~]# ssh-keygen

添加gitlab认证凭据

配置ssh

[root@server5 ~]# vim /etc/ssh/ssh_config

Host *

StrictHostKeyChecking no

构建触发器

构建任务

查看控制台输出

实时触发

安装gitlab插件

配置项目触发器

配置gitlab

再回到demo项目下配置

1. GitLab 

把生成的字符串粘贴到 Secret 令牌 框里。

2. Jenkins 

进入你的 Jenkins 项目 → 配置 → 构建触发器 → 勾选 "Build when a change is pushed to GitLab" → 下面有个 Secret token,粘贴同一个字符串。

测试推送

自动化构建docker镜像

dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
[root@server6 ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@server7 ~]# echo "192.168.150.186 reg.westos.org" >> /etc/hosts
[root@docker1 docker]# scp -r certs.d/ 192.168.150.196:/etc/docker/

[root@server7 ~]# cp /etc/docker/certs.d/reg.westos.org/ca.crt /etc/pki/ca-trust/source/anchors/reg.westos.org.crt
update-ca-trust extract

测试

[root@server6 docker]# docker pull nginx

登录私有harbor仓库

[root@server6 test]# docker login reg.westos.org

安装CloudBees Docker Build and Publish插件

配置项目构建

在server4上提交Dockerfile
[root@server4 demo]# vim Dockerfile
FROM reg.westos.org/library/nginx:latest
COPY index.html /usr/share/nginx/html

[root@server4 demo]# git status -s
?? Dockerfile
[root@server4 demo]# git add  Dockerfile
[root@server4 demo]# git commit -m "add Dockerfile"
[main 8034141] add Dockerfile
 1 file changed, 2 insertions(+)
 create mode 100644 Dockerfile

[root@server4 demo]# git push -u origin main
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 350 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.56.11:root/demo.git
   85c9da3..8034141  main -> main
Branch main set up to track remote branch main from origin.

此时gitlab会主动触发jenkins构建任务,观察jenkins的任务输出

1.报错:

permission denied while trying to connect to the docker API at unix:///var/run/docker.sock

Jenkins 跑在 jenkins 用户身份下,而 /var/run/docker.sock 只有 root 和 docker 组能访问。

修复:把 jenkins 用户加入 docker 组

1. 看 docker.sock 的权限ls -l /var/run/docker.sock# 应该输出类似:srw-rw----. 1 root docker ... /var/run/docker.sock# 
2. 把 jenkins 加进 docker 组usermod -aG docker jenkins
3. 确认加进去了id jenkins# 应该看到 groups 里有 docker# 4. 重启 Jenkins(让新组生效)systemctl restart jenkins

2.报错

push access denied, repository does not exist or may require authorization: authorization failed: no basic auth credentials Build step 'Docker Build and Publish' marked build as failure Finished: FAILURE

切换成 jenkins 用户登录sudo -u jenkins docker login reg.westos.org

添加jenkins节点

新建虚拟机server6

安装jdk和git

在节点管理中添加节点

server6 ssh认证

关闭master节点的构建任务数

关闭git主机校验

主机信任证书

[root@server0 ~]# cp /etc/docker/certs.d/reg.westos.org/ca.crt /etc/pki/ca-trust/source/anchors/reg.westos.org.crt

[root@server0 ~]# update-ca-trust extract

systemctl restart docker

再次构建会在远程节点

最后测试构建,构建任务会在新节点上运行

通过ssh插件交付任务

新建测试虚拟机server7

在server7上安装docker-ce

[root@server6 ~]# cd /etc/yum.repos.d/
[root@server6 yum.repos.d]# scp docker-ce.repo 192.168.150.197:/etc/yum.repos.d/
[root@server7 yum.repos.d]# yum install -y docker-ce
[root@server7 ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@server7 ~]# echo "192.168.150.186 reg.westos.org" >> /etc/hosts
[root@docker1 docker]# scp -r certs.d/ 192.168.150.197:/etc/docker/

[root@server7 ~]# cp /etc/docker/certs.d/reg.westos.org/ca.crt /etc/pki/ca-trust/source/anchors/reg.westos.org.crt
update-ca-trust extract

jenkins安装ssh插件

进入系统配置,添加ssh主机

新建docker_test项目

当test项目成功运行后触发docker_test项目

RBAC

安装插件

修改默认授权策略

新建测试用户

用户授权

再次登录发现看不到项目

增加项目角色

再次登录zyl用户可以看到项目

pipeline

安装ssh agent 插件

新建流水线项目 docker_image_build

复制脚本

pipeline {
    agent any

    stages {
        stage('check out') {
            steps {
                git credentialsId: '4c0ab29d-68d2-4f17-a02c-6dd3ec822ab4', url: 'git@192.168.150.194:root/demo.git', branch: 'main'
            }
        }
        stage('docker build') {
            steps {
                sh '''
                cd $WORKSPACE
                docker build -t reg.westos.org/library/demo:${BUILD_NUMBER} .
                '''
            }
        }
        stage('docker push') {
            steps {
                sh '''
                REPOSITORY=reg.westos.org/library/demo:${BUILD_NUMBER}
                docker tag $REPOSITORY reg.westos.org/library/demo:latest
                docker login reg.westos.org -u admin -p 123456
                docker push $REPOSITORY
                docker push reg.westos.org/library/demo:latest
                '''
            }
        }
        stage('docker deploy') {
            steps {
		sshagent(credentials: ['4cacba5c-5e72-4ced-a41d-84b089fde458']) {
                    sh '''
                    ssh -o StrictHostKeyChecking=no root@192.168.150.197 """
                    docker ps -a |grep myapp && docker rm -f myapp;docker rmi reg.westos.org/library/demo:latest
                    docker run -d --name myapp -p 80:80 reg.westos.org/library/demo:latest """
                    '''
                }
            }
        }
    }
}

第一个credentialsId

ssh需要使用ssh免密认证

在build节点将私钥复制过去新节点

[root@server6 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:qFgwEx59h3lJK0OC5Z9VxAHiwja2pbhTWngr7PbuW+U root@server6
The key's randomart image is:
+---[RSA 3072]----+
|  o+o o+o=+.     |
| ..=.++.+o.      |
|  = B.=oo        |
|   O B *         |
|  o B + S        |
| . O o o         |
|  B o . E        |
| ..o .           |
| ..+=.           |
+----[SHA256]-----+
[root@server6 ~]# ssh-copy-id 192.168.150.197
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.150.197's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.150.197'"
and check to make sure that only the key(s) you wanted were added.

[root@server6 ~]# cd .ssh/
[root@server6 .ssh]# cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

第二个cert

自动生成流水线脚本

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/kuroomi/article/details/167586640

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--