1. ホーム
  2. git

[解決済み] 完全なレポをgitでバンドルする方法

2022-05-11 15:08:39

質問

私は、ネットワークに接続されていない新しいマシンに、できれば単一のファイルとして、完全なレポを転送する必要があります。git バンドルでは git fetch , git pull のようなスタイルの操作を sneakernet 環境で行うことができますが、転送先のマシンにすでに作業バージョンのリポジトリがあることを想定しているようです。

への正しい呼び出しは何でしょうか。

  1. バンドル すべて 現在のレポのブランチ
  2. インストール先のディレクトリで新しいレポを起動する、つまりルートコミットが正しくインストールされるようにする

明確にするためにパッチをアップストリームに送りました。

`git clone` can use any bundle created without negative refspecs
(e.g., `new`, but not `old..new`).
If you want to match `git clone --mirror`, which would clone other
refs such as `refs/remotes/*`, use `--all`.
If you want to provide the same set of refs that a clone directly
from the source repository would get, use `--branches --tags` for
the `<git-rev-list-args>`.

そこで $ git bundle create repo.bundle --branches --tags はクローンに最もマッチします。

$ git bundle create repo.bundle --all は、リモート参照を含むソースマシンのミラーイメージを提供します。

どのように解決するのですか?

正しい呼び出しは何ですか。

  • 現在のレポのすべてのブランチをバンドルします。

シンプルですね。

$ git bundle create repo.bundle --all

ここで repo.bundle は作成したいバンドルファイルの名前です。 なお --all はリモート追跡ブランチを含まないことに注意してください...ちょうど普通の clone がそうでないのと同じです。

  • インストール先のディレクトリで新しいレポを起動する、つまり、ルートコミットを正しくインストールする。

まず clone は単に init + fetch (+ administrativia)です。

次に、リポジトリ URL が使えるところならどこでも bundle ファイルを使うことができるので、単純に clone をバンドルファイルから呼び出すことができます。

$ git clone repo.bundle

これは repo を git リポジトリとして作成します。