Git-远程仓库(GitLab)

本文详细介绍Git的基本使用,包括SSH密钥生成、与远程仓库的关联、代码克隆、推送及拉取等关键流程。通过具体步骤和实例,帮助读者掌握Git版本控制的核心操作。
系列文章

Git-入门小结
Git-分支
Git-常用命令
Git-注册远程仓库

Git-远程仓库

1.生成SSH KEY

ssh-keygen -t rsa -C "youremail@xx.com"
//git里注册的邮箱,可以用git config --global user.email查看

Generating public/private rsa key pair.
Enter file in which to save the key 
(/c/Users/Administrator/.ssh/id_rsa)://按Enter
/c/Users/Administrator/.ssh/id_rsa already exists.
Overwrite (y/n)? y//这里我的文件夹里已经有SSH key了,命令行提示要不要重新写入

/**
*设置passphrase后,进行版本控制时,
*每次与远程仓库通信都会要求输入passphrase,
*这里我直接Enter不输入密码
**/
Enter passphrase (empty for no passphrase)://Enter
Enter same passphrase again://Enter

Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:X.........................oo your_emial@examle.com
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|       o .       |
|      = +        |
|     . * o       |
|  o o = S .      |
| = = = + .       |
|o B = + o        |
|o= = =B=.*       |
|E.o ++=@O.o      |
+----[SHA256]-----+


2.查看公钥

cd ~/.ssh//进入.ssh文件夹
cat id_rsa.pub//查看公钥

3.与gitlab关联

img

4.clone

git clone URL
git clone -b dev URL//clone指定分支下代码
  • 选好项目

在这里插入图片描述

  • clone到本地

在这里插入图片描述

4.push and pull

git fetch origin dev//从origin服务器更新代码,此时代码被更新到仓库
git pull origin dev//从origin服务器更新代码,此时代码被更新到工作区
git push origin dev//将仓库中dev分支代码推送到服务器分支上

fetch步骤:

  • git fetch
  • git merge
//方法一
$ git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master

$ git log -p master.. origin/master//比较本地的仓库和远程参考的区别

$ git merge origin/master//把远程下载下来的代码合并到本地仓库,远程的和本地的合并

//方法二
$ git fetch origin master:temp //从远程的origin仓库的master分支下载到本地并新建一个分支temp

$ git diff temp//比较master分支和temp分支的不同

$ git merge temp//合并temp分支到master分支

$ git branch -d temp//删除temp

$ git fetch origin bug
remote:
remote: INFO: Your SSH key is expiring soon. Please generate a new key.
remote:
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 286 bytes | 4.00 KiB/s, done.
From gitlab.inhand.design:tangzh/first-try
 * branch            bug        -> FETCH_HEAD
   c5c305d..e9697ad  bug        -> origin/bug

$ git merge 'origin/bug'
Updating e123480..e9697ad
Fast-forward
 try0.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
<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]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tangYi0_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值