Gitクローン固有のコミットオプションがないのはなぜですか?

ivan.sim

SOに関する最近の質問に照らして、新しく作成されたブランチのポインターが指定されたコミットを指すgit cloneようなオプションがないのはなぜだろうかHEAD上記の質問では、OPは、ユーザーが複製する必要がある特定のコミットに関する指示を提供しようとしています。

この質問は、;を使用して特定のバージョンにクローンを作成する方法に関するものではないことに注意してくださいresetしかし、なぜそこにないのですか?

火曜日

これまでの2つの答え(私がこれを書いた時点で、今ではもっとあります)は彼らの言うことは正しいですが、「なぜ」の質問には実際には答えていません。もちろん、「なぜ」の質問に答えるのは本当に難しいです。ただし、Gitのさまざまな部分の作成者を除きます(それでも、2人の頻繁なGit寄稿者が2つの異なる答えを出した場合はどうなりますか?)。

それでも、Gitの「哲学」をそのまま考えると、一般に、さまざまな転送プロトコルは参照に名前を付けることで機能しますそれらがSHA-1を提供する場合、それはその参照のSHA-1ですすでにリポジトリへの直接(例えば、コマンドライン)のアクセス権を持っていない人のために、どれも1コマンドに建てられたのは、1つのIDでコミットを参照することができません。私は見つけることができる最も近いものな理由のために、この-、それは実際に良い理由である2は、このビットを-isドキュメントgit upload-archive

セキュリティ

履歴から削除されたがまだプルーニングされていない可能性のあるオブジェクトのプライバシーを保護するために、git-upload-archiveは、リポジトリの参照から到達できないコミットおよびツリーのアーカイブの提供を回避します。ただし、オブジェクトの到達可能性の計算には計算コストがかかるため、git-upload-archiveは、より厳密でありながらチェックしやすい一連のルールを実装します...

しかし、それは続けて言います:

configオプションuploadArchive.allowUnreachableがtrueの場合、これらのルールは無視され、クライアントは任意のsha1式を使用できます。これは、到達不能なオブジェクトのプライバシーを気にしない場合、またはオブジェクトデータベースが非スマートhttp経由でアクセスできるようにすでに公開されている場合に役立ちます。

これはgit clone、最初に到達可能なすべてのオブジェクトを取得するため、特に興味深いものです。その後、ローカルクローンはSHA-1 IDによるコミットを簡単にチェックアウトできます(必要に応じて、そのIDを指すローカルブランチ名を作成するか、クローンをそのままにしておきます)。 「デタッチヘッド」モード)。

これらの2つの横流を考えると、現時点での「理由」に対する本当の答えは、「誰もそれを追加するほど気にしない」ということだと思います。:-)プライバシー引数が有効ですが、理由はありませんgit clone、それ以外のいくつかのブランチをチェックアウトするように指示することができます同じように、クローニングした後、IDによってコミットをチェックアウトすることができませんでしたmaster3とはgit clone -b ...許可することの唯一の欠点は、Gitが(クローン作成プロセスが始まる前に)受信されるかどうか事前にチェックできないことです。それはすることができ、それらが転送されているのでそう、フロントまで(その分岐ヒントや他のSHA-1値と一緒に)、参照名をチェックし素早く終了し、コピーを作成しません。-b sha1sha1git clone -b nonexistentbranch ssh://...

fatal: Remote branch nonexistentbranch not found in upstream origin
fatal: The remote end hung up unexpectedly

-bIDが許可されている場合は、クローン全体を取得します。「ああ、すみません、そのIDをチェックアウトできません。代わりに、マスターに任せます」などと言う必要があります。(これは、バストされたサブモジュールで現在発生していることです。)


1一方でgit upload-archive 、今、この「プライバシー」のルールを施行し、これは(それはバージョン1.7.8.1で導入されました)必ずしもそうではありませんでした。また、Git自体と一緒に配布されるサーバーを含む多くの(ほとんど?)git-webサーバーでは、任意のIDで表示できます。これがおそらく、「参照名のみ」コードが追加allowUnreachableされてからupload-archive数年後に追加され理由です(ただし、1.7.8以降および2.0.0より前のGitのリリースではルールを緩める方法がないことに注意してください)。したがって、「セキュリティ」の考え方は有効ですが、それが実施されなかった期間(1.7.8.1より前)がありました。

図2は、 Gitのリポジトリのうち、表向きはプライベートデータ「リーク」に数多くの方法があります。新しいファイルDocumentation / transfer-data-leaksがGit 2.11.1に表示されようとしていますが、Git 2.11.0では、プッシュされたが受け入れられなかったオブジェクトをすぐに削除するための内部機能が追加されています(特にcommit 722ff7f87を参照)。このようなオブジェクトは最終的にガベージコレクションされますが、その間、オブジェクトは公開されたままになります。

3実際には、デフォルトでgit cloneは、リモートのHEAD参照に対応すると思われるブランチのローカルチェックアウトが行われます。masterとにかく、通常はそれです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

findコマンドの-execオプションでバックスラッシュとセミコロンが必要なのはなぜですか?

分類Dev

returnステートメントの後のセミコロンがオプションなのはなぜですか?

分類Dev

PHPの最後のステートメントでセミコロンがオプションであるのはなぜですか?

分類Dev

2.2.0-M02の11.8の例で、定期的なコミットがオープントランザクションエラーをスローするのはなぜですか?

分類Dev

このトランザクションがロールバックしないのはなぜですか?

分類Dev

gitシャロークローンが<depth>よりも多くのコミットを持つことができるのはなぜですか?

