在我的~/。gitconfig,我列出我的个人电子邮件地址下[用户],因为这是我想用于Github回购。

但是,我最近也开始在工作中使用git。我公司的git回购允许我提交,但是当它发出新的变更集通知时,它说它们来自匿名,因为它不识别我的.gitconfig中的电子邮件地址——至少,这是我的理论。

是否可以在.gitconfig中指定多个[用户]定义?或者是否有其他方法覆盖特定目录的默认.gitconfig ?在我的情况下,我检查了~/worksrc/中的所有工作代码-是否有一种方法只为该目录(及其子目录)指定.gitconfig ?


当前回答

或者您可以在本地的.git/config文件中添加以下信息

[user]  
    name = Your Name
    email = your.email@gmail.com

其他回答

在执行以下步骤之前,您必须有多个ssh密钥。这些可以使用here命令生成

步骤

转到c:\users\Your User\.ssh 触控配置 配置每个域的ssh密钥

使用gitbash去git repo。 配置用户名和名称每个回购"git config user.email="abc@gmail.com" 配置每个回购的名称。git config user.name="Mo Sh" 执行git命令。它会自动选择SSH密钥。

您可以将单个回购配置为使用覆盖全局配置的特定用户/电子邮件地址。从回购的根目录运行

git config user.name "Your Name Here"
git config user.email your@email.com

而缺省用户/电子邮件是在~/.gitconfig中配置的

git config --global user.name "Your Name Here"
git config --global user.email your@email.com

或者您可以在本地的.git/config文件中添加以下信息

[user]  
    name = Your Name
    email = your.email@gmail.com

可以有多种方法来做到这一点,但我通过下面的shell函数来实现这一点。

function gitprofile() { if [[ $1 == "private" ]]; then if grep -q "tom@workmail.com" "/Users/tomtaylor/.gitconfig"; then echo "Found in gitconfig. No action required." else echo "Found in gitconfig1" cp /Users/tomtaylor/.gitconfig /Users/tomtaylor/.gitconfig2 mv /Users/tomtaylor/.gitconfig1 /Users/tomtaylor/.gitconfig mv /Users/tomtaylor/.gitconfig2 /Users/tomtaylor/.gitconfig1 fi elif [[ $1 == "public" ]]; then if grep -q "tom@gmail.com" "/Users/tomtaylor/.gitconfig"; then echo "Found in gitconfig. No action required." else echo "Found in gitconfig1" cp /Users/tomtaylor/.gitconfig /Users/tomtaylor/.gitconfig2 mv /Users/tomtaylor/.gitconfig1 /Users/tomtaylor/.gitconfig mv /Users/tomtaylor/.gitconfig2 /Users/tomtaylor/.gitconfig1 fi }

比如,

gitprofile "public" ->这将切换到配置tom@gmail.com和

gitprofile "private" ->这会切换到tom@workmail.com。

将此函数添加到~/。Bash_profile或~/。ZSHRC基于您当前的终端偏好。重新启动终端或像这样编译脚本

. ~ / . bash_profile

使函数有效。希望能有所帮助!

我做了一个bash函数来处理这个。这是Github回购。

备案:

# 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 /usr/bin/git "$@"
    else
        /usr/bin/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'