[解決済み] すべての子フォルダに対して git の設定値を設定する
質問
私は、ユーザーレベルの設定を上書きするレポ単位の設定を行うことが可能であることを知っています (すなわち
/path/to/my/repo/.gitconfig
を上書きする
~/.gitconfig
). あるフォルダのすべての子フォルダに対して、ユーザーレベルの設定をオーバーライドするようなgit configsを設定することは可能でしょうか?例えば、私は
|--topLevelFolder1
|--\
| ---.gitconfig_override
|--\
| ---childFolder1
| \---[...]
|--\
| ---childFolder2
| \---[...]
で定義された設定を
.gitconfig_override
で定義された設定を
childFolder1
と
childFolder2
.
私の動機は次のとおりです。私は仕事用のラップトップを持っていますが、空き時間には個人的なプロジェクトにも使用しています。私の仕事のコードはすべて 1 つのフォルダー内にネストされています。私が仕事の git リポジトリにプッシュするとき、私は仕事のペルソナ (名前の代わりに仕事のログイン、および仕事の電子メール) を使用してプッシュする必要があります。私自身の個人的な(github)リポジトリにプッシュするときは、私の本名と個人の電子メールで行いたいと思います。
私が考えた他の可能な解決策 (および問題点)。
- 仕事用と遊び用に別々のユーザーを作成し、それぞれのユーザー レベルの設定を適切に行い、コンテキストを切り替えるときに適切なユーザーとしてログインする (面倒ですが、切り替えるのを簡単に忘れてしまいます)。
- workFolder" 内の git リポジトリを検索し、適切な詳細を保持するためにそれらの .gitconfig ファイルを追加/更新するスクリプトを作成する (リポジトリを作成し、プッシュする前にスクリプトを実行することを忘れた場合、間違った人としてプッシュすることになります)。
- git がレポを作成するたびにファイルパスをチェックし、適切であれば .gitconfig ファイルを更新するように "hack" する (複雑で面倒、そしてほぼ確実に間違った方法 - 加えて、私にはどうすればいいか最初の手がかりもありません!)。
私は この質問 を確認しましたが、複数のレポではなく、単一のレポのための解決策しか含まれていないようです。願わくば、この質問を見逃した人が見てくれることを祈ります。
どのように解決するのですか?
によって述べられたように NateEagの編集 , git の 条件付きインクルード はこれに最適です。この回答は git < 2.13 を使っている人向けのものなので、より新しいバージョンを使っている人向けのものを紹介します。
まず、サブフォルダに反映させたい設定を記述した新しい設定ファイルをどこかに作成します。元の質問のフォルダーを参考にすると
~/topLevelFolder1/.gitconfig_include
で
~/.gitconfig
に、追加します。
[includeIf "gitdir:~/toplevelFolder1/"]
path = ~/topLevelFolder1/.gitconfig_include
の任意のサブフォルダ
~/topLevelFolder1
のサブフォルダには
~/toplevelFolder1/.gitconfig_include
- を手動で変更する必要はありません。
.git/config
を手動で変更する必要はありません。(これは
を上書きするわけではありません。
サブフォルダ設定にあるものを上書きするのではなく、単に
を追加します。
を追加するだけです("include" が意味するように)。
注意事項
-
この設定は
の後にあります。
で上書きしたい設定を
~/.gitconfig
というのもincludeIf
はその後に続くすべての設定によって再び上書きされるからです。 - この設定は、以下の場合にのみファイルを含めます。 リポジトリにある にいる場合のみです。リポジトリ以外のサブパスにいる場合は無視されます。
-
末尾のフォワードスラッシュ (
/
) を含むgitdir
の条件が重要です。 -
git config --list
はこれをテストするのに適しています。以下にオーバーライドがあることがわかるでしょう。includeIf
の行の下にあるオーバーライドが出力されます。また、特定のエントリーをチェックするには、例えばgit config --get user.email
-
で
Windows版Git
では、ユーザーディレクトリからの相対パスを
~/
で相対パスを、Windows 形式のドライブで絶対パスを指定します。C:/
のように、フォワードスラッシュのみを使用した絶対パスを指定します。バックスラッシュとUnixスタイルのマウントポイントである/c/
のようなバックスラッシュやUnixスタイルのマウントポイントは機能しません。さらにincludeIf
の部分では、比較のために正しい大文字と小文字のパスを指定する必要があります。 大文字小文字を区別します。 .
関連
-
なぜこのマージが必要なのかを説明するコミットメッセージを git に入力してください。
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] Git ですべてのリモートブランチをクローンする方法
-
[解決済み] git に自分の好きなエディタを使わせてコミットするにはどうしたらいいですか?
-
[解決済み] Git で現在のコミットのハッシュを取得する方法は?
-
[解決済み] マージされたGitブランチをすべて削除するにはどうすればよいですか?
-
[解決済み] すべてのgitサブモジュールの最新版を簡単にプルする方法
-
[解決済み] すべてのGitブランチを取得する方法
-
[解決済み] Gitのプッシュを正しく強制する方法は?
-
[解決済み] .gitconfigに自分用のユーザーを複数指定することはできますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[git push] 解決策: ! [リモート拒否] master -> master (受信前のフックは拒否されました)
-
gitlab をアップロード ! [リモート拒否] dev -> dev (受信前のフックが拒否されました)
-
解决[email protected]。パーミッションが拒否されました (publickey)。リモートリポジトリから読み取れませんでした
-
ファイル名が長すぎるため、作業ツリーをチェックアウトできない警告が表示されました。クローンには成功しましたが、チェックアウトに失敗しました。
-
[解決済み] .gitconfigに自分用のユーザーを複数指定することはできますか?
-
git のコンパイルとインストールの問題を解決する fatal: https のリモートヘルパーが見つからない
-
[解決済み】.gitconfigにファイルを含めることは可能ですか?
-
[解決済み] git diff を stdout に書き出すには?
-
[解決済み] なぜgit AuthorDateはCommitDateと違うのですか?
-
[解決済み] Gitで使用する秘密鍵の選択