1. ホーム
  2. パフォーマンス

[解決済み】-depth 1でcloneを浅くし、コミットを作成し、再び更新をpullするのは安全ですか?

2022-03-29 13:19:32

質問

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

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

しかし、私は浅いクローンを成功させ、いくつかの変更をコミットしました。 をプッシュし、その変更を を(ベアクローンの)オリジンに戻す。

つまり、クローンされた HEAD がオリジンで識別可能で、その上に私のコミットが乗っているのであれば、理由はないように思えます。しかし、マニュアルにはそう書かれていません。

シャロークローンのアイデアは好きです。

つまり、浅いクローン、その中での開発コミット、オリジンからの更新に追いつくために再度プルすることは安全なのでしょうか?

解決方法は?

なお、Git 1.9/2.0 (2014年第1四半期) には 削除 という制限があります。

参照 コミット 82fba2b からの Nguyễn Thái Ngọc Duy ( pclouds ) :

gitがシャロークローンからのデータ転送やシャロークローンへのデータ転送をサポートするようになった今、これらの制限はもう真実ではありません。

その のドキュメントは次のようになります。 :

--depth <depth>::

指定したリビジョン数まで切り詰めた履歴を持つ、「浅い」クローンを作成します。

これは、以下のようなコミットに由来しています。 0d7d285 , f2c681c そして c29a7b8 クローン、浅いクローンとの send-pack /receive-pack をサポートします。

smart-http がシャローフェッチ/クローンもサポートするようになりました。 .

詳細はすべて"に掲載されています。 shallow.c の新しいコミットを選択するための 8 つのステップです。 .git/shallow "です。

2015年6月更新 Git 2.5では、さらに 単一のコミットを取得する !

(究極の浅い場合)


2016年1月更新。Git 2.8 (Mach 2016) では、最小限の履歴を取得する慣習が公式に文書化されました。

参照 コミット 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 "

A <<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 .