私は学校のコンピューターで簡単なスクリプトを作成し、Gitへの変更をコミットしていました(自宅のコンピューターから複製された、ペンドライブにあるリポジトリ内)。何度かコミットした後、rootユーザーとしてコミットしていることに気づきました。
これらのコミットの作成者を私の名前に変更する方法はありますか?
私は学校のコンピューターで簡単なスクリプトを作成し、Gitへの変更をコミットしていました(自宅のコンピューターから複製された、ペンドライブにあるリポジトリ内)。何度かコミットした後、rootユーザーとしてコミットしていることに気づきました。
これらのコミットの作成者を私の名前に変更する方法はありますか?
注:この回答はSHA1を変更するため、すでにプッシュされているブランチで使用する場合は注意が必要です。名前のスペルを修正したり、古いメールを更新したりするだけの場合は、gitを使用すると、を使用して履歴を書き換えることなくこれを行うことができます.mailmap
。私の他の答えを参照してください。
あなたができる
git rebase -i -p <some HEAD before all of your bad commits>
次に、リベースファイルですべての不正なコミットを「編集」としてマークします。最初のコミットも変更する場合は、リベースファイルの最初の行として手動で追加する必要があります(他の行の形式に従います)。次に、gitが各コミットを修正するように要求したら、
git commit --amend --author "New Author Name <email@address.com>"
開いたエディタを編集するか、単に閉じてから、
git rebase --continue
リベースを続行します。
--no-edit
コマンドが次のようになるように追加することで、ここでエディターを完全に開くことをスキップできます。
git commit --amend --author "New Author Name <email@address.com>" --no-edit && \
git rebase --continue
一部のコメント提供者が指摘しているように、最新のコミットを変更したいだけの場合は、rebaseコマンドは必要ありません。ただやる
git commit --amend --author "New Author Name <email@address.com>"
これにより、作成者は指定された名前に変更されますが、コミッターはとで構成されたユーザーに設定されgit config user.name
ますgit config user.email
。コミッターを指定したものに設定する場合は、作成者とコミッターの両方が設定されます。
git -c user.name="New Author Name" -c user.email=email@address.com commit --amend --reset-author
私の最初の応答にはわずかな欠陥がありました。現在のHEAD
とあなたの間にマージコミットがある場合<some HEAD before all your bad commits>
、git rebase
それらはフラットになります(ちなみに、GitHubプルリクエストを使用すると、履歴に大量のマージコミットがあります)。これは非常に多くの場合、非常に異なる履歴につながる可能性があり(重複する変更は「リベース」される可能性があるため)、最悪の場合、git rebase
困難なマージの競合を解決するように求められる可能性があります(マージコミットですでに解決されている可能性があります) 。-p
解決策は、フラグtoを使用することgit rebase
です。これにより、履歴のマージ構造が保持されます。のマンページは、使用すると問題が発生する可能性がgit rebase
あることを警告していますが、-p
-i
BUGS
セクションには、「コミットの編集とコミットメッセージの言い換えは正常に機能するはずです」と書かれています。
-p
上記のコマンドに追加しました。最新のコミットを変更するだけの場合、これは問題ではありません。
--rebase-merges
の代わりに使用してください-p
(-p
非推奨であり、重大な問題があります)。
この回答
git-filter-branch
では、ドキュメントで次の警告が表示されるようになりました。git filter-branch には多くの落とし穴があり、意図した履歴の書き換えの明白でないマングリングを生成する可能性があります (パフォーマンスが非常に悪いため、そのような問題を調査する時間がほとんどない可能性があります)。これらの安全性とパフォーマンスの問題は下位互換性を保って修正できないため、その使用はお勧めしません。git filter-repoなどの別の履歴フィルタリング ツールを使用してください。それでも git filter-branch を使用する必要がある場合は、SAFETY (およびPERFORMANCE ) を注意深く読んで、filter-branch の地雷について学び、そこに記載されている危険をできるだけ合理的に回避してください。
作成者 (またはコミッター) を変更するには、すべての履歴を書き直す必要があります。それでも問題がなく、それだけの価値があると思われる場合は、git filter-branchをチェックしてください。man ページには、作業を開始するためのいくつかの例が含まれています。また、環境変数を使用して、作成者、コミッター、日付などの名前を変更できることにも注意してください。git man ページの「環境変数」セクションを参照してください。
具体的には、次のコマンドを使用して、すべてのブランチとタグの間違った作成者名と電子メールをすべて修正できます(ソース: GitHub ヘルプ):
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
代替履歴フィルタリング ツールgit filter-repoを使用するには、まずそれをインストールし、 gitmailmapgit-mailmap
の形式に従って を構築します。
Proper Name <proper@email.xx> Commit Name <commit@email.xx>
そして、作成したメールマップで filter-repo を実行します:
git filter-repo --mailmap git-mailmap
1 つのライナーですが、マルチユーザー リポジトリがある場合は注意してください。これにより、すべてのコミットが同じ (新しい) 作成者とコミッターを持つように変更されます。
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='new@email'; GIT_COMMITTER_NAME='Newname'; GIT_COMMITTER_EMAIL='new@email';" HEAD
文字列に改行がある場合 (これは bash で可能です):
git filter-branch -f --env-filter "
GIT_AUTHOR_NAME='Newname'
GIT_AUTHOR_EMAIL='new@email'
GIT_COMMITTER_NAME='Newname'
GIT_COMMITTER_EMAIL='new@email'
" HEAD
次のこともできます。
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
Windows コマンド プロンプトでこのコマンドを使用している場合は、"
代わりに次のコマンドを使用する必要があります'
。
git filter-branch --commit-filter "
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "$@";
else
git commit-tree "$@";
fi" HEAD
初期化されていない場合に発生します$HOME/.gitconfig
。これは次のように修正できます。
git config --global user.name "you name"
git config --global user.email you@domain.com
git commit --amend --reset-author
gitバージョン1.7.5.4でテスト済み。
これは最後のコミットのみを修正することに注意してください。
上位のいくつかのコミットだけに悪い作成者がいる場合は、次のように、コマンドとコミットgit rebase -i
を使用して内部でこれをすべて行うことができます。exec
--amend
git rebase -i HEAD~6 # as required
コミットの編集可能なリストが表示されます。
pick abcd Someone else's commit
pick defg my bad commit 1
pick 1234 my bad commit 2
次に、exec ... --author="..."
作成者が悪いすべての行の後に行を追加します。
pick abcd Someone else's commit
pick defg my bad commit 1
exec git commit --amend --author="New Author Name <email@address.com>" -C HEAD
pick 1234 my bad commit 2
exec git commit --amend --author="New Author Name <email@address.com>" -C HEAD
エディターを保存して終了します (実行します)。
このソリューションは、他のいくつかのソリューションよりも入力に時間がかかる場合がありますが、高度に制御可能です。どのコミットがヒットするかを正確に知っています。
インスピレーションをくれた @asmeurer に感謝します。
単一のコミットの場合:
git commit --amend --author="Author Name <email@address.com>"
(asmeurerの回答から抜粋)
Github には、次のシェル スクリプトである優れたソリューションがあります。
#!/bin/sh
git filter-branch --env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [ "$GIT_COMMITTER_EMAIL" = "your@email.to.match" ]
then
cn="Your New Committer Name"
cm="Your New Committer Email"
fi
if [ "$GIT_AUTHOR_EMAIL" = "your@email.to.match" ]
then
an="Your New Author Name"
am="Your New Author Email"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'
docgnome が述べたように、履歴の書き換えは危険であり、他の人のリポジトリを破壊します。
ただし、本当にそれを実行したい場合で、bash 環境 (Linux では問題ありません。Windows では、git のインストールで提供される git bash を使用できます) を使用している場合は、git filter-branchを使用します。
git filter-branch --env-filter '
if [ $GIT_AUTHOR_EMAIL = bad@email ];
then GIT_AUTHOR_EMAIL=correct@email;
fi;
export GIT_AUTHOR_EMAIL'
スピードアップするために、書き換えたいリビジョンの範囲を指定できます。
git filter-branch --env-filter '
if [ $GIT_AUTHOR_EMAIL = bad@email ];
then GIT_AUTHOR_EMAIL=correct@email;
fi;
export GIT_AUTHOR_EMAIL' HEAD~20..HEAD
これをエイリアスとして使用できるため、次のことができます。
git change-commits GIT_AUTHOR_NAME "old name" "new name"
または最後の10回のコミットの場合:
git change-commits GIT_AUTHOR_EMAIL "old@email.com" "new@email.com" HEAD~10..HEAD
〜/ .gitconfigに追加します:
[alias]
change-commits = "!f() { VAR=$1; OLD=$2; NEW=$3; shift 3; git filter-branch --env-filter \"if [[ \\\"$`echo $VAR`\\\" = '$OLD' ]]; then export $VAR='$NEW'; fi\" $@; }; f "
ソース:https ://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig
お役に立てば幸いです。
マージされていないコミットを別の作成者から引き継ぐ場合、これを処理する簡単な方法があります。
git commit --amend --reset-author
これは、@Brian のバージョンのより精巧なバージョンです。
作成者とコミッターを変更するには、これを行うことができます (bash で可能な文字列の改行を使用):
git filter-branch --env-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old name>" ];
then
GIT_COMMITTER_NAME="<New name>";
GIT_COMMITTER_EMAIL="<New email>";
GIT_AUTHOR_NAME="<New name>";
GIT_AUTHOR_EMAIL="<New email>";
fi' -- --all
次のいずれかのエラーが発生する場合があります。
これらのエラーにもかかわらず実行を強制したい場合は、次の--force
フラグを追加します。
git filter-branch --force --env-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old name>" ];
then
GIT_COMMITTER_NAME="<New name>";
GIT_COMMITTER_EMAIL="<New email>";
GIT_AUTHOR_NAME="<New name>";
GIT_AUTHOR_EMAIL="<New email>";
fi' -- --all
-- --all
このオプションについて少し説明が必要かもしれません: これにより、すべての参照(すべてのブランチを含む) のすべてのリビジョンでフィルターブランチが機能します。これは、たとえば、タグも書き換えられ、書き換えられたブランチで表示されることを意味します。
よくある「間違い」は、代わりに使用することです。これは、現在のブランチHEAD
だけですべてのリビジョンをフィルタリングすることを意味します。そして、書き換えられたブランチにはタグ (または他の参照) が存在しません。
唯一の問題が、作成者/電子メールが通常と異なることである場合、これは問題ではないことを指摘しておく必要があります。正しい修正は、次.mailmap
のような行でディレクトリのベースに呼び出されるファイルを作成することです
Name you want <email you want> Name you don't want <email you don't want>
それ以降、コマンド likegit shortlog
は、これらの 2 つの名前を同じものと見なします (そうしないように特に指示しない限り)。詳細については、 http://schacon.github.com/git/git-shortlog.htmlを参照してください。
これには、アップストリームがある場合に問題を引き起こす可能性のある履歴を書き換える必要がないという点で、ここにある他のすべてのソリューションの利点があり、常に誤ってデータを失う良い方法です。
もちろん、あなたが何かを自分自身としてコミットし、それが実際には他の誰かであるべきであり、この時点で履歴を書き換えてもかまわない場合、コミットの作成者を変更することは、帰属の目的のためにおそらく良い考えです (その場合、私はあなたを私のその他の回答はこちら)。
走るgit rebase -i <sha1 or ref of starting point>
変更したいすべてのコミットをマークしますedit
(またはe
)
すべてのコミットを処理するまで、次の 2 つのコマンドをループします。
git commit --amend --reuse-message=HEAD --author="New Author <new@author.email>"
;
git rebase --continue
これにより、他のすべてのコミット情報 (日付を含む) が保持されます。この--reuse-message=HEAD
オプションは、メッセージ エディターが起動しないようにします。
以下を使用して、タグとすべてのブランチを含むリポジトリ全体の作成者を書き換えます。
git filter-branch --tag-name-filter cat --env-filter "
export GIT_AUTHOR_NAME='New name';
export GIT_AUTHOR_EMAIL='New email'
" -- --all
次に、filter-branch の MAN ページで説明されているように、バックアップされたすべての元の参照を削除しますfilter-branch
(これは破壊的であり、最初にバックアップします)。
git for-each-ref --format="%(refname)" refs/original/ | \
xargs -n 1 git update-ref -d
シンプルなものを取り込むことで機能するこのソリューションを採用しました(フォーマットはgit-cvsimportauthor-conv-file
のものと同じです)。すべてのブランチで定義されているすべてのユーザーを変更することで機能します。author-conv-file
これを組み合わせて使用してcvs2git
、リポジトリを cvs から git に移行しました。
すなわちサンプルauthor-conv-file
john=John Doe <john.doe@hotmail.com>
jill=Jill Doe <jill.doe@hotmail.com>
スクリプト:
#!/bin/bash
export $authors_file=author-conv-file
git filter-branch -f --env-filter '
get_name () {
grep "^$1=" "$authors_file" |
sed "s/^.*=\(.*\) <.*>$/\1/"
}
get_email () {
grep "^$1=" "$authors_file" |
sed "s/^.*=.* <\(.*\)>$/\1/"
}
GIT_AUTHOR_NAME=$(get_name $GIT_COMMITTER_NAME) &&
GIT_AUTHOR_EMAIL=$(get_email $GIT_COMMITTER_NAME) &&
GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME &&
GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL &&
export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&
export GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL
' -- --all
特に他の開発者からのパッチをコミットする場合、これは本質的に彼らのコードを盗むでしょう。
以下のバージョンはすべてのブランチで機能し、それを防ぐために作成者とコミッターを別々に変更します。
すべてのオプションについてleif81に敬意を表します。
#!/bin/bash
git filter-branch --env-filter '
if [ "$GIT_AUTHOR_NAME" = "<old author>" ];
then
GIT_AUTHOR_NAME="<new author>";
GIT_AUTHOR_EMAIL="<youmail@somehost.ext>";
fi
if [ "$GIT_COMMITTER_NAME" = "<old committer>" ];
then
GIT_COMMITTER_NAME="<new commiter>";
GIT_COMMITTER_EMAIL="<youmail@somehost.ext>";
fi
' -- --all
このリポジトリの唯一のユーザーである場合は、( svick が書いたように) または/ plus フィルター スクリプト ( docgnome answerで参照されている記事で説明されているように)、または Interactive rebaseを使用して履歴を書き換えることができます。しかし、どちらも最初に変更されたコミット以降のリビジョンを変更します。これは、ブランチの事前書き換えに基づいて変更を行った人にとっては問題です。git filter-branch
git fast-export
git fast-import
回復
他の開発者が書き直し前のバージョンに基づいて作業していない場合、最も簡単な解決策は再クローン (再度クローン) です。
またはgit rebase --pull
、リポジトリに変更がなければ早送りするか、書き換えられたコミットの上にブランチをリベースします (マージは避けたいです。書き換え前のコミットが永久に保持されるためです)。これはすべて、彼らが仕事をしていないことを前提としています。それ以外の場合は、変更を隠しておくために使用git stash
します。
他の開発者が機能ブランチを使用している場合、および/またはgit pull --rebase
アップストリームが設定されていないなどの理由で機能しない場合、書き換え後のコミットの上に自分の作業をリベースする必要があります。たとえば、新しい変更 ( git fetch
)をフェッチした直後に、 にmaster
基づく / からフォークされたブランチの場合、次origin/master
を実行する必要があります。
$ git rebase --onto origin/master origin/master@{1} master
origin/master@{1}
これは書き換え前の状態 (フェッチ前)です。 gitrevisionsを参照してください。
別の解決策は、バージョン 1.6.5 以降の Git で利用可能なrefs/replace/メカニズムを使用することです。このソリューションでは、電子メールが間違っているコミットの代替を提供します。その場合、「置換」参照 ( fetch = +refs/replace/*:refs/replace/*
refspec の適切な場所にある refspec のようなもの) をフェッチする人は誰でも透過的に置換を取得し、それら .git/config
の参照をフェッチしない人は古いコミットを見ることになります。
手順は次のようになります。
たとえば、次を使用して、間違った電子メールですべてのコミットを検索します
$ git log --author=user@wrong.email --all
間違ったコミットごとに、代わりのコミットを作成し、それをオブジェクト データベースに追加します。
$ git cat-file -p <ID of wrong commit> |
sed -e 's/user@wrong\.email/user@example.com/g' > tmp.txt
$ git hash-object -t commit -w tmp.txt
<ID of corrected commit>
git replace
オブジェクト データベースのコミットを修正したので、次のコマンドを使用して、間違ったコミットを修正したコミットに自動的かつ透過的に置き換えるように git に指示する必要があります。
$ git replace <ID of wrong commit> <ID of corrected commit>
最後に、すべての交換をリストして、この手順が成功したかどうかを確認します
$ git replace -l
交換が行われるかどうかを確認します
$ git log --author=user@wrong.email --all
git replace
もちろん、この手順を自動化することもできます...まあ、 (まだ)バッチモードを持っていない使用を除くすべてなので、そのためにシェルループを使用するか、「手動で」置き換える必要があります。
未検証!YMMV。
メカニズムを使用するときに、いくつかの荒いコーナーに遭遇する可能性があることに注意してくださいrefs/replace/
: それは新しいものであり、まだ十分にテストされていません。
修正したいコミットが最新のもので、ほんの数個である場合は、 と の組み合わせを使用してgit reset
、git stash
正しい名前と電子メールを構成した後に再度コミットすることができます。
シーケンスは次のようになります (2 つの間違ったコミットの場合、保留中の変更はありません)。
git config user.name <good name>
git config user.email <good email>
git reset HEAD^
git stash
git reset HEAD^
git commit -a
git stash pop
git commit -a
インタラクティブなリベースを使用すると、変更する各コミットの後に修正コマンドを配置できます。例えば:
pick a07cb86 Project tile template with full details and styling
x git commit --amend --reset-author -Chead
あなたの問題は本当に一般的です。「Mailmap を使用して Git の作成者リストを修正する」を参照してください。
簡単にするために、プロセスを簡単にするスクリプトを作成しました: git-changemail
そのスクリプトをパスに配置した後、次のようなコマンドを発行できます。
現在のブランチで著者の一致を変更する
$ git changemail -a old@email.com -n newname -m new@email.com
<branch> と <branch2> の作成者とコミッターの一致を変更します。filter-branch に渡し-f
て、バックアップの書き換えを許可します
$ git changemail -b old@email.com -n newname -m new@email.com -- -f <branch> <branch2>
リポジトリに既存のユーザーを表示する
$ git changemail --show-both
ところで、変更を行った後、次のようにフィルターブランチからバックアップを消去します: git-backup-clean
EGit で Eclipse を使用している場合は、非常に簡単な解決策があります。
仮定: ローカル ブランチ 'local_master_user_x' に、無効なユーザーのためにリモート ブランチ 'master' にプッシュできないコミットがあります。
本日、作成者名の UTF8 文字がビルド サーバーで問題を引き起こすという問題が発生したため、これを修正するために履歴を書き直す必要がありました。実行された手順は次のとおりです。
ステップ 2: 次の bash スクリプトを実行します。
#!/bin/sh
REPO_URL=ssh://path/to/your.git
REPO_DIR=rewrite.tmp
# Clone the repository
git clone ${REPO_URL} ${REPO_DIR}
# Change to the cloned repository
cd ${REPO_DIR}
# Checkout all the remote branches as local tracking branches
git branch --list -r origin/* | cut -c10- | xargs -n1 git checkout
# Rewrite the history, use a system that will preseve the eol (or lack of in commit messages) - preferably Linux not OSX
git filter-branch --env-filter '
OLD_EMAIL="me@something.com"
CORRECT_NAME="New Me"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
fi
' --tag-name-filter cat -- --branches --tags
# Force push the rewritten branches + tags to the remote
git push -f
# Remove all knowledge that we did something
rm -rf ${REPO_DIR}
# Tell your colleagues to `git pull --rebase` on all their local remote tracking branches
簡単な概要: リポジトリを一時ファイルにチェックアウトし、すべてのリモート ブランチをチェックアウトし、履歴を書き換えるスクリプトを実行し、新しい状態を強制的にプッシュし、変更を取得するためにリベース プルを行うように同僚全員に伝えます。
これを OS X で実行すると、コミット メッセージの行末が何らかの形で台無しになり、後で Linux マシンで再実行する必要がありました。
あなたがこのレポの唯一のユーザーである場合、または他のユーザーのレポを壊す可能性を気にしない場合は、はい。これらのコミットをプッシュし、他の場所からアクセスできる場所に存在する場合は、他の人のリポジトリを壊すことを気にしない限り、いいえ。問題は、これらのコミットを変更すると、新しい SHA が生成され、異なるコミットとして扱われることになります。他の誰かがこれらの変更されたコミットを取り込もうとすると、履歴が異なり、カブームになります。
このページhttp://inputvalidation.blogspot.com/2008/08/how-to-change-git-commit-author.htmlでその方法を説明しています。(私はこれを試していないのでYMMV)
git rebase -i YOUR_FIRTS_COMMIT_SHA^
while true; do git commit --amend --author="Name Surname <email@example.com>" --no-edit && git rebase --continue; done
リベースが完了したら ^C # を押します (ループは最後のコミットを更新し続けます)
上記のすべての回答は、リポジトリの履歴を書き換えます。変更する名前が複数の作成者によって使用されていない限り、特にリポジトリが共有されていてコミットが古い場合は、 https://git-scm.com/docs/git-.mailmap
に記載されている を使用することをお勧めしますショートログ。リポジトリの履歴を変更せずに、間違った名前/メールを正しいものにマッピングできます。次のような行を使用できます。
Proper Name <proper@email.xx> <root@localhost>
Windows の下にある場合は、git-rocket-filterツールを使用することもできます。
ドキュメントから:
コミットの作成者名と電子メールを変更します。
git-rocket-filter --branch TestBranch --commit-filter '
if (commit.AuthorName.Contains("Jim")) {
commit.AuthorName = "Paul";
commit.AuthorEmail = "paul@company.com";
}
これはあなたの質問に対する回答ではなく、将来これを回避するために使用できるスクリプトです。Git バージョン 2.9以降で使用可能なグローバル フックを利用して、次のディレクトリに基づいて電子メールの構成をチェックします。
#!/bin/sh
PWD=`pwd`
if [[ $PWD == *"Ippon"* ]] # 1)
then
EMAIL=$(git config user.email)
if [[ $EMAIL == *"Work"* ]] # 2)
then
echo "";
else
echo "Email not configured to your Work email in the Work directory.";
git config user.email "youremail@youremail.com"
echo "Git email configuration has now been changed to \"$(git config user$
echo "\nPlease run your command again..."
echo ''
exit 1
fi;
elif [[ $PWD == *"Personal"* ]]
then
EMAIL=$(git config user.email)
if [[ $EMAIL == "youremail@youremail.com" ]]
then
echo "";
else
echo "Email is not configured to your personal account in the Personal di$
git config user.email "youremail@youremail.com"
echo "Git email configuration has now been changed to \"$(git config user$
echo "\nPlease run your command again..."
echo ''
exit 1;
fi;
fi;
現在の作業ディレクトリをチェックし、git が正しい電子メールに設定されていることを確認します。そうでない場合は、自動的に変更されます。詳細はこちらをご覧ください。