Windowsでの.gitconfigの場所の変更


105

Windowsのデフォルトでは、Gitはグローバル.gitconfigを c:\documents and settings\user\

.gitconfigが格納されるようにその位置を変更するにはどうすればよいc:\my_configuration_files\ですか?

それはまったくできますか?


私もこれに遭遇していると付け加えたかっただけです。%userprofile%/。git / .gitignore(つまりフォルダー内)に他のすべてのグローバルgit構成要素( "exludesfiles"と "attrirutesfile")がありますが、それらのすぐ隣にある.gitconfigが好きです、ただし%userprofile%のルートにある必要があります..本当に迷惑です。
WORMSS 2014年

6
質問されてからの進捗状況は?私の.gitconfigはデフォルトでネットワークドライブにあります。つまり、オフラインのときは.gitconfigはそれを読み取ることができません。
Lech Rzedzicki

回答:


67

に設定HOMEするc:\my_configuration_files\と、gitはそこに.gitconfigを配置します。ここでは、環境変数の編集について説明します。HOME変数を設定してから、cmd.exeウィンドウを再度開く必要があります。「set」コマンドを使用して、HOMEが実際に正しい値を指していることを確認します。

もちろん、HOMEを変更すると他のアプリケーションにも影響します。ただし、gitのソースコードを読み取ることから、それがコマンドラインを調整する必要なしにこれらのファイルの場所を変更する唯一の方法のようです。Stefanの応答も考慮する必要があります。GIT_CONFIG変数を設定できます。ただし、必要な効果を与えるには、--globalすべてのgit呼び出しにフラグを渡す必要があります(さらに、ローカルの.git / configファイルは無視されます)。


2
うーん、正しく理解したかどうかはわかりませんが、HOMEを変更しないと、HOMEを使用する他のすべてのアプリケーションにも影響がありますか?ホームを変更する方法はありませんが、Gitに対してローカルですか?
2010年

はい、他のアプリケーションにも影響があります。あなたは場所を変える方法を尋ねました、そして私はあなたに言いました。私の編集を参照してください。
Martin v。Löwis

10
誰かが実際にこれを動かして、移動するHOMEの副作用が他のすべての負荷を混乱させることなく持っていますか?
Ade Miller

これは、おそらくWindowsプラットフォームで機能するソリューションです。それも私のために働いた。Chocolateyのrefreshenvスクリプトを使用して、設定した環境変数HOME(ユーザー環境変数)を更新しました。その後、目的のファイルの場所を取得しました。
Tore Aurstad

これを機能させるには、Gitを再インストールする必要がありました。HOMEという名前の新しい環境変数を追加し、.gitconfigファイルをそのディレクトリに移動しただけでは、機能しませんでした。
Csaba

46

これに対するHOMEディレクトリの変更は間違っています。HOMEディレクトリへのgitconfigのシンボリックリンクを作成することをお勧めします。

  1. .gitconfigをユーザーのホームディレクトリから目的のディレクトリに移動します。
  2. 管理者としてコマンドラインを実行する
  3. ユーザーのホームディレクトリに移動します
  4. mklink .gitconfig \ PathForNewLocationOfConfig.gitconfigと入力します

9
git config --globalを実行して項目をconfigに追加すると、シンボリックリンクが、使用されている.gitconfigの実際のコピーで上書きされるので、追加する価値があるかもしれません。\ PathForNewLocationOfConfig.gitconfigが私のDropboxフォルダーである場所をテストしているときにこの問題に遭遇しました
MotoWilliams

8
.gitconfigがネットワークドライブにある場合、このオプションを除外する「デバイスはシンボリックリンクをサポートしていません」というメッセージが表示されることがあります。
正午、

4
この解決策は誰にとってもうまくいくとは思いません。当社で$HOMEは、ネットワークドライブ上にあり、ネットワーク接続に問題がある場合は常に、リンクにも到達できません。
andreee

1
@MotoWilliamsが2017年にこれを再訪:
Snake

2
ここで、グループポリス(AD)はHOMEDRIVE、HOMEPATH、およびHOMESHAREを設定しますが、プレーンで古くてシンプルなHOMEは設定しません。HOMEがない場合、gitは前の3つの組み合わせを使用しているようです。ただし、(ユーザー固有の環境変数を設定するための通常の方法で)HOMEを設定すると機能します。GITは設定したHOME値を使用し、グループポリシーはHOMEを上書きしません。
David I. McIntosh

29

この問題は、他の構成ファイルでの作業とは少し異なるアプローチを使用して解決しました。 Git Configは、別の場所にある構成ファイルを指すことができるインクルードをサポートしいます。次に、その代替の場所がインポートされ、.gitconfigファイルの一部であるかのように展開されます。だから今私は.gitconfigに単一のエントリを持っています:

