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 在 开发工具 中
每月下载量 986
1MB
21K SLoC
GitAR - Git所有远程仓库
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.com
或 github.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
- 您在一个功能分支中
- 提示分配用户
- 确认
- 打开合并请求
一图胜千言
支持的远程仓库
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