12

次のような git (html) プロジェクト ページがあることに気付きました。

https://github.com/fruux/sabre-dav

この方法で複製されます。

git clone https://github.com/fruux/sabre-dav .

にリストされている実際の結果のリモート URLgit remote -vは、次のような URL です。

origin  git@github.com:foo/sabre-dav.git

おそらく私はプッシュアクセスを持っているからです。

そのため、特定のプロジェクト URL を git リポジトリにリダイレクトできるかどうか疑問に思いました。たとえば、私が所有http://myosproject.example.orgしている場合、許可git clone http://myosproject.example.orgして実際に何らかの方法で github プロジェクトにリダイレクトさせることは可能ですか?

4

2 に答える 2

7

裸の git (.gitフォルダー) が Web サーバーにあり、特定のフックDocumentRootを設定している限り、それは機能します。post-update

詳細については、この本の章を参照してください

独自のドメイン名を にマップするには、レコード (IP アドレスがわかっている場合) またはレコード (ドメイン名しかわかっていない場合)github URLを定義するだけでよいと思います。ACNAMEDNS

http://my.domain.com/projectWeb サーバーでリバース プロキシを構成して、への要求を渡すこともできますhttp://github.com/project

于 2013-10-17T18:47:00.970 に答える
2

たとえば、私がhttp://myosproject.example.orgを所有している場合、git clone http://myosproject.example.orgを許可し、代わりに何らかの形で GitHub プロジェクトに実際にリダイレクトさせることは可能ですか?

サーバーが何らかの方法で URL をリダイレクトすることを知っていれば、理論的には可能です。
Git は現在 (2.12、2017 年第 1 四半期)http-alternatesリダイレクトのように扱います。

commit cb4d2d3、commit 50d3413commit fcaa6e6commit 6628eb4commit 986d7f4 (06 Dec 2016) by Jeff King ( peff)を参照してください。
( 2016 年 12 月 19 日、コミット 8a2882fJunio C Hamanoによってマージされました)gitster

サーバーが任意のコンテンツを取得するように git クライアントに要求する別の方法があります。それは、http-alternates ファイル (またはバックアップとして使用される通常の代替ファイル) を使用することです。

  • が「always」に設定されていない限りhttp.followRedirects、http-alternates (または代替) からのリモート リダイレクトにはまったく従いません。
  • CURLOPT_PROTOCOLS一緒に設定するとCURLOPT_REDIR_PROTOCOLS、既知の安全なセットに制限され、ユーザー提供のホワイトリストが尊重されます。
  • オブジェクトの別のソースが関与している可能性があることをユーザーが認識できるように、標準エラー出力で代替オブジェクト ストアについて言及します。

Git 2.13 は、エラーがない場合にのみベース URL を更新することで、これらの http リダイレクトを改善します。

Jonathan Tan ( )によるcommit 8e27391 (2017 年 2 月 28 日)を参照してください。( 2017 年 3 月 10 日コミット d0f549fJunio C Hamanoによってマージされました)jhowtan
gitster

http.cフォームの HTTP リダイレクトをサポート

 http://foo/info/refs?service=git-upload-pack
 -> http://anything
 -> http://bar/info/refs?service=git-upload-pack

つまり、パスの Git 部分とクエリ文字列が最終的なリダイレクト先に保持されている限り、中間ステップは任意の URL を持つことができます。
ただし、中間ステップの 1 つで HTTP 例外がunable to update url base from redirection発生した場合、HTTP 例外コードを含む Curl エラー メッセージの代わりに、紛らわしい " " メッセージが出力されます。

httpURL の「ベース」部分だけが異なるかどうかを確認する前に、HTTP ステータスを確認するように教えてください。


ただし、xptの質問に記載されているように、「git cloneリダイレクト短縮 URL から」:

git clonehttpfollowRedirectsそうでない場合は、リダイレクトに従う必要がありfalseます。実際には、名前が変更されたリポジトリの古い URL と同様に、301 で
終わるURL が返されます。.git

したがって、たとえばgit.ioで使用される302 ("Found")ではなく、 301 ("Moved fully") です。

于 2016-12-23T20:24:06.247 に答える