Git常用操作:基础命令、生成公钥、webhook同步

该文详细介绍了在Windows环境下Git的下载安装过程,以及Git的基本命令,包括克隆、初始化、与仓库建立连接、下拉和提交代码。同时,文章还讲解了如何生成和使用本地Git公钥,以实现免密提交。最后,文中阐述了Webhook的设置方法,实现本地、码云和服务器代码的自动同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载安装GIT

此处只介绍windows系统下的安装,linux一般都是自带git(自行百度)

下载Git 官方地址为:https://git-scm.com/download/wi
在这里插入图片描述
下载好对应的安装程序打开一路点击下一步即可,最终鼠标右侧菜单栏出现对应部分即为安装成功
在这里插入图片描述

基础命令

记录下常用的git基础命令

克隆

git clone 仓库地址

其中仓库地址大概有两种

  • 其一类似于:https://gitee.com/******
  • 其二类似于:git@gitee.com:******,这种码云注册公钥后每次提交下拉就不用验证身份了

初始化

git init

与仓库建立连接

git remote add origin git@gitee.com******

下拉代码

通常命令

git pull

初始化仓库后的首次下拉,需要指定分支

git pull origin master

强制下拉

git fetch --all && git reset --hard origin/master && git pull

提交代码

检查当前代码差异

git status

提交所有修改

git add .

提交本次修改备注(描述一下这次提交改了什么东西,方便版本追溯)

git commit -m 'hello world'

通常提交命令

git push

初始化仓库后的首次提交

git push -u origin master

清空本地缓存

通常用于新增.gitignore文件中的排除文件

git rm -r --cached .

本地生成GIT公钥

将git公钥添加到码云可以让每次代码同步时无需校验身份;

生成本地公钥

ssh-keygen -t rsa -C "xxxxx@xxxxx.com"

注意:这里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。现网的大部分教程均讲解的使用邮箱生成,其一开始的初衷仅仅是为了便于辨识所以使用的邮箱。
查看公钥

cat ~/.ssh/id_rsa.pub

可能会用到全局注册

git config --global user.email  "you@example.com" //邮箱为你的注册码云账号时绑定的邮箱
git config --global user.name  "Your Name"        //用户名为你码云注册时的登录名

公钥示例

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6SAt7JIuZRXECYH+WKvDjPb6Zf22L2p6U******

webhook(本地-码云-服务器代码同步)

简单讲就是再提交代码到远程仓库时,项目生成环境自动同步最新的代码版本(我认为的热传递),下面以linux系统为例展示下本地--码云--项目服务器代码同步
1.进入码云网站注册/登录账户,码云传送门
在这里插入图片描述
注册时有个邮箱,不是邮箱注册的到设置里面设置一下,最终要拿到邮箱(设置-邮箱管理)和登录名(码云个人主页@后面的内容),相关码云位置随着码云更新可能会变

2.新建码云的项目仓库,此处可以拿到一个仓库地址例如:git@gitee.com:******
在这里插入图片描述
3.本地电脑安装git,根据上面生成公钥的方法拿到本地公钥(此处不展示),添加到码云,使用基础命令测试本地与码云的代码同步
在这里插入图片描述
4.本地无误后,进入linux服务器切换www用户(注意:用www用户生成公钥添加到码云,原理与本地生成方式相同)

su www

可能会出现无法切换的情况,如下图:
在这里插入图片描述
这是因为用户的shell,禁止了www用户登录,修改/etc/passwd文件,将“/sbin /nologin”改成“/bin/bash”。(如下图):
在这里插入图片描述
2.创建项目根目录

mkdir new-working-system

目录名根据自己的项目自行更改,创建好后如下:
在这里插入图片描述

3.进入项目目录中,初始化仓库(注意要用www用户),生成服务器公钥添加到码云(不介绍)

cd new-working-system/

4.初始化仓库与远程仓库建立链接

git init
git remote add origin git@gitee.com:******
git pull origin master

如何git提示没有指定分支

git branch --set-upstream-to=origin/master master

5.测试一下服务器与码云的git同步效果,无误后在项目根目录提交webhook文件(此处php展示)

