私の目的は、長く膨大な歴史を持つプロジェクトの最新バージョンをビルドし、プロジェクトに貢献できるようにすることです。これを行うには、ローカル ストレージを使用して多くの歴史的なブランチや 10 年以上前の歴史を複製する必要はありません (必要に応じて、プロジェクトの中央リポジトリの Web UI でいつでも検索できますが、おそらくしないでしょう)。
私は最初の試みでラッキーだったようです:
git clone --depth 40 -b master http://github.com/who/what.git/ what
これにより、' ' ブランチのみを持つ 'what' の整然としたローカル クローンと、master
タグ付けされた最新の 2 つのリリースをカバーするのに十分なコミットが得られました。
その後、' git checkout latest-release-tag
' を実行して、最新のリリースをビルドできます。ヤッピー!
予想通り、パッチを作成する必要がありました。すべてがスムーズに進みました: ' git checkout -b my-patch-branch
'、変更を加え、コミットすると、プロジェクトがプルできるように、my-patch-branch を github のクローンにプッシュすることができました。簡単!ここで読んだことから、git 1.9 の前にそれを行うことはできなかった
ので、そこで幸運だったと思います。
しかし、インストールされたバージョンは 1.9 であることが判明したので、それを回避しました。
次にやりたいことは、リモートからフェッチし、マスターで最新のアクティビティを取得することです (パッチのアップストリーム マージを含むため、そのブランチはもう必要ありません)。私は 'git fetch --dry-run アップストリーム' を試してみましたが、無限にメガバイトのダウンロードが行われ、マストドンの時代にさかのぼる新しいタグのリストが表示されるのを恐怖で見ていました。言ってよかった--dry-run
!
私のクローンの HEAD 以来、 ' ' でダースかそこらの新しいコミットが取得されることを本当に望んでいたのでmaster
、おそらく 40 ではなく深さ 52 のクローンを持つことになるでしょうが、それは私が望んでいることのようなものです ...私が関与する前の有用な量の最近の履歴から始めて、その時点から追跡して成長させ、パッチをビルド、ブランチ、およびプッシュできるようにします。とても近いようです。
私がやろうとしていることをgitに実行させる簡単な方法はありますか? 私がやろうとしていることは不合理ですか?
編集:もう少し情報。
(1) アップストリームは実際には 100 コミット近く私より進んでいます。
(2) クローンで取得した元の 40 個のコミットはすべて片親コミットであることがわかりました。私がフェッチしようとしている後のものの束は、クローンに含まれていなかったブランチの2番目の親とのマージコミットです。私のクローンの最初のコミットは共通の祖先ではないため、それらが原因で git が古い歴史をすべて取り込んでいる可能性はありますか?
いらないと伝える方法はありますか?
さらに新しい情報:
(1) 以前は http プロトコルを使用していましたが、これは実際にはサーバー上の git プロセスと対話しないため、ダウンロード サイズを調整する機会がありません。
しかし、git-over-ssh を使用して再試行すると、まだ大量のフェッチが発生しました。
次に
(2) 手動で、動物のように、github の「newtork」ディスプレイに表示されているマージ コミットをクリックし、浅いカットの前に始まったブランチを含むコミットを見つけ、それらの親 2 SHA を.git/shallow
ファイルに追加し、試してみました。再び ssh 経由で「git fetch」します。それはうまく機能し、私のローカルを早送りできる小さなパックファイルをダウンロードしましたmaster
ブランチ。これはまさにgitに自動的に実行してもらいたい操作だと思いますが、それを行う方法が見つかりませんでした。手動では、かなり面倒です。:)