3

指定したタグの浅いクローンを作成します。

git clone --branch v0.1.3 --depth 1 file:///c/usr/sites/smc .

この後、複製されたリポジトリにはタグ 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 の提案を試しました。

$ git fetch --update-shallow origin v0.1.4
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From file:///c/usr/sites/smc
 * tag               v0.1.4     -> FETCH_HEAD

paul.chernoch@USB-XXXXXXXXX /c/usr/sites/smc-clone3 ((v0.1.3))
$ git describe
v0.1.3

paul.chernoch@USB-XXXXXXXXX /c/usr/sites/smc-clone3 ((v0.1.3))
$ git tag --list
v0.1.3

コマンドは何かを実行しているように見えますが、ターゲット リポジトリにタグ v0.1.4 が表示されません。ただし、 --tags オプションを使用すると、すべてのタグだけでなく、すべての履歴も取得できます! また、git fetch コマンドの出力にある「FETCH_HEAD」という表記がわかりません。

更新: さらなる調査は、この SO の質問が同様の目標の後にあることを示しています: 特定のタグへの git 浅いクローン

4

2 に答える 2

2

これと同様の質問があり、後でこれを見つけたようです。トリックは、fetch コマンドの最後と深さで完全な refspec を指定することでした。refs/tags/v0.1.3:refs/tags/v0.1.3 または略してタグ v0.1.3

新しいタグの Git 浅いフェッチ

git fetch --depth 1 origin tag v0.1.4
于 2014-10-29T14:16:27.267 に答える