克隆/更新所有用户/组织的GitHub仓库
项目描述
ghcloneall
这是一个脚本,用于从GitHub克隆/更新用户/组织的所有仓库。
目标受众:大型项目集合的维护者(例如,ZopeFoundation成员)。
用法示例
首先 pip install ghcloneall。
克隆所有mgedmin的vim插件
mkdir ~/src/vim-plugins cd ~/src/vim-plugins ghcloneall --init --user mgedmin --pattern '*.vim' ghcloneall
克隆所有mgedmin的gists
mkdir ~/src/gists cd ~/src/gists ghcloneall --init --user mgedmin --gists ghcloneall
克隆所有ZopeFoundation仓库
mkdir ~/src/zf cd ~/src/zf ghcloneall --init --org ZopeFoundation ghcloneall
以下是上述内容的屏幕录像(运行的是稍旧版本,因此脚本名称不同)
详细信息
功能
- 克隆您本地没有的仓库 
- 获取您已经本地拥有的仓库的更改 
- 警告您关于本地更改和其他意外情况 - 树中的未知文件(仅在实际模式中) 
- 已暂存但未提交的更改 
- 未提交(和未暂存的更改) 
- 检出非默认分支 
- 已提交但未推送到默认分支的更改 
- 指向意外位置的远程URL(仅在实际模式中) 
 
您可以通过运行 ghcloneall --dry-run 来要求它不要更改磁盘上的任何文件,仅查找挂起的更改。这也会使检查更快!
概要
其他命令行选项
$ ghcloneall --help
usage: ghcloneall [-h] [--version] [-c CONCURRENCY] [-n] [-q] [-v]
                  [--start-from REPO] [--organization ORGANIZATION]
                  [--user USER] [--github-token GITHUB_TOKEN] [--gists]
                  [--repositories] [--pattern PATTERN] [--include-forks]
                  [--exclude-forks] [--include-archived] [--exclude-archived]
                  [--include-private] [--exclude-private] [--include-disabled]
                  [--exclude-disabled] [--init] [--http-cache DBNAME]
                  [--no-http-cache]
Clone/update all user/org repositories from GitHub.
options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -c CONCURRENCY, --concurrency CONCURRENCY
                        set concurrency level (default: 4)
  -n, --dry-run         don't pull/clone, just print what would be done
  -q, --quiet           terser output
  -v, --verbose         perform additional checks
  --start-from REPO     skip all repositories that come before REPO
                        alphabetically
  --organization ORGANIZATION
                        specify the GitHub organization
  --user USER           specify the GitHub user
  --github-token GITHUB_TOKEN
                        specify the GitHub token
  --gists               clone user's gists
  --repositories        clone user's or organisation's repositories (default)
  --pattern PATTERN     specify repository name glob pattern to filter
  --include-forks       include repositories forked from other users/orgs
  --exclude-forks       exclude repositories forked from other users/orgs
                        (default)
  --include-archived    include archived repositories
  --exclude-archived    exclude archived repositories (default)
  --include-private     include private repositories (default when a github
                        token is provided)
  --exclude-private     exclude private repositories
  --include-disabled    include disabled repositories (default)
  --exclude-disabled    exclude disabled repositories
  --init                create a .ghcloneallrc from command-line arguments
  --http-cache DBNAME   cache HTTP requests on disk in an sqlite database for
                        5 minutes (default: .httpcache)
  --no-http-cache       disable HTTP disk caching
