--depth 1 で浅いクローンを作成し、コミットを作成して、再度更新をプルするのは安全ですか? 質問する

--depth 1 で浅いクローンを作成し、コミットを作成して、再度更新をプルするのは安全ですか? 質問する

オプション--depth 1git clone:

指定されたリビジョン数に切り捨てられた履歴を持つ浅いクローンを作成します。浅いリポジトリにはいくつかの制限があります (クローンやフェッチ、プッシュやプッシュはできません)。ただし、長い履歴を持つ大規模プロジェクトの最近の履歴のみに興味があり、修正をパッチとして送信したい場合は、浅いリポジトリで十分です。

しかし、私はシャロークローンを正常に実行し、いくつかの変更をコミットし、それらの変更を(ベアクローンの)オリジンにプッシュバックしました。

それは私にとっては理にかなっています。つまり、なぜそうしないのでしょうか? クローンされた HEAD が origin で識別可能で、私のコミットがこれの上にある場合、理由はないように思えます。しかし、マニュアルにはそうではないと書かれています。

私は、Drupal コアなどの浅いクローンのアイデアが好きです。7 から始めたので、Drupal 4 で何が起こったのかを知る必要はありません。しかし、自分の足を撃ち抜くようなことはしたくありません。

では、浅いクローンを作成し、その中でコミットを開発し、元のバージョンからの更新に追いつくために再度プルするのは安全でしょうか?

ベストアンサー1

Git 1.9/2.0 (2014年第1四半期)ではこの制限が削除されました。
コミット 82fba2b、 からグエン・タイ・ゴック・デュイ ( pclouds):

Git がシャロー クローンとの間のデータ転送をサポートするようになったため、これらの制限は当てはまらなくなりました。

ドキュメントには次のように書かれています:

--depth <depth>::

指定されたリビジョン数に切り捨てられた履歴を持つ「浅い」クローンを作成します。

それは次のようなコミットから生じます0d7d285翻訳元、 そしてc29a7b8クローン、浅いクローンとの send-pack /receive-pack をサポートします。
smart-http は、浅いフェッチ/クローンもサポートするようになりました

詳細は「shallow.c: 新しいコミットを選択するための8つのステップ.git/shallow「」。

2015 年 6 月更新:Git 2.5 では、単一のコミットを取得することも可能になります。
(究極の浅いケース)


2016年1月更新: Git 2.8 (2016年3月)では、最小限の履歴を取得する方法が公式に文書化されました
コミット 99487cfコミット 9cfde9e(2015年12月30日)コミット 9cfde9e(2015年12月30日)コミット bac5874(2015年12月29日)コミット 1de2e44(2015年12月28日)スティーブン・P・スミス(``)(合併者
ジュニオ・C・ハマノ -- gitster--コミット 7e3e80a、2016年1月20日)

これは "Documentation/user-manual.txt

<<def_shallow_clone,shallow clone>>git-clone --depthスイッチ。
深さは後でgit-fetch --depthスイッチ、または完全な履歴を で復元します--unshallow

内でのマージは、<<def_shallow_clone,shallow clone>>マージ ベースが最近の履歴にある限り機能します。
そうでない場合は、無関係な履歴をマージすることになり、大きな競合が発生する可能性があります。
この制限により、このようなリポジトリはマージ ベースのワークフローで使用するのに適さない可能性があります。

2020年アップデート:

  • git 2.11.1 ではgit fetch --shallow-exclude=、すべての履歴の取得を防ぐオプションが導入されました。
  • git 2.11.1 ではgit fetch --shallow-since=、古いコミットの取得を防止するオプションが導入されました。

シャロークローン更新プロセスの詳細については、「Git の浅いクローンを更新するにはどうすればいいですか?「」。


コメントしたようにリチャード・マイケル:

履歴をバックフィルするには:git pull --unshallow

そしてオーレ・ハーシュテット追加コメント欄:

履歴の一部をバックフィルするには: git fetch --depth=100.

おすすめ記事