私は2つの異なるgitメールを使用しています。1つは仕事用、もう1つは公開プロジェクト用です。当初、私はすべてのパブリックリポジトリが含まれるフォルダーに別の電子メールで別の.gitconfigを作成できると考えていました。そのgitはそれを尊重しますが、残念ながら機能しないようです。同様のものを簡単にセットアップするための最良の方法は何ですか?各公開リポジトリのメールアドレスを具体的に変更する必要はありません。
7 に答える
私はまったく同じ問題を抱えています。一時的な解決策として、私はこれを私の中に持っています.bashrc
:
alias git='GIT_AUTHOR_EMAIL=$(
p=$(pwd)
while [[ $p != "$HOME" ]]; do
[ -e $p/.gitemail ] && cat $p/.gitemail && break
p=$(dirname $p)
done) GIT_COMMITTER_EMAIL=$(
p=$(pwd)
while [[ $p != "$HOME" ]]; do
[ -e $p/.gitemail ] && cat $p/.gitemail && break
p=$(dirname $p)
done) /usr/bin/git'
alias g=git
このようにして.gitemail
、親ディレクトリに 2 つの異なるファイルがあります。
~/work/.gitemail
~/github/.gitemail
この方法で切り替えるだけであることに注意してください。user.email
他のすべては に集中してい~/.gitconfig
ます。それは解決策ですが、素晴らしいことではありません。
StackOverflow の誰かがより良いアイデアを持っていることを願っています...
ZSH に切り替えたので、これは、ディレクトリの変更でトリガーされる「プロファイル」を使用して問題を修正した解決策です。このソリューションの良い点は、他の設定に使用できることです。
これを zsh 設定に追加します。
#
# Thanks to: Michael Prokop.
# More documentation:
# http://git.grml.org/?p=grml-etc-core.git;f=etc/zsh/zshrc;hb=HEAD#l1120
#
CHPWD_PROFILE='default'
function chpwd_profiles() {
local -x profile
zstyle -s ":chpwd:profiles:${PWD}" profile profile || profile='default'
if (( ${+functions[chpwd_profile_$profile]} )) ; then
chpwd_profile_${profile}
fi
CHPWD_PROFILE="${profile}"
return 0
}
chpwd_functions=( ${chpwd_functions} chpwd_profiles )
chpwd_profile_default # run DEFAULT profile automatically
そして、zsh git カスタマイズの他の場所:
zstyle ':chpwd:profiles:/home/user/work(|/|/*)' profile work
zstyle ':chpwd:profiles:/home/user/fun(|/|/*)' profile fun
# configuration for profile 'default':
chpwd_profile_default()
{
[[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
print "chpwd(): Switching to profile: default"
export GIT_AUTHOR_EMAIL="default@example.com"
export GIT_COMMITTER_EMAIL="default@example.com"
}
# configuration for profile 'fun':
chpwd_profile_fun()
{
[[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
print "chpwd(): Switching to profile: $profile"
export GIT_AUTHOR_EMAIL="fun@example.com"
export GIT_COMMITTER_EMAIL="fun@example.com"
}
# configuration for profile 'work':
chpwd_profile_work()
{
[[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
print "chpwd(): Switching to profile: $profile"
export GIT_AUTHOR_EMAIL="work@example.com"
export GIT_COMMITTER_EMAIL="work@example.com"
}
本当の答えはそれが不可能だということです。
ただし、@ pithylessのおかげで、また、カスタムの「c」関数を使用してディレクトリを切り替えた後、autoを使用していls
たため、これが現在行っていることです。
# 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;
}
リポジトリを作成するための一元化されたメカニズムがあります。パスなどのスクリプトのように、次のことを行います。
repo create -t public -n name
またはそのようなもの。
repoコマンド(単なる例であり、Androidのコマンドとは関係ありません)は、必要な場所にリポジトリを作成し、構成ファイルを読み取り、そのリポジトリの資格情報を設定します(そのリポジトリの.git / configに)パブリックまたはプライベートなどのタイプに基づきます。