我的大多数Git回购都可以归类为github回购或公司回购,两者都有相当数量。显然,对于这两种不同的存储库,我需要使用不同的电子邮件地址。
我阅读了git manual并进行了大量搜索,发现只有两种方法可以配置用户电子邮件:全局和按回购。
因此,如果我想为这两种存储库使用不同的电子邮件地址,则有两种选择:
git config --global user.useConfigOnly true
强制输入都不令人满意:(
理想的解决方案可能看起来像url.insteadOf
[url "https://github"]
insteadOf = git://github
user_email = xxx@gmail.com
那么这种情况有什么解决办法吗?也许通过git hook或其他魔术?
注意:我的问题与this one完全不同,因为我需要自动切换,而不仅是逐个添加每个存储库配置。
答案 0 :(得分:1)
我不得不处理同样的问题,并找到了一种棘手的方法。小心使用。
所有技巧都与此命令有关:HOME=$var git <anything>
。
HOME=$var
切换命令的主目录。默认情况下,Git查找~/.gitconfig
,因此控制$HOME
就是控制~/.gitconfig
。
此外,Git配置文件允许包含其他Git配置文件,以“导入”它:
[include]
path = /path/to/.gitconfig
这意味着您可以使用别名和默认电子邮件设置“ 默认” ~/.gitconfig
,并添加“ 级别” ~/foo/.gitconfig
,{{ 1}}等,并管理“ 依赖项”。
这是我的脚本,请参阅recursive-gitconfig repository,但是出于SO的缘故,我更喜欢在此处添加它。
~/foo/bar/.gitconfig
它基本上找到了从<{1}降到# Look for closest .gitconfig file in parent directories
# This file will be used as main .gitconfig file.
function __recursive_gitconfig_git {
gitconfig_file=$(__recursive_gitconfig_closest)
if [ "$gitconfig_file" != '' ]; then
home="$(dirname $gitconfig_file)/"
HOME=$home "$(which git)" "$@"
else
"$(which git)" "$@"
fi
}
# Look for closest .gitconfig file in parents directories
function __recursive_gitconfig_closest {
slashes=${PWD//[^\/]/}
directory="$PWD"
for (( n=${#slashes}; n>0; --n ))
do
test -e "$directory/.gitconfig" && echo "$directory/.gitconfig" && return
directory="$directory/.."
done
}
alias git='__recursive_gitconfig_git'
的“ 最近” Git配置文件,并将./
设置为其目录。
更多文档here。
有了它,您应该能够根据您当前所在的位置来管理多个身份,ssh密钥等,因此,取决于您正在处理的存储库。
答案 1 :(得分:0)
名为 Conditional Includes 的新git功能(来自git 2.13)是关键。以下是我的解决方案:
import {NgModule} from '@angular/core';
import {
MatAutocompleteModule,
MatBadgeModule,
MatBottomSheetModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatGridListModule,
MatIconModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatTableDataSource,
MatPaginatorModule,
MatRadioModule,
MatTableModule,
MatPaginator,
} from '@angular/material';
@NgModule({
exports: [
MatAutocompleteModule,
MatBadgeModule,
MatBottomSheetModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatGridListModule,
MatIconModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatTableDataSource,
MatPaginatorModule,
MatRadioModule,
MatTableModule,
MatPaginator,
]
})
export class MaterialModule {}
此解决方案并不严格遵循我的要求(通过远程来源的repo url自动切换),但是如果您将存储库克隆到其他根目录中,则可以很好地发挥作用。
如果要强迫自己在回购根目录之外设置电子邮件,则只需在全局配置中设置$ cat ~/.gitconfig | head -5
[includeIf "gitdir:~/gh/**"]
path = ~/.github.gitconfig
[includeIf "gitdir:~/work/**"]
path = ~/.work.gitconfig
$ cat ~/.github.gitconfig
[user]
name = MyName
email = my-personal-emal@gmail.com
$ cat ~/.work.gitconfig
[user]
name = MyName
email = my-company-email@company.com
[init]
templatedir = ~/work/.gittemplates
,然后在条件包含的文件中将它们覆盖为useConfigOnly = true
。
希望这可以为您提供帮助:)