git-bundle(1)
=============

NAME
----
git-bundle - Move objects and refs by archive


SYNOPSIS
--------
[verse]
'git bundle' create [-q | --quiet | --progress]
		    [--version=<version>] <file> <git-rev-list-args>
'git bundle' verify [-q | --quiet] <file>
'git bundle' list-heads <file> [<refname>...]
'git bundle' unbundle [--progress] <file> [<refname>...]

DESCRIPTION
-----------

Create, unpack, and manipulate "bundle" files. 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 (see the "full backup" example in "EXAMPLES"), and to relay
the state of the references in one repository to another (see the second
example).

Git commands that fetch or otherwise "read" via protocols such as
`ssh://` and `https://` can also operate on bundle files. It is
possible linkgit:git-clone[1] a new repository from a bundle, to use
linkgit:git-fetch[1] to fetch from one, and to list the references
contained within it with linkgit:git-ls-remote[1]. There's no
corresponding "write" support, i.e. a 'git push' into a bundle is not
supported.

BUNDLE FORMAT
-------------

Bundles are `.pack` files (see linkgit:git-pack-objects[1]) with a
header indicating what references are contained within the bundle.

Like the packed archive format itself bundles can either be
self-contained, or be created using exclusions.
See the <<OBJECT_PREREQUISITES,"OBJECT PREREQUISITES">> section below.

Bundles created using revision exclusions are "thin packs" created
using the `--thin` option to linkgit:git-pack-objects[1], and
unbundled using the `--fix-thin` option to linkgit:git-index-pack[1].

There is no option to create a "thick pack" when using revision
exclusions, and users should not be concerned about the difference. By
using "thin packs", bundles created using exclusions are smaller in
size. That they're "thin" under the hood is merely noted here as a
curiosity, and as a reference to other documentation.

See linkgit:gitformat-bundle[5] for more details and the discussion of
"thin pack" in linkgit:gitformat-pack[5] for further details.

OPTIONS
-------

create [options] <file> <git-rev-list-args>::
	Used to create a bundle named 'file'.  This requires the
	'<git-rev-list-args>' arguments to define the bundle contents.
	'options' contains the options specific to the 'git bundle create'
	subcommand. If 'file' is `-`, the bundle is written to stdout.

verify <file>::
	Used to check that a bundle file is valid and will apply
	cleanly to the current repository.  This includes checks on the
	bundle format itself as well as checking that the prerequisite
	commits exist and are fully linked in the current repository.
	Then, 'git bundle' prints a list of missing commits, if any.
	Finally, information about additional capabilities, such as "object
	filter", is printed. See "Capabilities" in linkgit:gitformat-bundle[5]
	for more information. The exit code is zero for success, but will
	be nonzero if the bundle file is invalid. If 'file' is `-`, the
	bundle is read from stdin.

list-heads <file>::
	Lists the references defined in the bundle.  If followed by a
	list of references, only references matching those given are
	printed out. If 'file' is `-`, the bundle is read from stdin.

unbundle <file>::
	Passes the objects in the bundle to 'git index-pack'
	for storage in the repository, then prints the names of all
	defined references. If a list of references is given, only
	references matching those in the list are printed. This command is
	really plumbing, intended to be called only by 'git fetch'.
	If 'file' is `-`, the bundle is read from stdin.

<git-rev-list-args>::
	A list of arguments, acceptable to 'git rev-parse' and
	'git rev-list' (and containing a named ref, see
	<<SPECIFYING_REFERENCES,SPECIFYING REFERENCES>>
	below), that specifies the specific objects and references
	to transport.  For example, `master~10..master` causes the
	current master reference to be packaged along with all objects
	added since its 10th ancestor commit.  There is no explicit
	limit to the number of references and objects that may be
	packaged.


[<refname>...]::
	A list of references used to limit the references reported as
	available. This is principally of use to 'git fetch', which
	expects to receive only those references asked for and not
	necessarily everything in the pack (in this case, 'git bundle' acts
	like 'git fetch-pack').

--progress::
	Progress status is reported on the standard error stream
	by default when it is attached to a terminal, unless -q
	is specified. This flag forces progress status even if
	the standard error stream is not directed to a terminal.

--version=<version>::
	Specify the bundle version.  Version 2 is the older format and can only be
	used with SHA-1 repositories; the newer version 3 contains capabilities that
	permit extensions. The default is the oldest supported format, based on the
	hash algorithm in use.

-q::
--quiet::
	This flag makes the command not to report its progress
	on the standard error stream.

[[SPECIFYING_REFERENCES]]
SPECIFYING REFERENCES
---------------------

Revisions must be accompanied by reference names to be packaged in a
bundle.  Alternatively `--all` can be used to package all refs.

More than one reference may be packaged, and more than one set of prerequisite objects can
be specified.  The objects packaged are those not contained in the
union of the prerequisites.

The 'git bundle create' command resolves the reference names for you
using the same rules as `git rev-parse --abbrev-ref=loose`. Each
prerequisite can be specified explicitly (e.g. `^master~10`), or implicitly
(e.g. `master~10..master`, `--since=10.days.ago master`).

All of these simple cases are OK (assuming we have a "master" and
"next" branch):

----------------
$ git bundle create master.bundle master
$ echo master | git bundle create master.bundle --stdin
$ git bundle create master-and-next.bundle master next
$ (echo master; echo next) | git bundle create master-and-next.bundle --stdin
----------------

