web-dev-qa-db-ja.com

特定のgit URL /ドメインにのみプロキシを使用しますか?

特定のドメインにのみプロキシを使用するようにgitを構成することは可能ですか?

企業プロキシを使用してGithubにアクセスしたいのですが、独自の内部gitリポジトリにアクセスするためにそのままにしておきます。

私はbowerを使用していますが、ファイアウォール内とgithubの両方でアイテムを要求する必要があるため、プロジェクトごとの設定としてこれを行うことができません。何らかのグローバル構成オプションである必要があります。何かご意見は?

50
robdodson

通常、環境変数を使用します。

  • http_proxy=http://username:password@proxydomain:port
  • https_proxy=http://username:password@proxydomain:port

これは、GitHubリポジトリにアクセスするときにgitによって取得されます。

注意:

  • http_proxyhttps_proxyの両方で、プロキシのhttp://urlを使用する必要があります(https://なし) 。
  • 常に fqn(完全修飾名) of proxydomainを使用します(短縮名に依存しないでください)

しかし、内部レポについては、もう1つの環境変数を定義してエクスポートするだけです。

  • no_proxy=.my.company,localhost,127.0.0.1,::1myrepo.my.companyやlocalhostなどのアドレスを使用してリポジトリにアクセスします。

NO_PROXYまたはno_proxyを定義できますが、それは問題ではありません。

ただし、念のため、HTTP_PROXYHTTPS_PROXYhttp_proxyhttps_proxyNO_PROXYおよびno_proxyを常に設定します。

54
VonC

別の可能性を追加するには、 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の要素と比較されます。

  • Scheme(例:https://example.com/https)。
  • ホスト/ドメイン名(例:example.comhttps://example.com/)。
  • ポート番号(例:8080 in http://example.com:8080/)。
  • パス(例:repo.git in https://example.com/repo.git)。
  • ユーザー名(例:https://[email protected]/repo.gituser

上記のリストは、優先順位が低い順に並べられています。構成キーのパスに一致するURLは、ユーザー名に一致するURLよりも優先されます。
たとえば、URLがhttps://[email protected]/foo/barの場合、https://example.com/fooの設定キーの一致は、https://[email protected]の設定キーの一致よりも優先されます。

すべてのURLは、一致を試みる前に正規化されます(URLに埋め込まれている場合、パスワードの部分は一致の目的で常に無視されます)ため、スペルが異なる同等のURLが正しく一致します。

環境変数の設定は、一致するものを常に上書きします
一致するURLは、Gitコマンドに直接指定されたURLです。
これは、リダイレクションの結果としてアクセスされたURLは、マッチングに参加しないことを意味します。

61
VonC

ここで述べたように、プロキシ設定とともに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 = ""
32
Artif3x

各リモートのさまざまな構成オプションを個別に調整できます。それぞれOriginupstreamという名前の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
13
jweyrich

私は企業プロキシの背後にいる同様の問題を抱えていました。基本的に、2種類のリポジトリがあります。

  1. 外部-プロキシが必要
  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
0
Anurag Singh