分類Dev

git add -pに分割オプションがないのはなぜですか?

分類Dev

CakePHPの自動トランザクションオプションが「アトミック」と呼ばれるのはなぜですか?

分類Dev

オブジェクトのコレクションで、単純なfor-eachループが機能しないのはなぜですか(JQuery)?

分類Dev

プロトコル:適合性チェックとオプションの要件に@ObjCが必要なのはなぜですか?

分類Dev

djangoトランザクションがダブルコミットを送信するのはなぜですか?

分類Dev

ループマウントでオフセット固有なのはなぜですか?

分類Dev

イベントループをブロックしてもcssアニメーションがブロックされないのはなぜですか?

分類Dev

Anypointプラットフォームで「RESTAPIからフローを生成」オプションが無効になっているのはなぜですか?

分類Dev

2つの同じレコードを挿入しても、トランザクションがロールバックしないのはなぜですか

分類Dev

このバックプロパゲーションの実装が重みを正しくトレーニングできないのはなぜですか?

分類Dev

Spyder 3.1のオートコンプリートオプションがエディターで完全に機能しないのはなぜですか?

分類Dev

MVC OnExceptionで処理された例外がエラーコントローラーアクションにヒットしないのはなぜですか?

分類Dev

KotlinコレクションのisEmptyがプロパティではないのはなぜですか?

分類Dev

KotlinコレクションのisEmptyがプロパティではないのはなぜですか?

分類Dev

アプリケーションでシャットダウンエンドポイントが有効になっていないのはなぜですか?

分類Dev

マシンのudisksctlコマンドで、電源オフが有効なオプションではないと表示されるのはなぜですか?

分類Dev

ドロップロケーションが必要なのはなぜですか?

分類Dev

プロシージャ内の単一のINSERTが明示的なトランザクションの対象とならないのはなぜですか?

分類Dev

XPlotのオプションやWithSizeなどは特定のチャートのみに固有ですか?

分類Dev

「共有オブジェクトを作成するときにR_X86_64_32を使用できない」のCMakeソリューションがx86_64に固有なのはなぜですか?

分類Dev

divコンテンツがダッシュ/プロットで更新されないのはなぜですか?

分類Dev

Azureポータルで「トピックの作成」オプションが無効になっているのはなぜですか?

分類Dev

PHP / Symfony-Twigでレンダリングされたコントローラーからの例外がプロダクションモードでのみキャッチされないのはなぜですか?

Related 関連記事

  1. 1

    findコマンドの-execオプションでバックスラッシュとセミコロンが必要なのはなぜですか?

  2. 2

    returnステートメントの後のセミコロンがオプションなのはなぜですか?

  3. 3

    PHPの最後のステートメントでセミコロンがオプションであるのはなぜですか?

  4. 4

    2.2.0-M02の11.8の例で、定期的なコミットがオープントランザクションエラーをスローするのはなぜですか?

  5. 5

    このトランザクションがロールバックしないのはなぜですか?

  6. 6

    gitシャロークローンが<depth>よりも多くのコミットを持つことができるのはなぜですか?

  7. 7

    git add -pに分割オプションがないのはなぜですか?

  8. 8

    CakePHPの自動トランザクションオプションが「アトミック」と呼ばれるのはなぜですか?

  9. 9

    オブジェクトのコレクションで、単純なfor-eachループが機能しないのはなぜですか(JQuery)?

  10. 10

    プロトコル:適合性チェックとオプションの要件に@ObjCが必要なのはなぜですか?

  11. 11

    djangoトランザクションがダブルコミットを送信するのはなぜですか?

  12. 12

    ループマウントでオフセット固有なのはなぜですか?

  13. 13

    イベントループをブロックしてもcssアニメーションがブロックされないのはなぜですか?

  14. 14

    Anypointプラットフォームで「RESTAPIからフローを生成」オプションが無効になっているのはなぜですか?

  15. 15

    2つの同じレコードを挿入しても、トランザクションがロールバックしないのはなぜですか

  16. 16

    このバックプロパゲーションの実装が重みを正しくトレーニングできないのはなぜですか?

  17. 17

    Spyder 3.1のオートコンプリートオプションがエディターで完全に機能しないのはなぜですか?

  18. 18

    MVC OnExceptionで処理された例外がエラーコントローラーアクションにヒットしないのはなぜですか?

  19. 19

    KotlinコレクションのisEmptyがプロパティではないのはなぜですか?

  20. 20

    KotlinコレクションのisEmptyがプロパティではないのはなぜですか?

  21. 21

    アプリケーションでシャットダウンエンドポイントが有効になっていないのはなぜですか?

  22. 22

    マシンのudisksctlコマンドで、電源オフが有効なオプションではないと表示されるのはなぜですか?

  23. 23

    ドロップロケーションが必要なのはなぜですか?

  24. 24

    プロシージャ内の単一のINSERTが明示的なトランザクションの対象とならないのはなぜですか?

  25. 25

    XPlotのオプションやWithSizeなどは特定のチャートのみに固有ですか?

  26. 26

    「共有オブジェクトを作成するときにR_X86_64_32を使用できない」のCMakeソリューションがx86_64に固有なのはなぜですか?

  27. 27

    divコンテンツがダッシュ/プロットで更新されないのはなぜですか?

  28. 28

    Azureポータルで「トピックの作成」オプションが無効になっているのはなぜですか?

  29. 29

    PHP / Symfony-Twigでレンダリングされたコントローラーからの例外がプロダクションモードでのみキャッチされないのはなぜですか?

ホットタグ

アーカイブ