Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 1 | git-bundle(1) |
| 2 | ============= |
| 3 | |
| 4 | NAME |
| 5 | ---- |
| 6 | git-bundle - Move objects and refs by archive |
| 7 | |
| 8 | |
| 9 | SYNOPSIS |
| 10 | -------- |
Matthias Kestenholz | e448ff8 | 2007-05-18 15:39:33 +0200 | [diff] [blame] | 11 | [verse] |
Jeff King | 8b95521 | 2023-03-04 05:55:13 -0500 | [diff] [blame] | 12 | 'git bundle' create [-q | --quiet | --progress] |
brian m. carlson | c5aecfc | 2020-07-29 23:14:20 +0000 | [diff] [blame] | 13 | [--version=<version>] <file> <git-rev-list-args> |
Robin H. Johnson | e0eba64 | 2019-11-10 12:41:26 -0800 | [diff] [blame] | 14 | 'git bundle' verify [-q | --quiet] <file> |
Štěpán Němec | 62b4698 | 2010-10-08 19:31:15 +0200 | [diff] [blame] | 15 | 'git bundle' list-heads <file> [<refname>...] |
Ævar Arnfjörð Bjarmason | d941cc4 | 2021-09-05 09:34:45 +0200 | [diff] [blame] | 16 | 'git bundle' unbundle [--progress] <file> [<refname>...] |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 17 | |
| 18 | DESCRIPTION |
| 19 | ----------- |
| 20 | |
Ævar Arnfjörð Bjarmason | 5c8273d | 2021-07-31 10:23:04 +0200 | [diff] [blame] | 21 | Create, unpack, and manipulate "bundle" files. Bundles are used for |
| 22 | the "offline" transfer of Git objects without an active "server" |
| 23 | sitting on the other side of the network connection. |
Philip Oakley | 0e40a73 | 2019-10-20 12:03:06 +0100 | [diff] [blame] | 24 | |
Ævar Arnfjörð Bjarmason | 5c8273d | 2021-07-31 10:23:04 +0200 | [diff] [blame] | 25 | They can be used to create both incremental and full backups of a |
| 26 | repository, and to relay the state of the references in one repository |
| 27 | to another. |
Philip Oakley | 0e40a73 | 2019-10-20 12:03:06 +0100 | [diff] [blame] | 28 | |
Ævar Arnfjörð Bjarmason | 5c8273d | 2021-07-31 10:23:04 +0200 | [diff] [blame] | 29 | Git commands that fetch or otherwise "read" via protocols such as |
| 30 | `ssh://` and `https://` can also operate on bundle files. It is |
| 31 | possible linkgit:git-clone[1] a new repository from a bundle, to use |
| 32 | linkgit:git-fetch[1] to fetch from one, and to list the references |
| 33 | contained within it with linkgit:git-ls-remote[1]. There's no |
| 34 | corresponding "write" support, i.e.a 'git push' into a bundle is not |
| 35 | supported. |
| 36 | |
| 37 | See the "EXAMPLES" section below for examples of how to use bundles. |
| 38 | |
| 39 | BUNDLE FORMAT |
| 40 | ------------- |
| 41 | |
| 42 | Bundles are `.pack` files (see linkgit:git-pack-objects[1]) with a |
| 43 | header indicating what references are contained within the bundle. |
| 44 | |
Jacob Stopak | c9dba10 | 2022-09-11 03:23:20 -0700 | [diff] [blame] | 45 | Like the packed archive format itself bundles can either be |
Ævar Arnfjörð Bjarmason | 5c8273d | 2021-07-31 10:23:04 +0200 | [diff] [blame] | 46 | self-contained, or be created using exclusions. |
Ævar Arnfjörð Bjarmason | 9ab80dd | 2021-07-31 10:23:05 +0200 | [diff] [blame] | 47 | See the "OBJECT PREREQUISITES" section below. |
Ævar Arnfjörð Bjarmason | 5c8273d | 2021-07-31 10:23:04 +0200 | [diff] [blame] | 48 | |
| 49 | Bundles created using revision exclusions are "thin packs" created |
| 50 | using the `--thin` option to linkgit:git-pack-objects[1], and |
| 51 | unbundled using the `--fix-thin` option to linkgit:git-index-pack[1]. |
| 52 | |
| 53 | There is no option to create a "thick pack" when using revision |
Martin Ågren | a4dfb44 | 2021-10-24 19:08:21 +0200 | [diff] [blame] | 54 | exclusions, and users should not be concerned about the difference. By |
| 55 | using "thin packs", bundles created using exclusions are smaller in |
Ævar Arnfjörð Bjarmason | 5c8273d | 2021-07-31 10:23:04 +0200 | [diff] [blame] | 56 | size. That they're "thin" under the hood is merely noted here as a |
Martin Ågren | a4dfb44 | 2021-10-24 19:08:21 +0200 | [diff] [blame] | 57 | curiosity, and as a reference to other documentation. |
Ævar Arnfjörð Bjarmason | 5c8273d | 2021-07-31 10:23:04 +0200 | [diff] [blame] | 58 | |
Ævar Arnfjörð Bjarmason | 844739b | 2022-08-04 18:28:34 +0200 | [diff] [blame] | 59 | See linkgit:gitformat-bundle[5] for more details and the discussion of |
Ævar Arnfjörð Bjarmason | 977c47b | 2022-08-04 18:28:39 +0200 | [diff] [blame] | 60 | "thin pack" in linkgit:gitformat-pack[5] for further details. |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 61 | |
| 62 | OPTIONS |
| 63 | ------- |
| 64 | |
Robin H. Johnson | 79862b6 | 2019-11-10 12:41:25 -0800 | [diff] [blame] | 65 | create [options] <file> <git-rev-list-args>:: |
Michael J Gruber | a619056 | 2010-08-23 11:02:38 +0200 | [diff] [blame] | 66 | Used to create a bundle named 'file'. This requires the |
Philip Oakley | 0e40a73 | 2019-10-20 12:03:06 +0100 | [diff] [blame] | 67 | '<git-rev-list-args>' arguments to define the bundle contents. |
Robin H. Johnson | 79862b6 | 2019-11-10 12:41:25 -0800 | [diff] [blame] | 68 | 'options' contains the options specific to the 'git bundle create' |
Jeff King | ef3b291 | 2023-03-04 05:26:40 -0500 | [diff] [blame] | 69 | subcommand. If 'file' is `-`, the bundle is written to stdout. |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 70 | |
| 71 | verify <file>:: |
Michael J Gruber | a619056 | 2010-08-23 11:02:38 +0200 | [diff] [blame] | 72 | Used to check that a bundle file is valid and will apply |
| 73 | cleanly to the current repository. This includes checks on the |
| 74 | bundle format itself as well as checking that the prerequisite |
| 75 | commits exist and are fully linked in the current repository. |
Derrick Stolee | 017303e | 2022-03-22 17:28:38 +0000 | [diff] [blame] | 76 | Then, 'git bundle' prints a list of missing commits, if any. |
| 77 | Finally, information about additional capabilities, such as "object |
Ævar Arnfjörð Bjarmason | 844739b | 2022-08-04 18:28:34 +0200 | [diff] [blame] | 78 | filter", is printed. See "Capabilities" in linkgit:gitformat-bundle[5] |
Derrick Stolee | 017303e | 2022-03-22 17:28:38 +0000 | [diff] [blame] | 79 | for more information. The exit code is zero for success, but will |
Jeff King | ef3b291 | 2023-03-04 05:26:40 -0500 | [diff] [blame] | 80 | be nonzero if the bundle file is invalid. If 'file' is `-`, the |
| 81 | bundle is read from stdin. |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 82 | |
| 83 | list-heads <file>:: |
Michael J Gruber | a619056 | 2010-08-23 11:02:38 +0200 | [diff] [blame] | 84 | Lists the references defined in the bundle. If followed by a |
| 85 | list of references, only references matching those given are |
Jeff King | ef3b291 | 2023-03-04 05:26:40 -0500 | [diff] [blame] | 86 | printed out. If 'file' is `-`, the bundle is read from stdin. |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 87 | |
| 88 | unbundle <file>:: |
Michael J Gruber | a619056 | 2010-08-23 11:02:38 +0200 | [diff] [blame] | 89 | Passes the objects in the bundle to 'git index-pack' |
| 90 | for storage in the repository, then prints the names of all |
| 91 | defined references. If a list of references is given, only |
| 92 | references matching those in the list are printed. This command is |
| 93 | really plumbing, intended to be called only by 'git fetch'. |
Jeff King | ef3b291 | 2023-03-04 05:26:40 -0500 | [diff] [blame] | 94 | If 'file' is `-`, the bundle is read from stdin. |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 95 | |
Michael J Gruber | 5e1f960 | 2010-08-23 11:02:37 +0200 | [diff] [blame] | 96 | <git-rev-list-args>:: |
Michael J Gruber | a619056 | 2010-08-23 11:02:38 +0200 | [diff] [blame] | 97 | A list of arguments, acceptable to 'git rev-parse' and |
Ralf Wildenhues | 469bfc9 | 2011-01-03 20:03:34 +0100 | [diff] [blame] | 98 | 'git rev-list' (and containing a named ref, see SPECIFYING REFERENCES |
Michael J Gruber | 1884df1 | 2010-08-23 11:02:39 +0200 | [diff] [blame] | 99 | below), that specifies the specific objects and references |
Jeff King | 6cf378f | 2012-04-26 04:51:57 -0400 | [diff] [blame] | 100 | to transport. For example, `master~10..master` causes the |
Michael J Gruber | a619056 | 2010-08-23 11:02:38 +0200 | [diff] [blame] | 101 | current master reference to be packaged along with all objects |
| 102 | added since its 10th ancestor commit. There is no explicit |
| 103 | limit to the number of references and objects that may be |
| 104 | packaged. |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 105 | |
| 106 | |
Štěpán Němec | 62b4698 | 2010-10-08 19:31:15 +0200 | [diff] [blame] | 107 | [<refname>...]:: |
Michael J Gruber | a619056 | 2010-08-23 11:02:38 +0200 | [diff] [blame] | 108 | A list of references used to limit the references reported as |
| 109 | available. This is principally of use to 'git fetch', which |
| 110 | expects to receive only those references asked for and not |
| 111 | necessarily everything in the pack (in this case, 'git bundle' acts |
| 112 | like 'git fetch-pack'). |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 113 | |
Robin H. Johnson | 79862b6 | 2019-11-10 12:41:25 -0800 | [diff] [blame] | 114 | --progress:: |
| 115 | Progress status is reported on the standard error stream |
| 116 | by default when it is attached to a terminal, unless -q |
| 117 | is specified. This flag forces progress status even if |
| 118 | the standard error stream is not directed to a terminal. |
| 119 | |
brian m. carlson | c5aecfc | 2020-07-29 23:14:20 +0000 | [diff] [blame] | 120 | --version=<version>:: |
| 121 | Specify the bundle version. Version 2 is the older format and can only be |
| 122 | used with SHA-1 repositories; the newer version 3 contains capabilities that |
| 123 | permit extensions. The default is the oldest supported format, based on the |
| 124 | hash algorithm in use. |
| 125 | |
Robin H. Johnson | 79862b6 | 2019-11-10 12:41:25 -0800 | [diff] [blame] | 126 | -q:: |
| 127 | --quiet:: |
| 128 | This flag makes the command not to report its progress |
| 129 | on the standard error stream. |
| 130 | |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 131 | SPECIFYING REFERENCES |
| 132 | --------------------- |
| 133 | |
Martin Ågren | a4dfb44 | 2021-10-24 19:08:21 +0200 | [diff] [blame] | 134 | Revisions must be accompanied by reference names to be packaged in a |
Ævar Arnfjörð Bjarmason | 0bb92f3 | 2021-07-31 10:23:06 +0200 | [diff] [blame] | 135 | bundle. |
| 136 | |
Ævar Arnfjörð Bjarmason | 1d9c8da | 2021-07-31 10:23:07 +0200 | [diff] [blame] | 137 | More than one reference may be packaged, and more than one set of prerequisite objects can |
Ævar Arnfjörð Bjarmason | 0bb92f3 | 2021-07-31 10:23:06 +0200 | [diff] [blame] | 138 | be specified. The objects packaged are those not contained in the |
Ævar Arnfjörð Bjarmason | 1d9c8da | 2021-07-31 10:23:07 +0200 | [diff] [blame] | 139 | union of the prerequisites. |
Ævar Arnfjörð Bjarmason | 0bb92f3 | 2021-07-31 10:23:06 +0200 | [diff] [blame] | 140 | |
| 141 | The 'git bundle create' command resolves the reference names for you |
| 142 | using the same rules as `git rev-parse --abbrev-ref=loose`. Each |
Ævar Arnfjörð Bjarmason | 1d9c8da | 2021-07-31 10:23:07 +0200 | [diff] [blame] | 143 | prerequisite can be specified explicitly (e.g. `^master~10`), or implicitly |
Ævar Arnfjörð Bjarmason | 0bb92f3 | 2021-07-31 10:23:06 +0200 | [diff] [blame] | 144 | (e.g. `master~10..master`, `--since=10.days.ago master`). |
| 145 | |
| 146 | All of these simple cases are OK (assuming we have a "master" and |
| 147 | "next" branch): |
| 148 | |
| 149 | ---------------- |
| 150 | $ git bundle create master.bundle master |
| 151 | $ echo master | git bundle create master.bundle --stdin |
| 152 | $ git bundle create master-and-next.bundle master next |
| 153 | $ (echo master; echo next) | git bundle create master-and-next.bundle --stdin |
| 154 | ---------------- |
| 155 | |
| 156 | And so are these (and the same but omitted `--stdin` examples): |
| 157 | |
| 158 | ---------------- |
| 159 | $ git bundle create recent-master.bundle master~10..master |
| 160 | $ git bundle create recent-updates.bundle master~10..master next~5..next |
| 161 | ---------------- |
| 162 | |
| 163 | A revision name or a range whose right-hand-side cannot be resolved to |
| 164 | a reference is not accepted: |
| 165 | |
| 166 | ---------------- |
| 167 | $ git bundle create HEAD.bundle $(git rev-parse HEAD) |
| 168 | fatal: Refusing to create empty bundle. |
| 169 | $ git bundle create master-yesterday.bundle master~10..master~5 |
| 170 | fatal: Refusing to create empty bundle. |
| 171 | ---------------- |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 172 | |
Ævar Arnfjörð Bjarmason | 9ab80dd | 2021-07-31 10:23:05 +0200 | [diff] [blame] | 173 | OBJECT PREREQUISITES |
| 174 | -------------------- |
| 175 | |
| 176 | When creating bundles it is possible to create a self-contained bundle |
| 177 | that can be unbundled in a repository with no common history, as well |
| 178 | as providing negative revisions to exclude objects needed in the |
| 179 | earlier parts of the history. |
| 180 | |
| 181 | Feeding a revision such as `new` to `git bundle create` will create a |
| 182 | bundle file that contains all the objects reachable from the revision |
| 183 | `new`. That bundle can be unbundled in any repository to obtain a full |
| 184 | history that leads to the revision `new`: |
| 185 | |
| 186 | ---------------- |
| 187 | $ git bundle create full.bundle new |
| 188 | ---------------- |
| 189 | |
| 190 | A revision range such as `old..new` will produce a bundle file that |
| 191 | will require the revision `old` (and any objects reachable from it) |
| 192 | to exist for the bundle to be "unbundle"-able: |
| 193 | |
| 194 | ---------------- |
| 195 | $ git bundle create full.bundle old..new |
| 196 | ---------------- |
| 197 | |
| 198 | A self-contained bundle without any prerequisites can be extracted |
| 199 | into anywhere, even into an empty repository, or be cloned from |
| 200 | (i.e., `new`, but not `old..new`). |
| 201 | |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 202 | It is okay to err on the side of caution, causing the bundle file |
| 203 | to contain objects already in the destination, as these are ignored |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 204 | when unpacking at the destination. |
| 205 | |
Philip Oakley | 0e40a73 | 2019-10-20 12:03:06 +0100 | [diff] [blame] | 206 | If you want to match `git clone --mirror`, which would include your |
| 207 | refs such as `refs/remotes/*`, use `--all`. |
| 208 | If you want to provide the same set of refs that a clone directly |
| 209 | from the source repository would get, use `--branches --tags` for |
| 210 | the `<git-rev-list-args>`. |
| 211 | |
Ævar Arnfjörð Bjarmason | 9ab80dd | 2021-07-31 10:23:05 +0200 | [diff] [blame] | 212 | The 'git bundle verify' command can be used to check whether your |
| 213 | recipient repository has the required prerequisite commits for a |
| 214 | bundle. |
| 215 | |
Nguyễn Thái Ngọc Duy | 76a8788 | 2018-04-30 17:35:33 +0200 | [diff] [blame] | 216 | EXAMPLES |
| 217 | -------- |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 218 | |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 219 | Assume you want to transfer the history from a repository R1 on machine A |
| 220 | to another repository R2 on machine B. |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 221 | For whatever reason, direct connection between A and B is not allowed, |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 222 | but we can move data from A to B via some mechanism (CD, email, etc.). |
| 223 | We want to update R2 with development made on the branch master in R1. |
Santi Béjar | 99d8ea2 | 2008-02-24 14:42:40 +0100 | [diff] [blame] | 224 | |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 225 | To bootstrap the process, you can first create a bundle that does not have |
Ævar Arnfjörð Bjarmason | 1d9c8da | 2021-07-31 10:23:07 +0200 | [diff] [blame] | 226 | any prerequisites. You can use a tag to remember up to what commit you last |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 227 | processed, in order to make it easy to later update the other repository |
| 228 | with an incremental bundle: |
Santi Béjar | 99d8ea2 | 2008-02-24 14:42:40 +0100 | [diff] [blame] | 229 | |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 230 | ---------------- |
| 231 | machineA$ cd R1 |
Santi Béjar | ffe4da1 | 2009-02-07 23:21:49 +0100 | [diff] [blame] | 232 | machineA$ git bundle create file.bundle master |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 233 | machineA$ git tag -f lastR2bundle master |
| 234 | ---------------- |
Santi Béjar | 99d8ea2 | 2008-02-24 14:42:40 +0100 | [diff] [blame] | 235 | |
Junio C Hamano | b5fb477 | 2013-01-01 12:46:15 -0800 | [diff] [blame] | 236 | Then you transfer file.bundle to the target machine B. Because this |
| 237 | bundle does not require any existing object to be extracted, you can |
| 238 | create a new repository on machine B by cloning from it: |
Santi Béjar | 99d8ea2 | 2008-02-24 14:42:40 +0100 | [diff] [blame] | 239 | |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 240 | ---------------- |
Kirill Brilliantov | ded6aa6 | 2013-01-01 17:54:44 +0400 | [diff] [blame] | 241 | machineB$ git clone -b master /home/me/tmp/file.bundle R2 |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 242 | ---------------- |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 243 | |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 244 | This will define a remote called "origin" in the resulting repository that |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 245 | lets you fetch and pull from the bundle. The $GIT_DIR/config file in R2 will |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 246 | have an entry like this: |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 247 | |
Santi Béjar | 99d8ea2 | 2008-02-24 14:42:40 +0100 | [diff] [blame] | 248 | ------------------------ |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 249 | [remote "origin"] |
Santi Béjar | ffe4da1 | 2009-02-07 23:21:49 +0100 | [diff] [blame] | 250 | url = /home/me/tmp/file.bundle |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 251 | fetch = refs/heads/*:refs/remotes/origin/* |
Santi Béjar | 99d8ea2 | 2008-02-24 14:42:40 +0100 | [diff] [blame] | 252 | ------------------------ |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 253 | |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 254 | To update the resulting mine.git repository, you can fetch or pull after |
| 255 | replacing the bundle stored at /home/me/tmp/file.bundle with incremental |
| 256 | updates. |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 257 | |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 258 | After working some more in the original repository, you can create an |
| 259 | incremental bundle to update the other repository: |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 260 | |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 261 | ---------------- |
| 262 | machineA$ cd R1 |
Santi Béjar | ffe4da1 | 2009-02-07 23:21:49 +0100 | [diff] [blame] | 263 | machineA$ git bundle create file.bundle lastR2bundle..master |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 264 | machineA$ git tag -f lastR2bundle master |
| 265 | ---------------- |
| 266 | |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 267 | You then transfer the bundle to the other machine to replace |
| 268 | /home/me/tmp/file.bundle, and pull from it. |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 269 | |
| 270 | ---------------- |
| 271 | machineB$ cd R2 |
| 272 | machineB$ git pull |
| 273 | ---------------- |
| 274 | |
| 275 | If you know up to what commit the intended recipient repository should |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 276 | have the necessary objects, you can use that knowledge to specify the |
Ævar Arnfjörð Bjarmason | 1d9c8da | 2021-07-31 10:23:07 +0200 | [diff] [blame] | 277 | prerequisites, giving a cut-off point to limit the revisions and objects that go |
Michael J Gruber | 5e1f960 | 2010-08-23 11:02:37 +0200 | [diff] [blame] | 278 | in the resulting bundle. The previous example used the lastR2bundle tag |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 279 | for this purpose, but you can use any other options that you would give to |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 280 | the linkgit:git-log[1] command. Here are more examples: |
| 281 | |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 282 | You can use a tag that is present in both: |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 283 | |
| 284 | ---------------- |
| 285 | $ git bundle create mybundle v1.0.0..master |
| 286 | ---------------- |
| 287 | |
Ævar Arnfjörð Bjarmason | 1d9c8da | 2021-07-31 10:23:07 +0200 | [diff] [blame] | 288 | You can use a prerequisite based on time: |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 289 | |
| 290 | ---------------- |
| 291 | $ git bundle create mybundle --since=10.days master |
| 292 | ---------------- |
| 293 | |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 294 | You can use the number of commits: |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 295 | |
| 296 | ---------------- |
| 297 | $ git bundle create mybundle -10 master |
| 298 | ---------------- |
| 299 | |
| 300 | You can run `git-bundle verify` to see if you can extract from a bundle |
Ævar Arnfjörð Bjarmason | 1d9c8da | 2021-07-31 10:23:07 +0200 | [diff] [blame] | 301 | that was created with a prerequisite: |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 302 | |
| 303 | ---------------- |
| 304 | $ git bundle verify mybundle |
| 305 | ---------------- |
| 306 | |
| 307 | This will list what commits you must have in order to extract from the |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 308 | bundle and will error out if you do not have them. |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 309 | |
| 310 | A bundle from a recipient repository's point of view is just like a |
David J. Mellor | 1d52b02 | 2009-03-22 18:00:14 -0700 | [diff] [blame] | 311 | regular repository which it fetches or pulls from. You can, for example, map |
| 312 | references when fetching: |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 313 | |
| 314 | ---------------- |
| 315 | $ git fetch mybundle master:localRef |
| 316 | ---------------- |
| 317 | |
Michael J Gruber | 5e1f960 | 2010-08-23 11:02:37 +0200 | [diff] [blame] | 318 | You can also see what references it offers: |
Nanako Shiraishi | 8aa7eeb | 2009-02-04 18:15:29 +0900 | [diff] [blame] | 319 | |
| 320 | ---------------- |
| 321 | $ git ls-remote mybundle |
| 322 | ---------------- |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 323 | |
Ævar Arnfjörð Bjarmason | 844739b | 2022-08-04 18:28:34 +0200 | [diff] [blame] | 324 | FILE FORMAT |
| 325 | ----------- |
| 326 | |
| 327 | See linkgit:gitformat-bundle[5]. |
| 328 | |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 329 | GIT |
| 330 | --- |
Christian Couder | 9e1f0a8 | 2008-06-06 09:07:32 +0200 | [diff] [blame] | 331 | Part of the linkgit:git[1] suite |