配置文件
脚本在当前工作目录中寻找 .ghcloneallrc,其格式如下
[ghcloneall] # Provide either github_user or github_org, but not both # github_org = ZopeFoundation github_user = mgedmin pattern = *.vim # Provide github token for authentication # github_token = <my-github-token> # You can also uncomment and change these if you wish # gists = False # include_forks = False # include_archived = False # Listing private repositories requires a valid github_token # include_private = True # include_disabled = True
您可以使用以下命令创建一个:ghcloneall --init --{user,org} X [--pattern Y] [--{include,exclude}-{forks,archived,private,disabled}] [--gists|--repos].
提示
为了获得最佳效果,请配置SSH持久连接以加速git pull操作 —— 在您的 ~/.ssh/config 文件中。
Host github.com ControlMaster auto ControlPersist yes ControlPath ~/.ssh/control-%r@%h-%p
在我的笔记本电脑上,使用这种设置对382个ZopeFoundation仓库运行 git pull 大约需要80秒。
变更日志
1.11.0 (2022-10-27)
- 添加对Python 3.10和3.11的支持。 
- 停止支持Python 3.6。 
- 修复了 ghcloneall --user ... --github-token ... --include-private 不包括任何私有仓库的问题(GH: #16)。 
1.10.1 (2021-05-26)
- 在确定仓库是否已更改时,使用GitHub配置的默认分支而不是假设默认分支是“master”。 
1.10.0 (2021-04-10)
- 允许使用GitHub令牌进行身份验证。 
- 在Python 2.7上依赖requests-cache < 0.6。 
- 添加对Python 3.9的支持。 
- 停止支持Python 3.5。 
1.9.2 (2019-10-15)
- 添加对Python 3.8的支持。 
1.9.1 (2019-10-07)
- 重用HTTP连接进行GitHub API请求。 
1.9.0 (2019-09-06)
- 现在可以克隆所有用户的gists。 
- 命令行参数:–gists, –repos。 
1.8.0 (2019-08-28)
- 默认情况下跳过分支和存档仓库。 
- 命令行参数:–include-forks, –exclude-forks。 
- 命令行参数:–include-archived, –exclude-archived。 
- 命令行参数:–include-private, –exclude-private。 
- 命令行参数:–include-disabled, –exclude-disabled。 
- 在与GitHub通信时使用自定义User-Agent头。 
1.7.1 (2019-08-14)
- 停止支持Python 3.3和3.4。 
- 添加测试套件。 
- 修复了Python 2中的AttributeError: ‘str’ object has no attribute ‘format_map’。 
1.7.0 (2018-12-19)
- 命令行参数:-q, –quiet 
- 修复了在^C时显示损坏的问题。 
1.6.1 (2018-10-19)
- 修复了Python 2中的TypeError: get() got an unexpected keyword argument ‘fallback’。 
1.6 (2016-12-29)
- 全面重命名 - 将GitHub仓库重命名为 https://github.com/mgedmin/ghcloneall 
- 将 cloneall.py 重命名为 ghcloneall.py 
- 将配置文件重命名为 .ghcloneallrc,并将配置部分重命名为 [ghcloneall]。 
 
- 在^C时不要打印跟踪回溯(这在1.5版本中有所退步)。 
1.5 (2016-12-29)
- 作为 ghcloneall 发布到PyPI 
- 添加了Python 2.7支持 
1.4 (2016-12-28)
- 命令行参数:–user, –pattern, –init 
- 从 .cloneallrc 加载(一些)选项 
- 默认情况下停止使用 --organization=ZopeFoundation,需要显式选项(或配置文件) 
- 将 clone_all_zf_repos.py 重命名为 cloneall.py 
1.3 (2016-12-28)
- 命令行参数:-c 
- 在从GitHub获取仓库列表时显示进度 
- 默认情况下并行更新仓库 
- 突出显示正在进行的项 
- 用红色突出显示失败的项 
- 调整进度条样式从 [=== ] 到 [###..] 
- 在^C时清除进度条 
- 优雅地处理git错误 
- 错误修复:-vv在工作树中存在未知文件时可能会失败 
- 错误修复:正确显示使用 –start-from 时的进度 
- 错误修复:如果没有已经运行的SSH控制主进程,脚本会挂起(10分钟) 
- 错误修复:–dry-run没有显示哪些仓库是新的 
1.2 (2016-11-09)
- 命令行参数:–dry-run, –verbose 
- 将HTTP响应缓存到磁盘上10分钟,以避免GitHub API速率限制 
- 关于忘记的未提交和暂存更改的报告 
- 警告关于本地(未推送)的提交 
- 警告关于被检出其他分支 
- 再次默认为SSH URL(使用SSH的ControlPersist时更快) 
1.1 (2015-11-07)
- 命令行参数:–version, –start-from, –organization 
- 输出格式:缩短存储库名称,总计数在最后 
- 使用ANSI颜色来指示更改 
- 在^C时不打印跟踪回溯 
- 默认为HTTPS URL 
1.0 (2015-11-07)
- 已从gist迁移到合适的GitHub存储库。 
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
ghcloneall-1.11.0.tar.gz的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | 728c4bc5ebbaf72a26b9d54b8b83e8985c3751cd6a3aa697072be5eb0cb130d2 | |
| MD5 | e263e7b63daed0f070655dff08829b64 | |
| BLAKE2b-256 | 639ca4278a67539c2ea878fddbce8bb07732dc3c2c9fb36dc6fc1cdcea450028 | 
ghcloneall-1.11.0-py2.py3-none-any.whl的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | 9a9ac9961f8b060fcd3f79669b96e33aacba9769a243acfbcb462c2e6d3b882f | |
| MD5 | b51af61574b36eca9cf3c6cb92f70a2a | |
| BLAKE2b-256 | db6eb69c04926f06d808a901c5a9da687161d7ccee81810c0435e4757abd76c1 |