[include]
   path = c:\\path\\to\\my.config

Gitが.gitconfigファイルに書き込んだ更新は、インクルードパスを上書きしません。これは、時々、.gitconfigからmy.configに値を移動する必要があることを意味します。


+1:奇妙な設定はなく、私のグローバルgitconfigは私がgitリポジトリ自体に保存しているものなので、そこに何があるかを追跡します。グローバルな変更を行う場合は、グローバルファイルを手動で編集します。したがって、これは私にとって完全に機能し、「HOME」環境変数を変更するような奇妙なことを必要としません。これは、Gitの構成を必要な場所に取得するためだけに奇妙なアイデアです。結局のところ、ホームディレクトリは他の多くのプログラムにとって他の意味を持っています。また、このソリューションを使用すると、異なるIDを上部に配置し、キー設定をID間で同じに保つことができます。優れた!
user62177541

2
代わりにgit configが[include] dファイルのファイルに書き込むことができるかどうか疑問に思います。
Jonathan Nazario 2017

1
@JonathanNazariogit config --file "included.file"
Pero P.


11

私はGitマスターではありませんが、私にとって最も簡単に機能するソリューションを探してみるC:\Program Files (x86)\Git\etcprofile、テキストエディターにアクセスして開くだけでした。

if37行目にステートメントがあり# Set up USER's home directoryます。ifステートメントを取り出して、gitconfigにしたいローカルディレクトリに置き、既存のgitconfigファイル(ネットワークドライブ上)をその場所にコピーしました。


トンありがとう。他のすべてのオプションが私のために失敗したが、これはちょうど私を救っ万人gitの文は、6秒を掛けた:ここでDは、私がやった... `HOME =「$ USERPROFILE \ダウンロード\ツール\ Git_Config」`である
PravyNandas

2
「ホーム」という単語(またはあなたに似ているもの:37)は、git 2.24(2019年12月)には存在しません。
Frank Nocke

6

私にとって、(少なくともgit-guiの)開始場所を変更しても、.gitconfigを探す場所には影響しませんでした。私の職場でのセットアップはU:を私たちの家にマウントしますが、U:に直接書き込む権限はなく、内部で作成されたサブディレクトリしかありません。

このアプリケーションのために、HOMEDRIVEおよびHOMEPATH env変数をオーバーライドするバッチスクリプトを作成することで、問題を解決しました。次に、代わりにそのバッチスクリプトを指すように[スタート]メニューのショートカットを変更しました。


1
この修正を行うために何をしたかについて、詳細を教えてください。
Matt Casto 2017

ソリューションを共有できますか?
Sal

4

最初にHOME設定を確認してから、HOMEとHOMEDRIVEを既存のディレクトリに変更します。

c:\git>set HOME
HOME=U:\
HOMEDRIVE=U:
HOMEPATH=\

次にHOMEとHOMEDRIVEを

set HOME=c:\tmp
set HOMEDRIVE=C:

3

Windowsを使用していて、環境変数の変更またはmklink権限の不足が原因で問題が発生した場合、問題の簡単な解決策は、別の場所でgitバッチを開始することです。

Git Bash.exeを右クリックし、プロパティをクリックして、[開始]プロパティをに変更しc:\my_configuration_files\ます。


うわーこれは完全に簡単に動作します。新しいショートカットを作成し、 'properties-> start in' %HOMEDRIVE%%HOMEPATH%を `c:\ my_repo_folder`に変更しました。魅力的に働いた。
シェーン

2
これは私にはうまくいきませんでした。.gitconfigファイルはまだ私のホームディレクトリから読み込まれました
Dave B

3

同じことをしたかった。私が見つけた最高のものは、@ MicTechのソリューションでした。ただし、@ MotoWilliamsで指摘されているように、Gitが.gitconfigファイルに行った更新では、リンクは新しい設定のみを含む新しいファイルに置き換えられます。

これを解決するには、次のPowerShellスクリプトを記述して、プロファイルの起動スクリプトで実行します。実行されるたびに、ユーザーの.gitconfigに追加された設定をグローバル設定にコピーし、.gitconfigファイル内のすべてのテキストを、グローバルファイルをインポートする[include]ヘッダーに置き換えます。

グローバル.gitconfigファイルは、他の多くのグローバルスクリプトやツールとともに、リポジトリに保管しています。スクリプトがグローバルファイルに追加する変更をチェックインすることを忘れないでください。

これは私にはかなり透過的に機能するようです。それが役に立てば幸い!

9月9日:設定ファイルに追加された新しいエントリが重複していることを検出して無視するように更新されました。これは、既存の更新が見つからず、インクルードに従わない場合に新しい更新を書き込むSourceTreeなどのツールに役立ちます。

