2

聞いて!

最新バージョンのすべてのコードを含むローカル フォルダーがあります。この同じバージョンのコードは、リモートの git リポジトリのマスター ブランチに存在します。ローカルで git を初期化したいのですが、git pull を使用してすべてのコードを再度ダウンロードする必要はありません。git init の後にリモート リポジトリを追加してフェッチしようとしても、同期していると判断する前にすべてをダウンロードしているようです。

コードには多くのバイナリ ファイルもあります。

これを行う主な理由は、帯域幅を節約することです。しかし、それを行う方法を知ることもできます。

git にどのように伝えるのですか - 「これは既にサーバーの最新版と同期しています (または、さらに良いことに、サーバー上のこの特定のリビジョン - 私の言葉を信じて、それ以降のリビジョンのみを取得しますか?)」

編集:

正直に言うと、サーバーには現在コミットが1つしかありません-今、私が欲しいのは、例えばのようなものです

ローカルでもそのコミットを行い、サーバーにも同じコミットがあることをgitに伝えます(最初のコミットが行われたときに存在するフォルダー内のファイルはまったく同じであるため)-異なるコミットIDが生成されるため、明らかにgitはまだそれを知りませんサーバー上にあったものからローカルに。とにかくローカルでチェックインした後にコミットIDをサーバー上のものに変更できれば、問題は解決します。

可能であれば、上記のようなものを探しています。

浅いクローンであっても、「git clone」を実行したくはありません(そして、gitを介してすべてのファイルをダウンロードします)。

編集2:

たった 1 回のコミットの後でも、私の .git フォルダーは 182 MB になることに注意してください。これはレポ全体のほぼ圧縮サイズです。私の懸念は、この全体が再度ダウンロードされていることです (同じ 182 MB の .git ファイルが既にローカルに存在し、おそらくコミット ID だけが異なる場合でも)。

4

2 に答える 2

5

作業コピーだけに基づいて git が機能することは期待できません。プロジェクト履歴を含め、適切に機能するためには多くのメタデータが必要です。

あなたが望むのは浅いクローンです。これは

git clone --depth=1 git://some/repo

ただし、浅いクローンには多くの重要な制限があります。

  • あなたはそれらからプッシュすることはできません
  • あなたはそれらから引っ張ることはできません
  • さらにダウンロードしないとプロジェクトの履歴を参照できません
于 2013-06-22T20:17:50.290 に答える
3

git とは何か、そしてその仕組みを誤解していると思います。分散バージョン管理システムの要点は、リポジトリの全履歴をローカルに保持できることです。

そうは言っても、本当にこれをやりたい場合は、「浅いクローン」を作成できます。

git clone --depth <depth> <repository>

<depth>必要な履歴のリビジョンの数はどこにありますか。他のリポジトリとやり取りしようとすると、このクローンはかなり壊れてしまうため、必要な動作が得られない可能性があることに注意してください。

git cloneマニュアルページから、太字の強調鉱山:

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

そこの最後のフレーズは、残りの唯一のワークフローを示しています。パッチを生成し、プッシュする場合は、パッチを別の場所の完全なリポジトリに適用します。

于 2013-06-22T20:15:04.580 に答える