And so are these (and the same but omitted `--stdin` examples):

----------------
$ git bundle create recent-master.bundle master~10..master
$ git bundle create recent-updates.bundle master~10..master next~5..next
----------------

A revision name or a range whose right-hand-side cannot be resolved to
a reference is not accepted:

----------------
$ git bundle create HEAD.bundle $(git rev-parse HEAD)
fatal: Refusing to create empty bundle.
$ git bundle create master-yesterday.bundle master~10..master~5
fatal: Refusing to create empty bundle.
----------------

[[OBJECT_PREREQUISITES]]
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` to `git bundle create` will create a
bundle file that contains all the objects reachable from the revision
`new`. That bundle can be unbundled in any repository to obtain a full
history that leads to the revision `new`:

----------------
$ git bundle create full.bundle new
----------------

A revision range such as `old..new` will produce a bundle file that
will require the revision `old` (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 not `old..new`).

It is okay to err on the side of caution, causing the bundle file
to contain objects already in the destination, as these are ignored
when unpacking at the destination.

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>`.

The 'git bundle verify' command can be used to check whether your
recipient repository has the required prerequisite commits for a
bundle.

EXAMPLES
--------

We'll discuss two cases:

1. Taking a full backup of a repository
2. Transferring the history of a repository to another machine when the
   two machines have no direct connection

First let's consider a full backup of the repository.  The following
command will take a full backup of the repository in the sense that all
refs are included in the bundle:

----------------
$ git bundle create backup.bundle --all
----------------

But note again that this is only for the refs, i.e. you will only
include refs and commits reachable from those refs.  You will not
include other local state, such as the contents of the index, working
tree, the stash, per-repository configuration, hooks, etc.

You can later recover that repository by using for example
linkgit:git-clone[1]:

----------------
$ git clone backup.bundle <new directory>
----------------

For the next example, assume you want to transfer the history from a
repository R1 on machine A to another repository R2 on machine B.
For whatever reason, direct connection between A and B is not allowed,
but we can move data from A to B via some mechanism (CD, email, etc.).
We want to update R2 with development made on the branch master in R1.

To bootstrap the process, you can first create a bundle that does not have
any prerequisites. You can use a tag to remember up to what commit you last
processed, in order to make it easy to later update the other repository
with an incremental bundle:

----------------
machineA$ cd R1
machineA$ git bundle create file.bundle master
machineA$ git tag -f lastR2bundle master
----------------

Then you transfer file.bundle to the target machine B. Because this
bundle does not require any existing object to be extracted, you can
create a new repository on machine B by cloning from it:

----------------
machineB$ git clone -b master /home/me/tmp/file.bundle R2
----------------

This will define a remote called "origin" in the resulting repository that
lets you fetch and pull from the bundle. The $GIT_DIR/config file in R2 will
have an entry like this:

------------------------
[remote "origin"]
    url = /home/me/tmp/file.bundle
    fetch = refs/heads/*:refs/remotes/origin/*
------------------------

To update the resulting mine.git repository, you can fetch or pull after
replacing the bundle stored at /home/me/tmp/file.bundle with incremental
updates.

After working some more in the original repository, you can create an
incremental bundle to update the other repository:

----------------
machineA$ cd R1
machineA$ git bundle create file.bundle lastR2bundle..master
machineA$ git tag -f lastR2bundle master
----------------

You then transfer the bundle to the other machine to replace
/home/me/tmp/file.bundle, and pull from it.

----------------
machineB$ cd R2
machineB$ git pull
----------------

If you know up to what commit the intended recipient repository should
have the necessary objects, you can use that knowledge to specify the
prerequisites, giving a cut-off point to limit the revisions and objects that go
in the resulting bundle. The previous example used the lastR2bundle tag
for this purpose, but you can use any other options that you would give to
the linkgit:git-log[1] command. Here are more examples:

You can use a tag that is present in both:

----------------
$ git bundle create mybundle v1.0.0..master
----------------

You can use a prerequisite based on time:

----------------
$ git bundle create mybundle --since=10.days master
----------------

You can use the number of commits:

----------------
$ git bundle create mybundle -10 master
----------------

You can run `git-bundle verify` to see if you can extract from a bundle
that was created with a prerequisite:

----------------
$ git bundle verify mybundle
----------------

This will list what commits you must have in order to extract from the
bundle and will error out if you do not have them.

A bundle from a recipient repository's point of view is just like a
regular repository which it fetches or pulls from. You can, for example, map
references when fetching:

----------------
$ git fetch mybundle master:localRef
----------------

You can also see what references it offers:

----------------
$ git ls-remote mybundle
----------------

DISCUSSION
----------

A naive way to make a full backup of a repository is to use something to
the effect of `cp -r <repo> <destination>`.  This is discouraged since
the repository could be written to during the copy operation.  In turn
some files at `<destination>` could be corrupted.

This is why it is recommended to use Git tooling for making repository
backups, either with this command or with e.g. linkgit:git-clone[1].
But keep in mind that these tools will not help you backup state other
than refs and commits.  In other words they will not help you backup
contents of the index, working tree, the stash, per-repository
configuration, hooks, etc.

See also linkgit:gitfaq[7], section "TRANSFERS" for a discussion of the
problems associated with file syncing across systems.

FILE FORMAT
-----------

See linkgit:gitformat-bundle[5].

GIT
---
Part of the linkgit:git[1] suite
