35个版本 (10个稳定版本)
1.5.0 | 2024年8月5日 |
---|---|
1.4.0 | 2023年11月7日 |
1.3.0 | 2023年9月7日 |
1.2.1 | 2023年3月5日 |
0.4.1 | 2019年11月24日 |
#25 in 开发工具
每月 199 次下载
1MB
48K SLoC
git-workspace 🚀
如果你的公司有很多仓库,而且你的工作需要在这些仓库之间跳转,那么 git-workspace
可以通过以下方式节省你一些时间
- 轻松地将你的项目目录与 Github、Gitlab.com 或 Gitlab自托管 同步 🔧
- 保持项目名称一致,并位于正确的路径下 📁
- 自动设置分叉的上游 ⚡
- 将删除的仓库移动到存档目录 💾
- 让你能够立即访问任何仓库 :shipit
- 并行地对所有项目执行
git fetch
:godmode
这可能听起来没什么用,但“登录到你的Git提供程序,浏览到项目,复制克隆URL,设计一个合适的路径来克隆它”的舞蹈可能是一个很大的减速。这里唯一的明显解决方案是花比你在一生中花在做这件事上更多的时间,用Rust编写一个工具来为你做这件事。
目录
安装 💿
Homebrew (MacOS + Linux)
brewinstall git-workspace
Nix (MacOS + Linux)
nix-shell
nix-shell -p git-workspace
nix shell (Flakes)
nix shell nixpkgs#git-workspace
home-manager (home.nix)
{
home.packages = with pkgs; [
git-workspace
];
}
NixOS (configuration.nix)
{
environment.systemPackages = with pkgs; [
git-workspace
];
}
AUR (ArchLinux)
paru-S git-workspace
二进制文件 (Windows)
从GitHub发行页面下载最新版本。解压并将其移动到你的 PATH
目录。
Cargo
不要这样做,这非常慢:cargo install git-workspace
用法 🎷
Git真的很烦人,并且篡改了子命令的--help
标志。因此,要获取帮助,请使用git-workspace --help
,而不是git workspace --help
$ git-workspace --help
git-workspace 1.1.0
Tom Forbes <[email protected]>
Manage and update personal and work git repos from multiple providers
USAGE:
git-workspace --workspace <workspace> <SUBCOMMAND>
FLAGS:
-h, --help
Prints help information
-V, --version
Prints version information
OPTIONS:
-w, --workspace <workspace>
[env: GIT_WORKSPACE=/Users/tom/PycharmProjects/]
SUBCOMMANDS:
add Add a provider to the configuration
archive Archive repositories that don't exist in the workspace anymore
fetch Fetch new commits for all repositories in the workspace
help Prints this message or the help of the given subcommand(s)
list List all repositories in the workspace
lock Fetch all repositories from configured providers and write the lockfile
run Run a git command in all repositories
switch-and-pull Pull new commits on the primary branch for all repositories in the workspace
update Update the workspace, removing and adding any repositories as needed
定义你的工作空间
工作空间是git-workspace将为您管理的目录,用您提供者的项目填充它。要配置此设置,只需设置一个指向空目录的GIT_WORKSPACE
环境变量。例如
export GIT_WORKSPACE=~/projects
提供者凭证
GitHub和Gitlab都需要个人访问令牌才能访问其GraphQL端点。在此处创建访问令牌
-
Github: https://github.com/settings/tokens(只需
repo
范围) -
Gitlab: https://gitlab.com/profile/personal_access_tokens(只需
api
范围)
将这些令牌作为GITHUB_TOKEN
和GITLAB_TOKEN
导出到您的shell中。
添加提供者
您可以使用git workspace add
快速将条目添加到您的workspace.toml
-
克隆用户或组织的所有GitHub仓库
gitworkspace add github[USER OR ORG NAME]
-
排除特定仓库
gitworkspace add github[USER OR ORG NAME] --exclude="foo.*bar$" --exclude="(abc|def)"
-
从Gitlab克隆命名空间或用户
gitworkspace add gitlab gitlab-ce/gitlab-services
-
从自托管gitlab/github实例克隆
gitworkspace add gitlab my-company-group --url=https://internal-gitlab.company.com
gitworkspace add github user-or-org-name --url=https://internal-github.company.com/api/graphql
多个配置
Git工作空间将读取您$GIT_WORKSPACE目录下的任何
workspace*.toml
文件。
更新你的工作空间
运行git workspace update
将
- 从您的提供者获取所有仓库
- 克隆任何本地不存在的新仓库
- 将任何已删除的仓库移动到
$GIT_WORKSPACE/.archived/
以供将来参考
获取所有更改
git workspace fetch
将在所有项目上运行git fetch
切换项目 🔁
git workspace list
将输出您所有项目的名称。您可以将其与任何您希望的工具集成,以便快速搜索和选择仓库。
Fish,与fzf
以下 Fish Shell 段落提供了一个 open-project [search-string]
命令,您可以使用它来搜索和打开项目。它将 git workspace list
命令与 fzf
结合起来,并使用您的 $EDITOR
# ~/.config/fish/functions/open-project.fish
function open-project -d "Open a project"
set filter "$argv"
set chosen_project (git workspace list | fzf -q "$filter")
if string length -q -- $chosen_project
$EDITOR $GIT_WORKSPACE/$chosen_project
pushd $GIT_WORKSPACE/$chosen_project
end
end
Zsh,搭配 fzf
function project {
local filter="$@"
local chosen_project=$(git workspace list | fzf -q "$filter")
if [[ -n $chosen_project ]]; then
pushd "$GIT_WORKSPACE/$chosen_project"
fi
}
Bash,搭配 fzf
由用户 (@kreyren:github.com) 贡献
#!/bin/sh
# shellcheck shell=sh # Written to comply with IEEE Std 1003.1-2017 for standard POSIX environment
###! # WorkSPace (wsp)
###! Switches to specified git-workspace project directory
###! - Requires git and fzf
wsp() {
# Check for required non-standard commands
for command in ${FZF:-"fzf"} ${GIT:-"git"}; do
${COMMAND:-"command"} -v "$command" || { ${PRINTF:-"printf"} "FATAL: %s\\n" "Command '$command' is not executable"; ${EXIT:-"exit"} 127 ;}
done
# shellcheck disable=SC2086 # Harmless warning about missing double-quotes that are not expected to allow parsing multiple arguments
wsp_path="${1:-"${GTT_WORKSPACE:-"$PWD"}/$(${GIT:-"git"} workspace list | ${FZF:-"fzf"} ${fzf_arg:-"-q"} "$@")"}" # Path to the git workspace directory
# Change directory
${CD:-"cd"} "$wsp_path" || { printf "FATAL: %s\\n" "Unable to change directory to '$wsp_path'";}
}
请考虑使用 shfmt 来优化文件大小。
贡献 🐛
这是我第一个“真正的”Rust项目。如果您对Rust有经验,可能会对代码感到不适,但任何有助于我改进的反馈都将非常受感激!
如果您想贡献,那就去吧。cargo install
应该能让您准备就绪。请注意:目前没有测试 💣。我用 Github Actions 运行集成测试,但这就足够了。它在我的待办事项列表上,我保证 ™️。
依赖项
~20–31MB
~530K SLoC