# cd + ls, and change git email when in personal projects folder
function c {
if [[ "`abspath $1`" == *"$HOME/Projects"* ]]; then
export GIT_AUTHOR_EMAIL="personal@gmail.com"
else
export GIT_AUTHOR_EMAIL="me@work.com"
fi
cd "${@:-$HOME}" && ls;
}
# 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'
7条答案
按热度按时间pnwntuvh1#
自git2.13以来,最好的方法是使用条件包含。
示例(摘自答案here):
全局配置~/.gitconfig
工作特定配置~/work/.gitconfig
8fq7wneg2#
正如在其他答案中提到的,你不能为每个目录设置凭证,但是git允许你为每个仓库设置凭证。
这样,在你第一次提交时,你会得到一个错误提示,要求你提供名字和邮箱。在你的repo文件夹中,将你的凭据once添加到你的repo中,从那时起,你将使用这个身份提交:
v1l68za43#
我遇到了完全相同的问题。作为临时解决方案,我在我的
.bashrc
中有以下内容:这样,我在父目录中就有了两个不同的
.gitemail
文件:~/work/.gitemail
~/github/.gitemail
注意,我只是用这种方式切换
user.email
,其他所有东西都集中在~/.gitconfig
中。这是一个解决方案,但并不好。希望StackOverflow上的人有更好的主意...
qxgroojn4#
切换到ZSH后,这是我修改后的使用“配置文件”在目录更改时触发的问题的解决方案。这个解决方案的好处是它可以用于其他设置。
把这个放到你的zsh配置中:
然后在zsh git定制的其他地方:
krugob8w5#
有一个集中的机制来创建回购协议。就像你的路径中的一些脚本等,你可以:
或者类似的东西。
repo命令(只是一个例子,与Android中的命令无关)将在必要的位置为您创建repo,读取配置文件,并根据类型是public还是private等为该repo设置凭据(在该repo的. git/config中)。
oiopk7p56#
真实的的答案是不可能的。
然而,多亏了@pithyless,而且因为我 * 已经 * 使用了一个自定义的'c'函数来切换目录,后面跟着一个auto
ls
,这就是我现在所做的:xoshrz7s7#
我也有同样的需求,但我希望所有的.gitconfig部分都可以被覆盖,而不仅仅是user.email和user.name。
因为我什么都没找到我做了这个:https://github.com/arount/recursive-gitconfig
以下是 * 当前 * 代码,但请参考github源代码以获取最新更新:
这允许我使用特定的.gitconfig,这取决于我使用的是什么仓库。
希望这能帮助你们中的一些人