在我的.zshrc
文件中,我有一个基于当前路径设置环境变量的chpwd
函数GIT_CONFIG
。
像这样的东西:
update_gitconfig() {
if [[ "$(pwd | grep -Poe '^/home/user/repositories/user-A(/|$)')" != "" ]]
then
export GIT_CONFIG="$HOME/.gitconfig-A"
return
fi
if [[ "$(pwd | grep -Poe '^/home/user/repositories/user-B(/|$)')" != "" ]]
then
export GIT_CONFIG="$HOME/.gitconfig-B"
return
fi
export GIT_CONFIG="$HOME/.gitconfig-default"
}
update_gitconfig
chpwd_functions+=(update_gitconfig)
Run Code Online (Sandbox Code Playgroud)
如果我运行git config --list
,它会在每个目录下显示预期的配置:
$HOME/repositories/user-A
它下面显示来自 的设置$HOME/.gitconfig-A
。$HOME/repositories/user-B
它下面显示来自 的设置$HOME/.gitconfig-B
。$HOME/.gitconfig-default
.当我运行时,问题就开始了git commit
;它似乎没有得到设置:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'user@host.(none)')
Run Code Online (Sandbox Code Playgroud)
所以,问题是:
有没有办法强制git commit
从$GIT_CONFIG
文件中获取信息?
注意:我知道我可以git config
在chpwd
钩子中运行命令来自动将本地设置应用于每个存储库,但我正在寻找一种更“优雅”的方式。
小智 2
Git v1.6.0 发行说明包含一条线索:
GIT_CONFIG, which was only documented as affecting "git config", but
actually affected all git commands, now only affects "git config".
Run Code Online (Sandbox Code Playgroud)
git v1.8.2 修复了git clone
仍然受到影响的命令的新行为。
我感兴趣的解决方法是:
su
命令行工具可以提供帮助)。alias gitcommit='git commit --author=$(git config user.email)'
(ugly)这样的别名。~/.gitconfig
通过环境变量覆盖进行虚假查找HOME
。例如:HOME=~/.gitconfig/user-a/ git commit
应该阅读~/.gitconfig/user-a/.gitconfig
(可能有一些其他副作用)。另外,如果您使用chpwd
zsh hook,请注意支持在多个存储库中运行的多个 zsh。
归档时间: |
|
查看次数: |
1048 次 |
最近记录: |