Bundles are used for the "offline" transfer of Git objects without an active "server" sitting on the other side of the network connection. They can be used to create both incremental and full backups of a repository, and to relay the state of the references in one repository to another.
You cannot push directly to a bundle file. A bundle file is a compressed representation of a repository, and to modify it would involve unbundling, pushing, and bundling again.
What is the right invocation to:
- Bundle all the branches in the current repo
Simple:
$ git bundle create repo.bundle --all
Here repo.bundle
is the name of bundle file you want to create. Note that --all
would not include remote-tracking branches... just like ordinary clone wouldn't either.
- Start up the new repo on the destination directory, i.e. get the root commit correctly installed
First, clone
is just init
+ fetch
(+ administrativia).
Second, you can use bundle file everywhere the repository URL can be used, so you can simply clone
from a bundle file:
$ git clone repo.bundle
This would create repo
as a git repository.
First clone the repository, and include the --mirror
option.
git clone --mirror [email protected]:path/repo.git
This ensures all remote branched are also local branches ready for bundeling.
Then run
git bundle create repo.bundle --all
as described by the answer from Jakub Narębski
I would suggest you tar or zip the .git folder and simply unpack it in the new location and then do git reset --hard HEAD
. Everything required for all the branches is under .git and all you should need to do is adjust any remotes in the .git/config file or remove them.
tar cf myrepo.tgz .git
cp myrepo.tgz [USB_STICK]
... move to new machine ...
mkdir myrepo && cd myrepo
tar xpf [USB_STICK]/myrepo.tgz
git reset --hard HEAD
With Git 2.34 (Q4 2021), git blundle
is further clarified:
See commit 1d9c8da, commit 0bb92f3, commit 9ab80dd, commit 5c8273d (31 Jul 2021) by Ævar Arnfjörð Bjarmason (avar
).
(Merged by Junio C Hamano -- gitster
-- in commit f19b275, 24 Aug 2021)
bundle doc
: elaborate on object prerequisitesSigned-off-by: Ævar Arnfjörð Bjarmason
Split out the discussion bout "object prerequisites" into its own section, and add some more examples of the common cases.
See 2e0afaf ("Add git-bundle: move objects and references by archive", 2007-02-22, Git v1.5.1-rc1 -- merge) for the introduction of the documentation being changed here.
git bundle
now includes in its man page:
See the "OBJECT PREREQUISITES" section below.
git bundle
now includes in its man page:
OBJECT PREREQUISITES
When creating bundles it is possible to create a self-contained bundle that can be unbundled in a repository with no common history, as well as providing negative revisions to exclude objects needed in the earlier parts of the history.
Feeding a revision such as
new
togit bundle create
will create a bundle file that contains all the objects reachable from the revisionnew
. That bundle can be unbundled in any repository to obtain a full history that leads to the revisionnew
:$ git bundle create full.bundle new
A revision range such as
old..new
will produce a bundle file that will require the revisionold
(and any objects reachable from it) to exist for the bundle to be "unbundle"-able:$ git bundle create full.bundle old..new
A self-contained bundle without any prerequisites can be extracted into anywhere, even into an empty repository, or be cloned from (i.e.,
new
, but notold..new
).
git bundle
now includes in its man page:
The 'git bundle verify' command can be used to check whether your recipient repository has the required prerequisite commits for a bundle.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With