#github #gitlab #pull-request #git-repository #git #version-control #command-line

程序+库 git-ar

Git所有远程仓库。Git命令行工具,针对Github和Gitlab。将常见的开发操作(如打开合并/拉取请求)下放到Shell中。这是Github https://github.com/cli/cli 和 Gitlab https://gitlab.com/gitlab-org/cli 命令行工具的替代品。

36 个版本

0.1.93 2024 年 8 月 23 日
0.1.92 2024 年 8 月 12 日
0.1.89 2024 年 7 月 27 日
0.1.75 2024 年 6 月 24 日
0.1.62 2024 年 5 月 29 日

117开发工具

Download history 554/week @ 2024-05-20 870/week @ 2024-05-27 503/week @ 2024-06-03 816/week @ 2024-06-10 255/week @ 2024-06-17 130/week @ 2024-06-24 691/week @ 2024-07-01 344/week @ 2024-07-08 99/week @ 2024-07-15 348/week @ 2024-07-22 465/week @ 2024-07-29 37/week @ 2024-08-05 136/week @ 2024-08-12

每月下载量 986

MIT 许可证

1MB
21K SLoC

GitAR - Git所有远程仓库

Build status codecov

GitAR

Git 多远程命令行工具。将常见的开发操作(如打开合并/拉取请求)下放到Shell中。

这是Github https://github.com/cli/cli 和 Gitlab https://gitlab.com/gitlab-org/cli 命令行工具的替代品。目前的作用域较小。如果你同时使用Gitlab和Github,并只想使用一个工具,这将有所帮助。

一些优点

  • 支持Gitlab和Github。一个工具,统治它们。
  • 用Rust编写。快速并并行操作以本地和远程收集数据。
  • 常用默认设置。例如,拉取请求的标题自动设置为最后的提交。在提示时可以覆盖默认设置。
  • 缓存API读取调用。常见的远程调用,如收集不经常更改的项目数据(项目ID、命名空间、成员),因此后续调用非常快。

我只在MacOS和Linux上测试过。

安装

您可以从版本页面下载最新版本 https://github.com/jordilin/gitar/releases 并将其二进制文件放置在您的路径中的任何位置。

或者您可以从源代码构建。从源代码构建需要Rust的最新稳定版本。

cargo build --release
./target/release/gr --help

使用方法

警告:在使用前,我建议您在一个测试git仓库中熟悉一下。

配置

将配置信息放置在名为 $HOME/.config/gitar/api 的文件中。您需要从您的 Gitlab/Github 账户中收集一个读/写 API 令牌。

您可以使用以下命令生成一个新的配置文件

gr init --domain <domain>

其中,<domain> 是远程的域名。例如,gitlab.comgithub.com。这将创建一个带有一些默认值的新的配置文件。创建后,您可以针对每个域名追加新值。

配置遵循属性文件格式。

<domain>.property=value

示例配置文件

# Gitlab.com
gitlab.com.api_token=<your api token>
gitlab.com.cache_location=/home/<youruser>/.cache/gr
gitlab.com.preferred_assignee_username=<your username>
gitlab.com.merge_request_description_signature=<your signature, @someone, etc...>

## Cache expiration configuration

# Expire read merge requests in 5 minutes
gitlab.com.cache_api_merge_request_expiration=5m
# Expire read project metadata, members of a project in 5 days
gitlab.com.cache_api_project_expiration=5d
# Pipelines are read often, change often, so expire immediately.
gitlab.com.cache_api_pipeline_expiration=0s
# Expire read container registry in 5 minutes
gitlab.com.cache_api_container_registry_expiration=5m
# Cache for reading releases
gitlab.com.cache_api_release_expiration=1d

## Max pages configuration

# Get up to 10 pages of merge requests when listing
gitlab.com.max_pages_api_merge_request=10
# Get up to 5 pages of project metadata, members of a project when listing
gitlab.com.max_pages_api_project=5
# Get up to 10 pages of pipelines when listing
gitlab.com.max_pages_api_pipeline=10
# Get up to 10 pages of container registry when listing
gitlab.com.max_pages_api_container_registry=10
# Get up to 10 pages of releases when listing
gitlab.com.max_pages_api_release=10

# Rate limit remaining threshold. Threshold by which the tool will stop
# processing requests. Defaults to 10 if not provided. The remote has a counter
# that decreases with each request. When we reach this threshold we stop for safety.
# When it reaches 0 the remote will throw errors.

