51

私は2つの異なるgitメールを使用しています。1つは仕事用、もう1つは公開プロジェクト用です。当初、私はすべてのパブリックリポジトリが含まれるフォルダーに別の電子メールで別の.gitconfigを作成できると考えていました。そのgitはそれを尊重しますが、残念ながら機能しないようです。同様のものを簡単にセットアップするための最良の方法は何ですか?各公開リポジトリのメールアドレスを具体的に変更する必要はありません。

4

7 に答える 7

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 の誰かがより良いアイデアを持っていることを願っています...

于 2011-12-13T17:15:15.213 に答える
7

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"
}
于 2011-12-27T13:18:42.037 に答える
5

本当の答えはそれが不可能だということです。

ただし、@ 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;
}
于 2012-04-28T00:48:30.023 に答える
4

リポジトリを作成するための一元化されたメカニズムがあります。パスなどのスクリプトのように、次のことを行います。

repo create -t public -n name

またはそのようなもの。

repoコマンド(単なる例であり、Androidのコマンドとは関係ありません)は、必要な場所にリポジトリを作成し、構成ファイルを読み取り、そのリポジトリの資格情報を設定します(そのリポジトリの.git / configに)パブリックまたはプライベートなどのタイプに基づきます。

于 2011-12-13T18:04:18.000 に答える