This causes cgit to serve error pages, which is undesirable. This reverts commit5229c9b232, reversing changes made tof2b211131f.
		
			
				
	
	
		
			205 lines
		
	
	
	
		
			6.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
	
		
			6.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
git-bundle(1)
 | 
						|
=============
 | 
						|
 | 
						|
NAME
 | 
						|
----
 | 
						|
git-bundle - Move objects and refs by archive
 | 
						|
 | 
						|
 | 
						|
SYNOPSIS
 | 
						|
--------
 | 
						|
[verse]
 | 
						|
'git bundle' create <file> <git-rev-list-args>
 | 
						|
'git bundle' verify <file>
 | 
						|
'git bundle' list-heads <file> [<refname>...]
 | 
						|
'git bundle' unbundle <file> [<refname>...]
 | 
						|
 | 
						|
DESCRIPTION
 | 
						|
-----------
 | 
						|
 | 
						|
Some workflows require that one or more branches of development on one
 | 
						|
machine be replicated on another machine, but the two machines cannot
 | 
						|
be directly connected, and therefore the interactive Git protocols (git,
 | 
						|
ssh, http) cannot be used.  This command provides support for
 | 
						|
'git fetch' and 'git pull' to operate by packaging objects and references
 | 
						|
in an archive at the originating machine, then importing those into
 | 
						|
another repository using 'git fetch' and 'git pull'
 | 
						|
after moving the archive by some means (e.g., by sneakernet).  As no
 | 
						|
direct connection between the repositories exists, the user must specify a
 | 
						|
basis for the bundle that is held by the destination repository: the
 | 
						|
bundle assumes that all objects in the basis are already in the
 | 
						|
destination repository.
 | 
						|
 | 
						|
OPTIONS
 | 
						|
-------
 | 
						|
 | 
						|
create <file>::
 | 
						|
	Used to create a bundle named 'file'.  This requires the
 | 
						|
	'git-rev-list-args' arguments to define the bundle contents.
 | 
						|
 | 
						|
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.
 | 
						|
	'git bundle' prints a list of missing commits, if any, and exits
 | 
						|
	with a non-zero status.
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
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'.
 | 
						|
 | 
						|
<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
 | 
						|
	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').
 | 
						|
 | 
						|
SPECIFYING REFERENCES
 | 
						|
---------------------
 | 
						|
 | 
						|
'git bundle' will only package references that are shown by
 | 
						|
'git show-ref': this includes heads, tags, and remote heads.  References
 | 
						|
such as `master~1` cannot be packaged, but are perfectly suitable for
 | 
						|
defining the basis.  More than one reference may be packaged, and more
 | 
						|
than one basis can be specified.  The objects packaged are those not
 | 
						|
contained in the union of the given bases.  Each basis can be
 | 
						|
specified explicitly (e.g. `^master~10`), or implicitly (e.g.
 | 
						|
`master~10..master`, `--since=10.days.ago master`).
 | 
						|
 | 
						|
It is very important that the basis used be held by the destination.
 | 
						|
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.
 | 
						|
 | 
						|
EXAMPLES
 | 
						|
--------
 | 
						|
 | 
						|
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 basis. 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
 | 
						|
basis, 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 basis 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 basis:
 | 
						|
 | 
						|
----------------
 | 
						|
$ 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
 | 
						|
----------------
 | 
						|
 | 
						|
GIT
 | 
						|
---
 | 
						|
Part of the linkgit:git[1] suite
 |