gitlab.com.rate_limit_remaining_threshold=10

# Github
github.com.api_token=<your api token>
github.com.cache_location=/home/<youruser>/.cache/gr
github.com.preferred_assignee_username=<your username>
# github.com.merge_request_description_signature=@my-team

# Your company gitlab
gitlab.mycompany.com.api_token=<your api token>
...

缓存过期配置有三个键

  • <domain>.cache_api_merge_request_expiration: 列出合并请求、获取合并请求等...任何涉及合并/拉取请求的读取操作。
  • <domain>.cache_api_project_expiration: 获取项目元数据、项目成员。这些信息不常更改,因此长期过期是可以的。
  • <domain>.cache_api_pipeline_expiration: 列出流水线、获取流水线等...

这些键的值可以接受任何数字,后面跟 s 表示秒、m 表示分钟、h 表示小时、d 表示天。例如,5m 表示5分钟,5d 表示5天,0s 表示立即过期。

如果省略,则默认为立即过期,因此读取操作始终从远程获取。

当列出合并请求、项目、流水线等...时,工具将获取最多页面数。我们可以按 API 控制如下

  • <domain>.max_pages_api_merge_request: 列出合并请求、获取合并请求等...任何涉及合并/拉取请求的读取操作。
  • <domain>.max_pages_api_project: 获取项目元数据、项目成员。
  • <domain>.max_pages_api_pipeline: 列出流水线、获取流水线等...

如果省略,则所有 API 的默认全局页面数为10。这是为了避免当信息量很大时获取太多数据。Gitlab 的默认每页结果数是20,而 Github 是30。

示例:打开合并/拉取请求

按照上述说明创建一个包含 API 读写令牌的配置文件。

gr mr create
  • 您在一个功能分支中
  • 提示分配用户
  • 确认
  • 打开合并请求

一图胜千言

demo.webm

支持的远程仓库

Gitlab 和 Github。

支持的操作

合并请求

在 Gitlab 中它们被称为合并请求,在 Github 中称为拉取请求。

操作 GitLab GitHub
打开
批准
合并
获取合并请求详情
按状态合并请求列表
关闭
在时间轴上创建评论
列出时间轴上的评论

流水线

在Gitlab中它们被称为管道,在Github中称为操作。

操作 GitLab GitHub
列出所有管道
列出管道运行器
获取管道运行器详细信息
检查管道配置
获取总合并的管道配置
列出项目作业

容器注册库

操作 GitLab GitHub
列出仓库
列出标签
获取镜像元数据

项目

操作 GitLab GitHub
获取

使用浏览器浏览远程仓库

操作 GitLab GitHub
在浏览器中打开git仓库
在浏览器中打开合并请求
在浏览器中打开管道
在浏览器中打开版本

版本

操作 GitLab GitHub
列出版本
列出版本资源

认证用户

gr my命令提供,提供了持有认证令牌的用户信息。

操作 GitLab GitHub
列出分配的合并请求
列出您的项目
列出您收藏的项目
列出您的gists
操作 GitLab GitHub
按编程语言分类

所有列表操作都支持以下标志

  • --page用于指定要获取的页面。
  • --from-page--to-page用于指定要获取的页面范围。
  • --num-pages查询有多少页数据可用
  • --refresh用于强制刷新缓存。
  • --sort按日期升序或降序排序数据。默认为升序。
  • --created-after--created-before用于按日期筛选,如果响应有效负载支持created_at字段。
  • --format用于指定输出格式。字段由管道分隔,即默认为|

日志

可以通过发出--verbose-v全局标志来启用日志记录。

默认情况下,启用INFO日志,并将输出到STDERR,而不会干扰STDOUT,以便您可以将输出管道传输到另一个命令或文件。INFO将提供足够的信息来了解正在发生的情况。

您可以通过将环境变量RUST_LOG设置为debug来启用DEBUG日志。DEBUG非常冗长。

示例:带有日志记录列出所有管道/操作。

# INFO logs
gr --verbose pp list
# DEBUG logs
RUST_LOG=debug gr --verbose pp list

单元测试

Gitlab和Github的JSON响应在contracts文件夹中进行验证。这些用于为单元测试生成模拟响应。

cargo test

Gitar-Amps 额外脚本和工作流程

Gitar-Amps是包装脚本,利用gitar提供额外的工作流和使用场景。这是一个可以找到的配套项目:https://github.com/jordilin/gitar-amps

许可协议

本项目许可协议

依赖项

~13–25MB
~379K SLoC