golang快速克隆GitHub/GitLab/Gitea/Bitbucket组织仓库插件库ghorg的使用
ghorg - 快速克隆 GitHub/GitLab/Gitea/Bitbucket 组织仓库的工具
ghorg 是一个用 Go 语言开发的工具,可以快速克隆整个组织或用户的所有仓库到一个目录中。
主要功能
-
支持多种代码托管平台:
- GitHub(自托管和云端)
- GitLab(自托管和云端)
- Bitbucket(仅云端)
- Gitea(仅自托管)
-
高级功能:
- 选择性克隆仓库(通过正则、前缀等过滤)
- 创建仓库备份(包括镜像克隆)
- 通过 reclone 命令简化复杂克隆操作
- 通过 HTTP 服务器启动克隆操作
- 使用 cron 定时克隆
- 跟踪克隆数据随时间的变化
安装方法
使用预编译二进制文件
下载适用于您操作系统的预编译版本(Mac、Windows、Linux)
使用 Homebrew
brew install gabrie30/utils/ghorg
使用 Go 安装
# 确保 $HOME/go/bin 在 PATH 中
go install github.com/gabrie30/ghorg@latest
使用 Docker
docker run --rm ghcr.io/gabrie30/ghorg:latest
基本使用示例
# 克隆 GitHub 组织
ghorg clone kubernetes --token=YOUR_TOKEN
# 克隆用户的所有仓库
ghorg clone username --clone-type=user --token=YOUR_TOKEN
# 克隆 GitLab 组织
ghorg clone gitlab-examples --scm=gitlab --token=YOUR_TOKEN
# 克隆到指定目录
ghorg clone kubernetes --path=/tmp/ghorg
配置
创建配置文件:
mkdir -p $HOME/.config/ghorg
curl https://raw.githubusercontent.com/gabrie30/ghorg/master/sample-conf.yaml > $HOME/.config/ghorg/conf.yaml
vi $HOME/.config/ghorg/conf.yaml
高级用法示例
选择性克隆
# 只克隆名称以 sig- 开头的仓库
ghorg clone kubernetes --match-regex=^sig-
# 跳过 fork 的仓库
ghorg clone kubernetes --skip-forks
# 使用 ghorgignore 文件排除特定仓库
touch $HOME/.config/ghorg/ghorgignore
vi $HOME/.config/ghorg/ghorgignore
创建备份
ghorg clone kubernetes --backup --clone-wiki --include-submodules
使用 reclone 命令
# 查看所有 reclone 命令
ghorg reclone --list
# 运行特定 reclone 命令
ghorg reclone kubernetes-sig-staging
图片示例
总结
ghorg 是一个功能强大的工具,可以简化批量克隆仓库的流程,特别适合:
- 搜索整个组织的代码库
- Bash 脚本编写
- 创建备份
- 新团队成员入职
- 执行审计
通过其丰富的过滤选项和配置功能,您可以精确控制要克隆的仓库内容和方式。
更多关于golang快速克隆GitHub/GitLab/Gitea/Bitbucket组织仓库插件库ghorg的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang快速克隆GitHub/GitLab/Gitea/Bitbucket组织仓库插件库ghorg的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
ghorg - 快速克隆Git组织的Golang工具
ghorg 是一个用Go语言编写的命令行工具,用于快速克隆GitHub/GitLab/Gitea/Bitbucket等平台上的组织(Organization)或用户的所有仓库。它特别适合需要批量操作多个仓库的场景。
主要特性
- 支持多个Git平台:GitHub、GitLab、Gitea、Bitbucket
- 可以克隆整个组织或用户的所有仓库
- 支持按仓库类型(公开/私有)过滤
- 支持按语言过滤
- 可以跳过已存在的仓库
- 支持指定克隆深度
- 可以生成克隆报告
安装方法
使用go install安装
go install github.com/gabrie30/ghorg@latest
使用Homebrew安装(MacOS)
brew install ghorg
下载预编译二进制文件
可以从GitHub发布页下载对应平台的二进制文件。
基本使用示例
克隆GitHub组织的所有仓库
ghorg clone <组织名> --github-token=<你的GitHub token>
克隆GitLab组织的所有仓库
ghorg clone <组织名> --gitlab-token=<你的GitLab token> --scm=gitlab
克隆Bitbucket组织的所有仓库
ghorg clone <组织名> --bitbucket-username=<用户名> --bitbucket-token=<你的Bitbucket token> --scm=bitbucket
Golang代码示例
以下是使用ghorg作为库在Go程序中克隆组织的示例代码:
package main
import (
"fmt"
"log"
"os"
"github.com/gabrie30/ghorg/pkg/config"
"github.com/gabrie30/ghorg/pkg/git"
)
func main() {
// 配置ghorg
cfg := config.NewConfig()
cfg.SCMType = "github" // 可以是github, gitlab, bitbucket, gitea
cfg.Token = "your_personal_access_token"
cfg.CloneType = "org" // 可以是org或user
cfg.Target = "your_org_name"
cfg.OutputDir = "./cloned_repos"
cfg.SkipExisting = true // 跳过已存在的仓库
cfg.CloneDepth = 1 // 浅克隆,只获取最新提交
// 创建输出目录
if err := os.MkdirAll(cfg.OutputDir, 0755); err != nil {
log.Fatalf("创建目录失败: %v", err)
}
// 获取仓库列表
repos, err := git.GetRepos(cfg)
if err != nil {
log.Fatalf("获取仓库列表失败: %v", err)
}
fmt.Printf("找到 %d 个仓库\n", len(repos))
// 克隆仓库
for _, repo := range repos {
fmt.Printf("正在克隆 %s...\n", repo.Name)
if err := git.CloneRepo(cfg, repo); err != nil {
log.Printf("克隆 %s 失败: %v", repo.Name, err)
continue
}
fmt.Printf("成功克隆 %s\n", repo.Name)
}
fmt.Println("克隆完成!")
}
高级用法
过滤公开/私有仓库
# 只克隆公开仓库
ghorg clone <组织名> --github-token=<token> --private=false
# 只克隆私有仓库
ghorg clone <组织名> --github-token=<token> --private=true
按语言过滤
# 只克隆Go语言仓库
ghorg clone <组织名> --github-token=<token> --language=go
指定分支
# 克隆特定分支
ghorg clone <组织名> --github-token=<token> --branch=develop
生成克隆报告
ghorg clone <组织名> --github-token=<token> --report
注意事项
- 使用前需要生成对应平台的Personal Access Token
- 对于大型组织,克隆可能需要较长时间
- 确保有足够的磁盘空间
- 遵守各平台的API速率限制
ghorg是一个强大的工具,可以显著简化批量克隆仓库的工作流程,特别适合需要备份组织仓库或在CI/CD流程中使用的场景。