git-bundle man page on OpenBSD

Man page or keyword search:  
man Server   11362 pages
apropos Keyword Search (all sections)
Output format
OpenBSD logo
[printable version]



GIT-BUNDLE(1)					    GIT-BUNDLE(1)

NAME
       git-bundle - Move objects and refs by archive

SYNOPSIS
       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, rsync, http) cannot be used. This command  provides  support
       for  git	 fetch and git pull to operate by packaging objects and refer-
       ences 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 reposi-
       tory.

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 refer-
	      ences. If a list of references is given, only references	match-
	      ing those in the list are printed. This command is really plumb-
	      ing, intended to be called only by git fetch.

								1

GIT-BUNDLE(1)					    GIT-BUNDLE(1)

       <git-rev-list-args>
	      A list  of  arguments,  acceptable  to  git  rev-parse  and  git
	      rev-list	(and  containg	a named ref, see SPECIFYING REFERENCES
	      below), that specifies the specific objects  and	references  to
	      transport.  For example, master{tilde}10..master causes the cur-
	      rent 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  nec-
	      essarily	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 mas-
       ter{tilde}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{tilde}10), or implicitly  (e.g.  master{tilde}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  con-
       tain  objects  already  in  the	destination, as these are ignored when
       unpacking at the destination.

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  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:

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

								2

GIT-BUNDLE(1)					    GIT-BUNDLE(1)

       .ft

       Then  you transfer file.bundle to the target machine B. If you are cre-
       ating the repository on machine B, then you can clone from  the	bundle
       as  if it were a remote repository instead of creating an empty reposi-
       tory and then pulling or fetching objects from the bundle:

       .ft C
       machineB$ git clone /home/me/tmp/file.bundle R2
       .ft

       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:

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

       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:

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

       You   then  transfer  the  bundle  to  the  other  machine  to  replace

								3

GIT-BUNDLE(1)					    GIT-BUNDLE(1)

       /home/me/tmp/file.bundle, and pull from it.

       .ft C
       machineB$ cd R2
       machineB$ git pull
       .ft

       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 git-log(1) command. Here are more examples:

       You can use a tag that is present in both:

       .ft C
       $ git bundle create mybundle v1.0.0..master
       .ft

       You can use a basis based on time:

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

       You can use the number of commits:

       .ft C
       $ git bundle create mybundle -10 master
       .ft

       You  can	 run git-bundle verify to see if you can extract from a bundle

								4

GIT-BUNDLE(1)					    GIT-BUNDLE(1)

       that was created with a basis:

       .ft C
       $ git bundle verify mybundle
       .ft

       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 exam-
       ple, map references when fetching:

       .ft C
       $ git fetch mybundle master:localRef
       .ft

       You can also see what references it offers:

       .ft C
       $ git ls-remote mybundle
       .ft

AUTHOR
       Written	 by  Mark  Levedahl  <mdl123@verizon.net:  mailto:mdl123@veri-
       zon.net>

GIT
       Part of the git(1) suite

								5

[top]

List of man pages available for OpenBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net