ホームページ  >  記事  >  開発ツール  >  このテクニックを使用すると、git clone を数十倍高速化できます。

このテクニックを使用すると、git clone を数十倍高速化できます。

藏色散人
藏色散人転載
2021-12-20 15:11:213176ブラウズ

git clone が非常に遅い、または失敗する大規模プロジェクトに遭遇したことがあるかどうかはわかりません。みんなはどうやって対処するんだろう?

ダウンロード ソースを変更することを検討したり、インターネット速度を上げるために何らかの手段を使用したりすることもできますが、これらすべてを試しても、まだ比較的遅いと感じませんか?

今日、この問題に遭遇しました。gitlab から typescript コードをダウンロードする必要がありましたが、速度が非常に遅かったです:

git clone https://github.com/microsoft/TypeScript ts

長時間待っても、ダウンロードはまだ完了していませんでした。そこでパラメータを追加しました:

git clone https://github.com/microsoft/TypeScript --depth=1 ts

速度が数十倍に向上し、ダウンロードは一瞬で完了します。

-- Depth を追加すると、1 つのコミットのみがダウンロードされるため、コンテンツが大幅に減り、速度が向上します。 [関連する推奨事項: Git 使用法チュートリアル ]

ダウンロードされたコンテンツは、引き続き新しいコミットを送信し、新しいブランチを作成できます。その後の開発には影響しませんが、履歴コミットや履歴ブランチに切り替えることはできません。

私は自分のプロジェクトの 1 つでテストしました。最初にコミットをダウンロードしました:

このテクニックを使用すると、git clone を数十倍高速化できます。

次に、いくつかの変更を加え、次に git add、commit、push、Can を実行しました。通常どおり送信できます:

このテクニックを使用すると、git clone を数十倍高速化できます。

このテクニックを使用すると、git clone を数十倍高速化できます。

# 新しいブランチを作成すると、通常どおり送信できます。唯一の欠点は、履歴コミットや履歴ブランチに切り替えることができないことです。

これは、一部のシナリオでは非常に役立ちます。履歴ブランチに切り替える必要がある場合、必要なコミット数を計算し、深さを指定することもできるため、速度も向上します。

なぜこれが機能するのか考えたことがありますか?

Git の原則

Git はいくつかのオブジェクトを通じて情報を保存します:

    glob オブジェクト ストレージ ファイルの内容
  • ツリー オブジェクト ストレージ ファイルのパス
  • コミット オブジェクトはコミット情報を保存し、ツリーを関連付けます
  • ##1 つのコミットをエントリ ポイントとして、関連付けられたすべてのツリーと BLOB がこのコミットのコンテンツになります。

このテクニックを使用すると、git clone を数十倍高速化できます。#コミットは相互に関連しており、ヘッド、ブランチ、タグなどは特定のコミットへのポインターです。 .git/refs で確認できます。このようにブランチやタグなどの概念はコミットをベースに実装されます。

Git は、これら 3 つのオブジェクトを通じてバージョン管理とブランチ切り替え機能を実装しています。すべてのオブジェクトは .git/objects の下に表示されます。

これが git の原則です。

主に blob、tree、commit の 3 つのオブジェクトと、head、tag、branch、remote などの ref を理解します。

単一のコミットをダウンロードできるという原則

git は特定のコミットをエントリ ポイントとしてすべてのオブジェクトを関連付けることがわかっているため、履歴が必要ない場合は、当然のことながら、コミットを 1 つだけダウンロードします。

このテクニックを使用すると、git clone を数十倍高速化できます。#このようにして、そのコミットに基づいて新しいコミットが作成され、新しい BLOB、ツリーなどが関連付けられます。ただし、履歴のコミット、ツリー、および BLOB はダウンロードされていないため、スイッチバックすることはできません。また、対応するタグ、ブランチ、およびその他のポインターもダウンロードすることはできません。これは、単一のコミットをダウンロードする方法ですが、新しいブランチやコミットなどを作成することもできます。

概要

大規模な git プロジェクトに遭遇した場合、-- Depth パラメータを追加することで速度を大幅に向上させることができます。履歴コミットが多いほど、ダウンロード速度の向上は大きくなります。

ダウンロードしたプロジェクトはその後の開発のために引き続き開発でき、新しいコミット、新しいブランチ、タグを作成できますが、過去のコミット、ブランチ、タグに切り替えることはできません。

Git の原則を整理しました。ファイルと送信情報はツリー、BLOB、コミットの 3 つのオブジェクトを通じて保存され、ブランチやタグなどの機能はコミット間の関連付けを通じて実装されます。コミットはエントリ ポイントであり、すべてのツリーと BLOB に関連付けられます。

コミットをダウンロードすると、それに関連付けられたすべてのツリー、BLOB、およびいくつかの参照 (タグ、ブランチなどを含む) がダウンロードされます。これが -- Depth の原則です。

このテクニックを使用して、過去のコミットやブランチに切り替えることなく、大規模プロジェクトの git clone 速度を向上できることを願っています。

以上がこのテクニックを使用すると、git clone を数十倍高速化できます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。