golang快速克隆GitHub/GitLab/Gitea/Bitbucket组织仓库插件库ghorg的使用

ghorg - 快速克隆 GitHub/GitLab/Gitea/Bitbucket 组织仓库的工具

ghorg 是一个用 Go 语言开发的工具,可以快速克隆整个组织或用户的所有仓库到一个目录中。

主要功能

  1. 支持多种代码托管平台:

    • GitHub(自托管和云端)
    • GitLab(自托管和云端)
    • Bitbucket(仅云端)
    • Gitea(仅自托管)
  2. 高级功能:

    • 选择性克隆仓库(通过正则、前缀等过滤)
    • 创建仓库备份(包括镜像克隆)
    • 通过 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 cli 示例

ghorg reclone 示例

总结

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)或用户的所有仓库。它特别适合需要批量操作多个仓库的场景。

主要特性

  1. 支持多个Git平台:GitHub、GitLab、Gitea、Bitbucket
  2. 可以克隆整个组织或用户的所有仓库
  3. 支持按仓库类型(公开/私有)过滤
  4. 支持按语言过滤
  5. 可以跳过已存在的仓库
  6. 支持指定克隆深度
  7. 可以生成克隆报告

安装方法

使用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

注意事项

  1. 使用前需要生成对应平台的Personal Access Token
  2. 对于大型组织,克隆可能需要较长时间
  3. 确保有足够的磁盘空间
  4. 遵守各平台的API速率限制

ghorg是一个强大的工具,可以显著简化批量克隆仓库的工作流程,特别适合需要备份组织仓库或在CI/CD流程中使用的场景。

回到顶部