$cmd="git fetch --all && git reset --hard origin/master && git pull";
$r= shell_exec($cmd);
print_r($r);

6.将webhook文件的服务器访问地址添加至码云仓库中,添加后,修改文件进行测试,查看是否成功实现三端同步即可。
在这里插入图片描述

<think>我们正在讨论如何配置GitLab的Webhook来实现代码从中转服务器自动部署到Web服务器。根据引用内容,我们可以总结出以下步骤:1.**配置GitLabWebhook**:在GitLab仓库设置中创建Webhook,指定触发事件(如push事件)和目标URL(即中转服务器上的处理脚本地址,例如`http://中转服务器地址/webhook-handler.php`)[^2][^3]。2.**中转服务器设置**:-创建一个Webhook处理脚本(如PHP脚本),用于接收GitLab的Webhook请求[^2][^4]。-该脚本需要验证请求(可选,但推荐,如使用SecretToken验证)并执行后续操作。-脚本触发从中转服务器拉取代码到Web服务器的操作。通常,这可以通过SSH连接到Web服务器并执行命令,或者通过在中转服务器上运行脚本将代码推送到Web服务器(例如使用rsync或gitpull)[^4]。3.**Web服务器设置**:-确保Web服务器上的目标目录具有写入权限(通常需要设置www-data用户或部署用户的SSH密钥)[^4]。-在Web服务器上配置好Git环境,以便可以执行gitpull命令(如果使用git方式部署)[^2][^4]。4.**自动化脚本**:编写一个部署脚本(如Shell脚本),该脚本负责将代码从中转服务器同步到Web服务器,或直接从Git仓库拉取代码到Web服务器[^2][^4]。例如:```bash#!/bin/bashcd/path/to/web/directorygitpulloriginmaster```5.**权限与安全**:-在GitLabWebhook设置中添加SecretToken,并在处理脚本中验证该Token[^3][^5]。-设置SSH密钥对:将中转服务器或Web服务器的公钥添加到GitLab仓库的部署密钥中,以便无密码访问仓库[^4]。同时,确保中转服务器能够通过SSH无密码登录到Web服务器(如果需要直接操作Web服务器)[^4]。6.**测试Webhook**:在GitLab中测试Webhook,观察中转服务器和Web服务器的日志,确保流程正确执行[^5]。具体步骤示例:**步骤1:在GitLab仓库中设置Webhook**-进入仓库的**Settings>Webhooks**。-填写URL:`http://中转服务器IP/webhook-handler.php`(假设处理脚本为PHP)。-选择触发事件,如**Pushevents**。-设置SecretToken(可选但推荐)。-保存。**步骤2:中转服务器创建Webhook处理脚本(PHP示例)**创建文件`webhook-handler.php`:```php<?php//验证SecretToken(如果设置)$secret='your_secret_token';$header_secret=$_SERVER['HTTP_X_GITLAB_TOKEN']??'';if($header_secret!==$secret){header('HTTP/1.1403Forbidden');exit('Invalidtoken');}//获取事件数据$payload=file_get_contents('php://input');$data=json_decode($payload,true);//确认是push事件到master分支(根据实际情况调整)if(isset($data['ref'])&&$data['ref']==='refs/heads/master'){//执行部署脚本,这里假设通过SSH连接到Web服务器执行部署脚本$output=shell_exec('sshuser@web_server_ip"bash/path/to/deploy.sh"2>&1');file_put_contents('webhook.log',$output,FILE_APPEND);echo"Deploymenttriggered.";}else{echo"Ignoredevent.";}?>```**步骤3:Web服务器上的部署脚本(deploy.sh)**在Web服务器上创建`/path/to/deploy.sh`:```bash#!/bin/bashcd/var/www/html/your_projectgitpulloriginmaster#可选:重启服务,如重启PHP-FPM或Nginx#systemctlrestartphp-fpm```**步骤4:设置SSH免密登录**1.在中转服务器生成SSH密钥(如果没有):```bashssh-keygen-trsa```2.将中转服务器的公钥(`~/.ssh/id_rsa.pub`)添加到Web服务器的`~/.ssh/authorized_keys`文件中。3.测试SSH登录:`sshuser@web_server_ip`应无需密码。**步骤5:测试**-推送代码到GitLab仓库的master分支。-观察中转服务器和Web服务器的日志,检查代码是否成功部署。**注意事项**:-确保中转服务器和Web服务器之间的网络连通。-确保所有脚本有执行权限(`chmod+xdeploy.sh`)。-处理脚本和部署脚本的路径根据实际情况调整。以上流程实现了GitLab推送代码后,通过中转服务器触发Web服务器上的自动部署。§§相关问题§§1.如何验证GitLabWebhook请求的安全性?2.除了PHP,还可以用什么语言编写Webhook处理脚本?3.如果部署过程中出现错误,如何排查?4.如何配置Webhook以实现多环境(如测试环境、生产环境)的自动部署?5.除了SSH,还有哪些方法可以将代码从中转服务器同步到Web服务器?</think>### GitLab Webhook 配置流程(中转服务器到 Web 服务器) 以下是基于 GitLab Webhook 实现代码**从中转服务器自动同步到 Web 服务器**的标准流程,结合引用内容整理: #### 一、核心流程概览 ```mermaid graph LR A[开发者Push代码] --> B[GitLab仓库] B --> C[触发Webhook请求] C --> D[中转服务器接收请求] D --> E[执行同步脚本] E --> F[Web服务器拉取代码] ``` #### 二、详细配置步骤 1. **GitLab 仓库设置** - 进入仓库 `Settings > Webhooks` - 配置 URL:`http://中转服务器IP/webhook-handler.php`(示例) - 设置 Secret Token(可选但推荐)[^3][^5] - 选择触发事件:`Push events`(代码推送时触发) - **关键点**:需确保中转服务器能被 GitLab 访问(公网IP或内网穿透) 2. **中转服务器配置** - 创建 Webhook 处理脚本(以 PHP 为例): ```php <?php // gitlab-webhook-handler.php $secret = 'your_secret'; // 与GitLab设置的Token一致 $payload = file_get_contents('php://input'); // 验证请求合法性[^3] if ($_SERVER['HTTP_X_GITLAB_TOKEN'] !== $secret) { http_response_code(403); exit; } // 触发同步脚本 shell_exec('/path/to/sync-script.sh > /var/log/webhook.log 2>&1 &'); echo "Deployment triggered!"; ``` - **权限设置**:确保 PHP 运行用户(如 `www-data`)有执行脚本的权限[^4] 3. **Web 服务器同步机制** - 创建同步脚本 `sync-script.sh` 放在**中转服务器**: ```bash #!/bin/bash # 通过SSH在Web服务器执行拉取命令 ssh user@web-server-ip "cd /var/www/project; git pull origin master" # 可选:重启服务(如Nginx/PHP) ssh user@web-server-ip "sudo systemctl restart php-fpm" ``` - **免密登录配置**: - 中转服务器生成 SSH 密钥:`ssh-keygen -t rsa` - 将公钥 `id_rsa.pub` 添加到 Web 服务器的 `~/.ssh/authorized_keys`[^4] 4. **安全加固** - IP 白名单:在 Webhook 脚本中校验 `$_SERVER['REMOTE_ADDR']` 是否为 GitLab IP - HTTPS:为 Webhook URL 配置 SSL 证书(避免明文传输) - 权限隔离:使用非 root 用户执行部署命令[^4] #### 三、验证流程 1. 测试 Webhook:在 GitLab 点击 `Test -> Push events` 2. 查看日志: - GitLab 侧:`Webhooks > Recent Deliveries` - 中转服务器:`/var/log/webhook.log` - Web 服务器:检查代码更新时间 `git log` #### 四、常见问题解决 - **错误 403**:检查 Secret Token 一致性[^3] - **SSH 连接失败**:确认 `authorized_keys` 权限为 `600` - **文件权限问题**:Web 服务器目录需授予 Git 用户写权限 - **超时处理**:在 PHP 脚本中立即返回响应,后台执行同步[^2] > **关键参考**:此流程通过中转服务器接收 GitLab Webhook 请求,再触发 SSH 远程命令实现安全同步,避免直接暴露 Web 服务器[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值