問題タブ [shallow-clone]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 浅い GIT リポジトリをより浅くする
指定したタグの浅いクローンを作成します。
この後、複製されたリポジトリにはタグ v0.1.3 (および関連ファイル) のみが含まれます。そのタグの前後のすべての変更の履歴はありません (私が理解しているように、間違っていたら訂正してください)。次に、クローンを更新して v0.1.4 を含めたいと思います。「git fetch --unshallow」コマンドを使用すると、必要のない完全な履歴が取得されます。クローンを拡張してマスターからの新しい履歴 (v0.1.4 や 0.1.5 など) を含め、古い履歴 (0.1.2 など) を含めないようにする方法はありますか? (update-shallow というオプションが表示されますが、それが何をするのか、または関連があるのかどうかがわかりません。)
これの目標は次のとおりです。
1) リポジトリ全体を複製しないことで、リモート サーバー上のリポジトリの初期設定を高速かつ小規模にします。(私たちのレポはほとんどバイナリです: DLL、EXE。)
2) リモート リポジトリを新しいバージョン (タグで指定) にアップグレードできるようにしますが、以前のバージョンにはアップグレードできません。このようなアップグレードでは、リポジトリの一部しか転送されないため、高速である必要があります。
注: 私の Git バージョンは、Windows 7 では 1.9.2.msysgit.0 です。これには、浅いクローン作成に対する最近の機能強化が含まれています。Linux でメイン リポジトリをホストする可能性がありますが、デプロイ先のエージェントは Windows を実行します。その目的は、操り人形エンタープライズを使用してチェックアウトを管理することです。
更新: VonC の提案を試しました。
コマンドは何かを実行しているように見えますが、ターゲット リポジトリにタグ v0.1.4 が表示されません。ただし、 --tags オプションを使用すると、すべてのタグだけでなく、すべての履歴も取得できます! また、git fetch コマンドの出力にある「FETCH_HEAD」という表記がわかりません。
更新: さらなる調査は、この SO の質問が同様の目標の後にあることを示しています: 特定のタグへの git 浅いクローン
git - 浅い git クローンを最低限最新の状態に保つ方法はありますか?
私の目的は、長く膨大な歴史を持つプロジェクトの最新バージョンをビルドし、プロジェクトに貢献できるようにすることです。これを行うには、ローカル ストレージを使用して多くの歴史的なブランチや 10 年以上前の歴史を複製する必要はありません (必要に応じて、プロジェクトの中央リポジトリの Web UI でいつでも検索できますが、おそらくしないでしょう)。
私は最初の試みでラッキーだったようです:
これにより、' ' ブランチのみを持つ '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に自動的に実行してもらいたい操作だと思いますが、それを行う方法が見つかりませんでした。手動では、かなり面倒です。:)
git - 履歴なしで git リポジトリを複製し、元のリポジトリで変更を浅いリポジトリにプッシュできるようにする
これがシナリオです。私はリポジトリAを持っています。これには、この他のリポジトリBには必要のない履歴とリビジョンが大量に含まれています。履歴全体を移動せずに 2 つを同期するにはどうすればよいですか。
git - gitのサブモジュールを含む浅いクローン、最新のものではなく、指定されたコミットを使用する方法は?
--depth
オプション withを使用して浅いサブモジュールを作成できることはわかっていますgit submodule update
。
ただし、実行すると
いくつかのサブモジュールを含む私のプロジェクトでは、fatal: reference is not a tree
. だから私はもう一度試しました
これは正しく機能しましたが、深さを 1 に保ちたいと思います。
メインリポジトリが指すコミットではなく、サブモジュールの最新のコミットをプルするように思えます--depth 1
。それが、指摘されたものを含むコミットのより長いリストをプルしたため、100に設定すると問題が解決した理由です。
残念ながら、その場合は、最新の 100 件のコミットに必要なコミットが含まれているかどうか、通常は確認できません。
サブモジュールを含む浅いクローンの最新のものではなく、指定されたコミットを使用するようにgitに指示するにはどうすればよいですか?
Windowsでgit 1.9.4を使用しています。
git - git で一連のブランチの浅いクローンを維持する方法
いくつかのブランチの浅い、ミラー化された、裸のクローンを維持したいと思います。さまざまなプロジェクト ブランチ用に、そこからローカルに複製します。例えば
だから私はこのようにrepo2を作ることができます
そして、repo3と4は本当に簡単だと思います-repo2から必要なものをすべて複製できますが、repo2の浅さによって制限されます。
しかし、その浅さを維持しながら repo1 から repo2 を最新の状態に保つことは、私が行き詰まっていることです (理想的には、特定のコミット以降のすべてを維持したいのですが、それは不可能であることを理解しています)。毎回複数の git fetch コマンドを実行する必要があるようですが、これでよろしいですか? 構成ファイルにそれをポップして、私がgit fetch
何を意味するのかを理解できるようにする方法はありますか?
git - 浅い git fetch の後、コードをデプロイ (チェックアウト) できず、ブランチがまだ見つからない
リポジトリの簡単なセットアップを行いました。
次に、コードを取得しようとすると:
私は得る:
私がチェックしたところ、git fetch
ログ出力にもかかわらず、ブランチはローカルで利用できないようです:
何も返しません。単一のブランチからのみ最新のコードを取得しようとしています (すべてをプルする理由はありません) - それはできませんか?
git - 履歴全体なしでシード/キックスタート プロジェクトを複製する方法は?
--depth=1
パラメータを使用すると、プロジェクトを新しいリポジトリにプッシュできなくなることに注意してください。