特定のドメインにのみプロキシを使用するようにgitを構成することは可能ですか?
企業プロキシを使用してGithubにアクセスしたいのですが、独自の内部gitリポジトリにアクセスするためにそのままにしておきます。
私はbowerを使用していますが、ファイアウォール内とgithubの両方でアイテムを要求する必要があるため、プロジェクトごとの設定としてこれを行うことができません。何らかのグローバル構成オプションである必要があります。何かご意見は?
通常、環境変数を使用します。
http_proxy=http://username:password@proxydomain:port
https_proxy=http://username:password@proxydomain:port
これは、GitHubリポジトリにアクセスするときにgitによって取得されます。
注意:
http_proxy
とhttps_proxy
の両方で、プロキシのhttp://
urlを使用する必要があります(https://
なし) 。proxydomain
を使用します(短縮名に依存しないでください)しかし、内部レポについては、もう1つの環境変数を定義してエクスポートするだけです。
no_proxy=.my.company,localhost,127.0.0.1,::1
、myrepo.my.company
やlocalhostなどのアドレスを使用してリポジトリにアクセスします。NO_PROXY
またはno_proxy
を定義できますが、それは問題ではありません。
ただし、念のため、HTTP_PROXY
、HTTPS_PROXY
、http_proxy
、https_proxy
、NO_PROXY
およびno_proxy
を常に設定します。
別の可能性を追加するには、 git config http.proxy
を介してプロキシを定義 を使用します。
git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:proxyport
しかし、本当にすてきなのは、 git1.8.5(2013年10月)以降 で、urlごとにhttp設定を設定できます。
「http.*
」変数は、構成が適用されるURLごとに指定できるようになりました。
例えば、
[http]
sslVerify = true
[http "https://weak.example.com/"]
sslVerify = false
指定されたサイトと話しているときにのみ
http.sslVerify
をオフにします。
commit d4770964d5 を参照してください:
$ git config --bool --get-urlmatch http.sslVerify https://good.example.com
true
$ git config --bool --get-urlmatch http.sslVerify https://weak.example.com
false
<section>
のみを指定すると、特定のURLに適用される値を持つセクション内のすべての変数のリストを取得できます。例えば
$ git config --get-urlmatch http https://weak.example.com
http.sslverify false
詳細はすべて commit 6a56993b にあります。
http.<url>.*::
上記のhttp。*オプションは、一部のURLに選択的に適用できます。
構成キーがURLと一致する場合、構成キーの各要素は、次の順序でURLの要素と比較されます。
https://example.com/
のhttps
)。example.com
のhttps://example.com/
)。8080
in http://example.com:8080/
)。repo.git
in https://example.com/repo.git
)。https://[email protected]/repo.git
のuser
)上記のリストは、優先順位が低い順に並べられています。構成キーのパスに一致するURLは、ユーザー名に一致するURLよりも優先されます。
たとえば、URLがhttps://[email protected]/foo/bar
の場合、https://example.com/foo
の設定キーの一致は、https://[email protected]
の設定キーの一致よりも優先されます。すべてのURLは、一致を試みる前に正規化されます(URLに埋め込まれている場合、パスワードの部分は一致の目的で常に無視されます)ため、スペルが異なる同等のURLが正しく一致します。
環境変数の設定は、一致するものを常に上書きします。
一致するURLは、Gitコマンドに直接指定されたURLです。
これは、リダイレクションの結果としてアクセスされたURLは、マッチングに参加しないことを意味します。
ここで述べたように、プロキシ設定とともにURLを指定することでこれを行うことができますが、これを修正したユースケースがあります。上記のVonCに感謝します!
以下では、Gitサーバーのルートを指定していることに注意してください。複製したgitリポジトリへのフルパスは必要ありません。 1つのエントリを使用して、サーバー全体を管理できます。
以下を.gitconfigファイルに追加します。私のWindowsシステムでは、%userprofile%\。gitconfigを使用しています
[http]
proxy = http://my.proxy.net:8080
[https]
proxy = http://my.proxy.net:8443
[http "http://my.internalgitserver.com/"]
proxy = ""
各リモートのさまざまな構成オプションを個別に調整できます。それぞれOrigin
とupstream
という名前の2つのリモートがあるとします。次の操作を実行するたびにプロキシを調整します。
git config --path remote.Origin.proxy http://user:pass@proxy_for_Origin:8080
git config --path remote.upstream.proxy http://user:pass@proxy_for_upstream:8080
これにより、ローカルリポジトリ構成内の各リモートのセクションが変更されます(.git/config
)。
必要に応じて、グローバル構成オプションを調整することもできます。グローバル設定ファイルでリモート名を参照することは意味をなさないため($HOME/.gitconfig
)、rl-matching(IIRC、Git 1.8.5以降でサポート)を使用できます。例:
[http "https://example.com/repo1.git"]
proxy = http://user:pass@proxy1:8080
[http "https://example.com/repo2.git"]
proxy = http://user:pass@proxy2:8080
設定内容を確認する場合:
git config --path --get-urlmatch https://example.com/repo1.git
git config --path --get-urlmatch https://example.com/repo2.git
私は企業プロキシの背後にいる同様の問題を抱えていました。基本的に、2種類のリポジトリがあります。
グローバル設定でプロキシを設定する必要がありました。ローカル設定で指定されていない場合、デフォルトとして機能します。
構成用のコマンドは次のとおりです。
プロキシでグローバル構成を設定する
git config --global --add http.proxy "http://username:password@proxydomain:port"
git config --global --add https.proxy "https://username:password@proxydomain:port"
次に、.gitフォルダーを含み、プロキシを必要としないローカルディレクトリに移動します
cd "C:\Users\username\directory_without_proxy\"
空のプロキシでローカル設定を設定します
git config --local --add http.proxy ""
git config --local --add https.proxy ""
他の方法でも可能です。つまり、プロキシ設定を使用して、グローバル構成を空にしてローカル構成を保持します。
再確認するには、以下のコマンドを使用して、それぞれグローバルとローカルの設定を一覧表示します。
git config --global --list
git config --local --list