2016-07-06 7 views
0

私は仕事中のすべてのコミットに対してgitフックをグローバルに有効にしようとしています。私は仕事で私のすべてのコミットMSGは、対応するバグIDを持っていることを確認するために、これを有効にする複数のgithubインスタンスに基づいた異なるグローバルGit Initテンプレート設定

git config --global init.templatedir '~/.git_template' 

を設定することによって、これを達成しました。これは私が期待した通りに動作します。

私の個人的なgithubアカウントに何かをコミットしたいときに、私の欲しいものではないこれらのフックがトリガーされます。

どのようにこれらのグローバルテンプレートを特定のgithubインスタンスのみに制限できますか?私は$HOME/.ssh/configファイルを設定することでSSH鍵を分離することができました。ここでも同様のことが可能ですか?私が持っている

いくつかの制限:

  • サーバー側のフックが、私は手動で$REPO/.git/hooksフォルダを設定する必要がある場合、私は常にそれらを設定するために自分自身を思い出させるために持っているとして、それが目的に反し
  • 作業インスタンスで許可されていません

答えて

0

設定をローカルにリポジトリに設定したくないのですか?したがって、 - globalを行う代わりに、--localを実行するので、configオプションは2つのrepos間で異なります(2つの異なるrepos、仕事用と個人用/家庭用のものがあると仮定します)。

投稿者https://git-scm.com/docs/git-config::...書き込み時には、デフォルトでリポジトリのローカル設定ファイルに新しい値が書き込まれ、--system、 - global、--fileオプションを使用してその場所に書き込みます(--localと言うことができますが、これがデフォルトです)。書き込みオプションについて

--global

:、グローバル〜/ .gitconfigファイルではなく、リポジトリ.git/configのに書き込み、このファイルが存在する場合は$ XDG_CONFIG_HOME/gitの/ configファイルに書き込み、〜/。 gitconfigファイルはありません。

読み取りオプション:利用可能なすべてのファイルではなく、グローバル〜/ .gitconfigおよび$ XDG_CONFIG_HOME/git/configから読み取り専用です。書き込みオプションについて

--local

:リポジトリ.git/configファイルに書き込みます。これがデフォルト動作です。

読み取りオプション:使用可能なすべてのファイルではなく、リポジトリ.git/configからのみ読み取ります。これは心に来る取り組むしようとする

+0

答えていただきありがとうございますが、ローカルに設定することは避けようとしています。私の唯一のユースケースは、これをローカルにレポ用に設定しなかった場合です。通常は、コンポーネントの性質上、いくつかのreposを並行して作業します。私が探しているのは、1回のセットアップだけを行う必要があるときに、同じフックが実行されることを確認する方法です。それは可能ですか? – Raghuveer

+0

おそらく、.bash.historyファイルに格納されている最後のコマンドを解析して、プッシュしているリポジトリを調べることができます。私はあなたがそれをキャッシュするのではなく、コマンドごとに書き出すように履歴を変更する必要があると思います。 – DavidN

+0

興味深いアイデア。私もこれを試してみましょう。ポインタありがとう。 – Raghuveer

0

、いくつかの方法:

まず、あなたはそれぞれの環境にcloneまたはinitサブコマンドに異なる--template引数に沿って通過clone-personal、またはinit-workのような別のGitの別名を使用することができます。もちろん、普通のinitまたはcloneの代わりにこれらのエイリアスを使用することを忘れないでください。これは理想的ではありません。

クローニングの場合、渡されたURLを特定のパターンと照合して、それが作品かどうかを判断することで、上記の1つのステップをさらに進めることができます個人の住所を入力し、自動的に正しい--templateオプションを渡します。これにより、クローン作成に1つのスクリプト/エイリアスを使用できます。

エイリアスでシェルコマンドを実行している場合(またはgitエイリアスではなく別のシェルスクリプトを使用する場合)、環境内のすべてのものを見ることができます(たとえば$ PWDなど)。 "work"サブディレクトリか "personal"サブディレクトリ)、別の--templateオプションをgitに渡してください。次に、(各サブコマンドに対して)1つのエイリアス/スクリプト/ bash関数を使用できます。

作業と個人用のreposの間で異なっているかもしれない他の設定項目(フックに加えて)がある場合は、単純なオプションを使用してuser.email設定フィールドをグローバルに定義しないでください。この場合、gitは最初に試してみることを拒否し、user.email設定フィールドを定義する必要があります。次に、リポジトリ内で手動で実行するカスタムエイリアス/スクリプト/ bash関数を使用して、 '仕事'環境または「個人」環境用に設定することができます。たとえば、git-config-work bash関数をフックにコピーし、作業リポジトリのコミットにローカルでを設定することができます。

+0

提案をありがとう。これらは興味深いアプローチです。私はこれを試してみましょう。 – Raghuveer

+0

フックのコードにいくつかのロジックを追加しました。コミットメッセージに特定のキーワードがある場合、バグIDロジックを渡します。最適な方法ではなく、すばやく回避できます。 – Raghuveer

+0

プロジェクトを別のディレクトリ下に置くと、フックはリポジトリの場所や作業ディレクトリをチェックして、ロジックを適用するかどうかを決定できます。もう一つの選択肢... – jholtrop

関連する問題