Gogs搭建与配置

作者:zhangyunlong 发布时间: 2024-03-09 阅读量:7 评论数:0

Gogs 是一款极易搭建的自助 Git 服务。

Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。

地址:https://gitee.com/Unknown/gogs

1. 创建Gogs服务

创建 gogs_data目录 和 docker-compose.yml 文件, 文件内容如下

version: '3'
​
services:
  gogs:
    image: gogs/gogs:latest
    container_name: gogs
    ports:
      - "3000:3000"
    volumes:
      - ./gogs_data:/data
    restart: always
    environment:
      - TZ=Asia/Shanghai

2. 启动Gogs服务

执行docker-compose up -d拉起容器

3. 配置Gogs

访问Gogs管理页面, 注册用户 http:[ip]:3000

4. 按需修改Gogs默认配置

编辑gogs_data/gogs/conf/app.ini文件

  • Gogs服务默认开放注册用户功能, 在上一步注册完第一个用户后, 为了安全考虑, 可按需选择是否禁用此功能

# 将"auth"下的DISABLE_REGISTRATION的值改为true, 禁用用户注册功能
[auth]
DISABLE_REGISTRATION=true
  • Gogs的web钩子默认不可以指向本机ip, 当有需要时(例如jenkins和gogs在同一个ip)需要修改此配置

# 在“security”下添加“LOCAL_NETWORK_ALLOWLIST”属性,设置为本地IP地址, 如果是多个IP用逗号分开
[security]
LOCAL_NETWORK_ALLOWLIST = 192.168.234.59

回到docker-compose.yml所在目录, 执行docker-compose restart 重启Gogs服务


配置Git多仓库提交

假设旧仓库A中已有代码, 新创建了一个仓库B

需求如下:

  • 需要同步A仓库中的代码到仓库B中

  • 后续使用git从A仓库拉取代码

  • 后续使用git提交代码时, 同时推送到A仓库和B仓库

1. 查看旧仓库信息

$ git remote -v
origin  https://code.srdcloud.cn/a/smartbcm/project_java (fetch)
origin  https://code.srdcloud.cn/a/smartbcm/project_java (push)

2. 添加新的远程仓库

git remote add new-repo http://192.168.234.59:3000/root/project_java.git

3. 推送现有代码到新的远程仓库

期间会弹窗让输入新仓库的账号和密码

$ git push new-repo --all
Enumerating objects: 3854, done.
Counting objects: 100% (3854/3854), done.
Delta compression using up to 20 threads
Compressing objects: 100% (2585/2585), done.
Writing objects: 100% (3854/3854), 476.20 KiB | 3.61 MiB/s, done.
Total 3854 (delta 1968), reused 613 (delta 395), pack-reused 0
info: detecting host provider for 'http://192.168.234.59:3000/'...
remote: Resolving deltas: 100% (1968/1968), done.
info: detecting host provider for 'http://192.168.234.59:3000/'...
To http://192.168.234.59:3000/root/project_java.git
 * [new branch]      dev -> dev
 * [new branch]      master -> master
$ git push new-repo --tags
Everything up-to-date

4. 设置默认推送的远程仓库

git remote set-url --add --push origin https://code.srdcloud.cn/a/smartbcm/project_java
git remote set-url --add --push origin http://192.168.234.59:3000/root/project_java.git

5. 检查更新后的仓库信息

$ git remote -v
new-repo        http://192.168.234.59:3000/root/project_java.git (fetch)
new-repo        http://192.168.234.59:3000/root/project_java.git (push)
origin  https://code.srdcloud.cn/a/smartbcm/project_java (fetch)
origin  http://192.168.234.59:3000/root/project_java.git (push)
origin  https://code.srdcloud.cn/a/smartbcm/project_java (push)

针对研发云仓库的多仓库提交

  • 由于研发云仓库中的项目启用了客户端钩子(commit-msg), 用来强制做一些校验, 所以常规的添加多仓库推送方式无效, 而且会导致账号短期无法推送, 此处采用钩子(post-commit)实现多仓库推送

  • 示例为原研发云仓库为A, 新仓库为B, 示例中的仓库B地址和账号密码需要根据实际情况更换

0. 关于这两个钩子的说明

钩子名称

触发时机

作用

commit-msg

在提交信息输入后、正式提交前

用于检查或修改提交信息(如强制要求符合特定格式)

post-commit

在 git commit 执行完成后

用于日志记录、通知等操作(不会影响提交)

1. 创建仓库B(已有可跳过)

新建仓库B
​
示例地址为http://192.168.234.59:3000/root/project_java.git
​
示例git账号和密码为root

2. 同步仓库A的代码到仓库B(已同步可跳过), 可重复执行(例如中间有段时间离线未同步提交信息)

# 添加仓库B
git remote add new-repo http://192.168.234.59:3000/root/project_java.git
​
# 查看本地配置的仓库(包含A和B)
git remote -v
new-repo        http://192.168.234.59:3000/root/project_java.git (fetch)
new-repo        http://192.168.234.59:3000/root/project_java.git (push)
origin  https://zhangyl07@code.srdcloud.cn/a/smartbcm/project_java (fetch)
origin  https://zhangyl07@code.srdcloud.cn/a/smartbcm/project_java (push)
​
# 推送仓库A的代码到仓库B
git push new-repo --all
Enumerating objects: 3958, done.
Counting objects: 100% (3958/3958), done.
Delta compression using up to 20 threads
Compressing objects: 100% (1133/1133), done.
Writing objects: 100% (3958/3958), 508.88 KiB | 28.27 MiB/s, done.
Total 3958 (delta 1969), reused 3834 (delta 1922), pack-reused 0
info: detecting host provider for 'http://192.168.234.59:3000/'...
remote: Resolving deltas: 100% (1969/1969), done.
info: detecting host provider for 'http://192.168.234.59:3000/'...
To http://192.168.234.59:3000/root/project_java.git
 * [new branch]      dev -> dev
 
# 推送仓库A的tag到仓库B
git push new-repo --tags
​
# 移除仓库B
git remote remove new-repo
​
# 核对本地配置的仓库(只有仓库A)
git remote -v
origin  https://zhangyl07@code.srdcloud.cn/a/smartbcm/project_java (fetch)
origin  https://zhangyl07@code.srdcloud.cn/a/smartbcm/project_java (push)

3. 在项目根目录的.git/hooks目录下创建post-commit文件

文件内容如下:

#!/bin/sh
​
LOG_FILE="/tmp/git_post_push.log"
MIRROR_REPO="http://192.168.234.59:3000/root/project_java.git"
USERNAME="root"
PASSWORD="root"
​
echo "$(date) - Running post-push hook" >> $LOG_FILE
echo "Pushing to mirror repo: $MIRROR_REPO" >> $LOG_FILE
​
git push --mirror "http://$USERNAME:$PASSWORD@192.168.234.59:3000/root/project_java.git" >> $LOG_FILE 2>&1
​
if [ $? -eq 0 ]; then
    echo "$(date) - Successfully pushed to mirror repository" >> $LOG_FILE
else
    echo "$(date) - Failed to push to mirror repository" >> $LOG_FILE
fi

4. 赋予钩子可执行权限

# 在项目根目录打开git bash窗口, 执行:
chmod +x .git/hooks/post-commit

评论