function git-config-update
{
  $localPath = "$env:USERPROFILE\.gitconfig".replace('\', "\\")
  $globalPath = "C:\src\github\Global\Git\gitconfig".replace('\', "\\")

  $redirectAutoText = "# Generated file. Do not edit!`n[include]`n  path = $globalPath`n`n"
  $localText = get-content $localPath

  $diffs = (compare-object -ref $redirectAutoText.split("`n") -diff ($localText) | 
    measure-object).count

  if ($diffs -eq 0)
  {
    write-output ".gitconfig unchanged."
    return
  }

  $skipLines = 0
  $diffs = (compare-object -ref ($redirectAutoText.split("`n") | 
     select -f 3) -diff ($localText | select -f 3) | measure-object).count
  if ($diffs -eq 0)
  {
    $skipLines = 4
    write-warning "New settings appended to $localPath...`n "
  }
  else
  {
    write-warning "New settings found in $localPath...`n "
  }
  $localLines = (get-content $localPath | select -Skip $skipLines) -join "`n"
  $newSettings = $localLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries) | 
    where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }

  $globalLines = (get-content  $globalPath) -join "`n"
  $globalSettings =  $globalLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries)| 
    where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }

  $appendSettings = ($newSettings | %{ $_.Trim() } | 
    where { !($globalSettings -contains $_.Trim()) })
  if ([string]::IsNullOrWhitespace($appendSettings))
  {
    write-output "No new settings found."
  }
  else
  {
    echo $appendSettings
    add-content $globalPath ("`n# Additional settings added from $env:COMPUTERNAME on " + (Get-Date -displayhint date) + "`n" + $appendSettings)
  }
  set-content $localPath $redirectAutoText -force
}

2

これに非常に長い間興味を持っていた人として。マニュアルから見る:

$ XDG_CONFIG_HOME / git / config -2番目のユーザー固有の構成ファイル。場合は$XDG_CONFIG_HOME設定または空にされていない、$ HOME / .configを/ gitの/ configに使用されます。このファイルに設定されている単一値の変数は、〜/ .gitconfigにあるもので上書きされます。このファイルのサポートがごく最近追加されたため、古いバージョンのGitを使用する場合は、このファイルを作成しないことをお勧めします。

最近追加されたものです。このダンプは2.15.0からです。

私のために働く。


これは、Windowsで最もシンプルで、煩わしさがなく、最も信頼性の高いソリューションです。
kwill

2
  1. フォルダに変更 %PROGRAMFILES%\Git\etc
  2. ファイルを編集 profile
  3. 最初の行に追加 HOME="c:\location_were_you_want_gitconfig"
  4. できた

注:ファイルの権限は通常制限されているため、適宜変更してください。変更しないと、変更を保存できません。


これはgit 2.24、Win10、2019年12月の時点では機能していませんgit config --list --show-origin
フランクノッケ

1

私にとってはそれは非常に簡単に働きました:

  1. 古いディレクトリから「.gitconfig」を%USERPROFILE%にコピーします(「c:\ users \ username」の標準)
  2. GITGUIとGITBASHの開始アイコンを右クリックし、「実行」を「%HOMEDRIVE %% HOMEPATH%」を「%USERPROFILE%」に変更します。もちろん、「%USERPROFILE%」の代わりに他のディレクトリを使用することもできます。

前のスクリーンショット

スクリーンショット後


0

Windows HOME変数
OS を変更する必要のない解決策:Windows 10
gitバージョン:2.27.0.windows.1

私はGitのポータブルバージョンを使用しているため、すべての構成ファイルはペンドライブ(E :)にあります。これは私のために働いたものです:

  1. https://git-scm.com/からポータブルGitをダウンロードします。ファイルを実行し、必要な場所にインストールします。E:\ gitにインストールしました。
  2. E:\ gitからgit-bash.exeを実行します。
  3. .gitconfig他のbashファイルをEに配置したかったので、ホームと呼ばれるフォルダーを作成し、そこにすべてを格納しました。
    mkdir home
  4. etcフォルダーに移動し、profileというファイルを開きます(私の場合はE:\ git \ etc \ profileです)
  5. プロファイルファイルの最後に、作成したホームディレクトリ(または.gitconfigファイルを配置するディレクトリ)への絶対パスを追加します。
    HOME="E:\git\home"

これで、C:\ Users <username>ディレクトリで.gitconfigが検索されなくなり、上の設定パスのみが検索されます。

$ git config --global --list
fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory

.gitconfigファイルがまだ存在しないため、エラーが発生しました。これは、WindowsのHOMEディレクトリを変更せずに.gitconfigファイルの場所を正常に変更したことを示すためだけのものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.