#git-config #git-commit #programming #git-configuration #user #ssh #git-together

bin+lib git-together-ssh

在共享机器上进行配对编程时,实现无缝的 git 使用

3 个不稳定版本

0.2.1 2023年6月23日
0.2.0 2023年6月23日
0.1.1 2023年6月23日

#10 in #git-configuration

自定义许可证

37KB
800

git-together

在遵循 git-pairgit-duet 的同时,无需改变现有的 git 习惯。

此项目是 Pivotal Lab 的 git-together 的分支。

git-together-ssh 是对 git-together 的附加修改,增加了根据当前活跃用户选择和使用 SSH 证书的功能。所有配置都与 git-together 兼容,除了 ~/.zshrc 中的别名。

安装

brew tap --force-auto-update section-31/tap https://gitlab.com/section-31/homebrew-tap
brew install section-31/tap/git-together-ssh

配置

以下是配置 git-together-ssh 的一种方法,但由于它使用 git config 来存储信息,因此还有许多其他方法。这个特定的例子假设希望在一个 .git-together 文件中按仓库级别存储作者。

# `git-together-ssh` is meant to be aliased as `git`
alias git=git-together-ssh

# Use .git-together per project for author configuration 
git config --add include.path ../.git-together
# Or use one .git-together for all projects
git config --global --add include.path ~/.git-together

# Setting the default domain
git config --file .git-together --add git-together.domain rocinante.com

# Adding a couple authors
git config --file .git-together --add git-together.authors.jh 'James Holden; jholden'
git config --file .git-together --add git-together.authors.nn 'Naomi Nagata; nnagata'

# Adding an author with a different domain
git config --file .git-together --add git-together.authors.ca 'Chrisjen Avasarala; [email protected]'

为了与 zsh 完成匹配,您需要更新您的 .zshrc 以复制主 git 二进制文件中的现有完成规则

# initialize the compinit system if not already
autoload -U compinit
compinit

# tell zsh to use the completion setup for the git when using git-together
compdef git-together-ssh=git

使用

# Pairing
git with jh nn
# ...
git commit

# Soloing
git with nn
# ...
git commit

# Mobbing
git with jh nn ca
# ...
git commit

单人和小组模式会自动通过传递给 git with 的作者数量来设置。默认情况下,git-together-ssh 在提交后旋转作者,以便作者/提交者角色在配对/小组中随着时间的推移公平分配。

还支持别名。您可以通过配置以逗号分隔的别名列表来配置 git-together 使用提交命令的别名时执行其操作

git config git-together.aliases ci,rv,m
# ...
git ci

默认情况下,git-together 为单个本地仓库设置和旋转配对。如果您经常在多个仓库中使用配对,这可能很难在所有这些仓库中设置。可以通过传递 --global 标志来设置全局配对。默认情况下,git-together 仍将默认为本地仓库,因此如果您想从本地重置到全局,则可以使用 --clear 标志。

# Set for all repos
git with --global jh nn

# Override in single repo
git with nn

# Clear local and move back to global
git with --clear

技术细节

由于仓库级别的作者很常见,且在克隆仓库时没有好的方法配置 git config,因此 git-together 将自动包含 .git-togethergit config 中(如果存在)。(有关详细信息,请参阅 GitConfig::auto_include)。这使得 git-together 在克隆仓库后无需手动配置即可立即工作。

在内部,git-togethercommitmergerevert 子命令设置了 GIT_AUTHOR_NAMEGIT_AUTHOR_EMAILGIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL,以确保 git 提交具有正确的归属。此外,git-together 还将 --signoff 参数添加到 commitrevert 子命令中,以便提交消息包含 Signed-off-by: 行。

已知问题

git-together 通过别名化 git 本身来工作,因此将存在与 git 内置别名以及以相同方式工作的其他实用程序(如 Hub)相关的问题。

开发

Rust 版本

使用 rustup 工具安装 rust。由于需要构建 rust 的某些夜间功能,因此从 homebrew 安装将不会工作。

然后,使用以下命令切换到夜间版本:

rustup default nightly

Bats

Bats 是一个 bash 测试框架,在此用于集成测试。可以使用 homebrew 安装。

brew install bats

测试

cargo test
./bats/integration.bats

依赖关系

~11–20MB
~353K SLoC