すべての子フォルダのgit設定値を設定する 質問する

すべての子フォルダのgit設定値を設定する 質問する

リポジトリごとの設定でユーザーレベルの設定を上書きすることは可能です(つまり、/path/to/my/repo/.gitconfigオーバーライド~/.gitconfig)。特定のフォルダのすべての子フォルダのユーザーレベルの設定を上書きするgit設定を設定することは可能ですか?つまり、

|--topLevelFolder1
|--\
|   ---.gitconfig_override
|--\
|   ---childFolder1
|       \---[...]
|--\
|   ---childFolder2
|       \---[...]

そして、 で定義された設定をおよび.gitconfig_overrideに適用したいと思います。childFolder1childFolder2

これを実行する動機は次のとおりです。仕事用のラップトップがあり、余暇には個人的なプロジェクトにも使用しています。仕事用のコードはすべて 1 つのフォルダー内にネストされています。仕事用の Git リポジトリにプッシュするときは、仕事用のペルソナ (名前ではなく仕事用のログインと仕事用のメール アドレス) を使用する必要があります。自分の個人用 (github) リポジトリにプッシュするときは、本名と個人用のメール アドレスを使用します。

私が考えた他の解決策(および問題点):

  • 「仕事」と「遊び」用に別々のユーザーを作成し、ユーザー レベルの設定を適切に設定し、コンテキストを切り替えるときに適切なユーザーとしてログインします (面倒な上に、切り替えを忘れやすい)
  • 「workFolder」内の Git リポジトリを検索し、適切な詳細を保持するために .gitconfig ファイルを追加/更新するスクリプトを作成します (リポジトリを作成してプッシュする前にスクリプトを実行し忘れると、間違ったユーザーとしてプッシュすることになります)
  • リポジトリを作成するたびにファイルパスをチェックし、必要に応じて .gitconfig ファイルを更新するように git を「ハック」します (複雑で、面倒で、ほぼ間違いなく間違った方法であり、その方法の見当もつきません)。

私がチェックしましたこの質問、複数のリポジトリではなく単一のリポジトリに対するソリューションのみが含まれているようです。その質問を見逃した誰かがこの質問を見てくれることを願っています。

ベストアンサー1

前述の通りNateEag の編集、gitの条件付き包含これに最適です。この回答は git < 2.13 のユーザー向けのものなので、新しいバージョンを使用しているユーザー向けの回答を次に示します。

まず、サブフォルダで有効にしたい設定を含む新しい設定ファイルをどこかに作成します。元の質問のフォルダを使用して、たとえば次の場所にあるとします。~/topLevelFolder1/.gitconfig_include

~/.gitconfig以下を追加します:

[includeIf "gitdir:~/toplevelFolder1/"]
    path = ~/topLevelFolder1/.gitconfig_include

のサブフォルダには~/topLevelFolder1、 の設定が含まれるようになりました~/toplevelFolder1/.gitconfig_include。各サブフォルダのリポジトリで を手動で変更する必要はありません.git/config。(これはオーバーライドサブフォルダの設定にあるものは何でも追加「含める」という語が示す通り、それも含まれます。

ノート:

  • この設定内に~/.gitconfig上書きしたい設定は、includeIfその後に続く設定によって再度上書きされるためです。
  • この設定には、次の場合にのみファイルが含まれます。リポジトリ内指定されたパスの下にあります。リポジトリ以外のサブパスにいる場合は無視されます。
  • /条件内の末尾のスラッシュ ( )gitdirは重要です。
  • git config --listincludeIfこれをテストするには良いでしょう。出力の行の下に上書きが表示されます。また、例えば次のように特定のエントリをチェックすることもできます。git config --get user.email
  • の上Windows 用 Gitでは、ユーザーディレクトリからの相対パスを で指定し~/、絶対パスを などのWindowsスタイルのドライブで指定しC:/ます。スラッシュのみを使用します。バックスラッシュや などのUnixスタイルのマウントポイントは/c/機能しません。さらに、 のincludeIf部分では、比較が正しい大文字と小文字でパスを指定する必要があります。大文字と小文字を区別

おすすめ記事