* [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup @ 2024-10-20 19:14 kristofferhaugsbakk 2024-10-20 19:14 ` [PATCH 1/4] Documentation/git-bundle.txt: mention --all in Synopsis kristofferhaugsbakk ` (6 more replies) 0 siblings, 7 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-10-20 19:14 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab From: Kristoffer Haugsbakk <code@khaugsbakk.name> The documentation for git-bundle(1) now properly covers `--all`, the option that can be used to package all refs. A "Discussions" section has also been added to address the naive backup strategy of copying a Git repository manually. --- The part above was for the-topic-summary. And that about summarizes it. Okay well. I was prompted by SO questions like this one: https://stackoverflow.com/questions/5578270/fully-backup-a-git-repo I then compared VonC’s answer to the man page. The first thing I noticed was that `--all` wasn’t in the synopsis. Then one patch lead to another. +Cc is just `./contrib/contacts/git-contacts` minus Junio. Cheers Kristoffer Haugsbakk (4): Documentation/git-bundle.txt: mention --all in Synopsis Documentation/git-bundle.txt: mention full backup example Documentation/git-bundle.txt: mention --all in spec. refs Documentation/git-bundle.txt: discuss naïve backups Documentation/git-bundle.txt | 21 +++++++++++++++++++-- builtin/bundle.c | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) base-commit: 34b6ce9b30747131b6e781ff718a45328aa887d0 -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 1/4] Documentation/git-bundle.txt: mention --all in Synopsis 2024-10-20 19:14 [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup kristofferhaugsbakk @ 2024-10-20 19:14 ` kristofferhaugsbakk 2024-10-20 19:33 ` Kristoffer Haugsbakk 2024-10-20 19:15 ` [PATCH 2/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk ` (5 subsequent siblings) 6 siblings, 1 reply; 37+ messages in thread From: kristofferhaugsbakk @ 2024-10-20 19:14 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab From: Kristoffer Haugsbakk <code@khaugsbakk.name> `--all` is convenient for bundling all refs. But it is only mentioned once, halfway through the doc, under the demure section “Object prerequisites”. It deserves to be mentioned as an alternative to `<git-rev-list-args>`. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): Long line in bundle.c now? Documentation/git-bundle.txt | 2 +- builtin/bundle.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 3ab42a19cae..7579dd309ac 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -10,7 +10,7 @@ SYNOPSIS -------- [verse] 'git bundle' create [-q | --quiet | --progress] - [--version=<version>] <file> <git-rev-list-args> + [--version=<version>] <file> (<git-rev-list-args> | --all) 'git bundle' verify [-q | --quiet] <file> 'git bundle' list-heads <file> [<refname>...] 'git bundle' unbundle [--progress] <file> [<refname>...] diff --git a/builtin/bundle.c b/builtin/bundle.c index 127518c2a8d..6d610253575 100644 --- a/builtin/bundle.c +++ b/builtin/bundle.c @@ -17,7 +17,7 @@ #define BUILTIN_BUNDLE_CREATE_USAGE \ N_("git bundle create [-q | --quiet | --progress]\n" \ - " [--version=<version>] <file> <git-rev-list-args>") + " [--version=<version>] <file> (<git-rev-list-args> | --all)") #define BUILTIN_BUNDLE_VERIFY_USAGE \ N_("git bundle verify [-q | --quiet] <file>") #define BUILTIN_BUNDLE_LIST_HEADS_USAGE \ -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH 1/4] Documentation/git-bundle.txt: mention --all in Synopsis 2024-10-20 19:14 ` [PATCH 1/4] Documentation/git-bundle.txt: mention --all in Synopsis kristofferhaugsbakk @ 2024-10-20 19:33 ` Kristoffer Haugsbakk 2024-10-21 21:30 ` Taylor Blau 0 siblings, 1 reply; 37+ messages in thread From: Kristoffer Haugsbakk @ 2024-10-20 19:33 UTC (permalink / raw) To: Kristoffer Haugsbakk, git; +Cc: Ævar Arnfjörð Bjarmason On Sun, Oct 20, 2024, at 21:14, kristofferhaugsbakk@fastmail.com wrote: > prerequisites”. It deserves to be mentioned as an alternative to > `<git-rev-list-args>`. git-rev-list-args huh. git-rev-lists(1) has `--all`. That must be were it comes from to begin with. That’s why I kept looking for `--all` in all the wrong places. This patch should be dropped. -- Kristoffer Haugsbakk kristofferhaugsbakk@fastmail.com ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 1/4] Documentation/git-bundle.txt: mention --all in Synopsis 2024-10-20 19:33 ` Kristoffer Haugsbakk @ 2024-10-21 21:30 ` Taylor Blau 0 siblings, 0 replies; 37+ messages in thread From: Taylor Blau @ 2024-10-21 21:30 UTC (permalink / raw) To: Kristoffer Haugsbakk; +Cc: git, Ævar Arnfjörð Bjarmason On Sun, Oct 20, 2024 at 09:33:39PM +0200, Kristoffer Haugsbakk wrote: > On Sun, Oct 20, 2024, at 21:14, kristofferhaugsbakk@fastmail.com wrote: > > prerequisites”. It deserves to be mentioned as an alternative to > > `<git-rev-list-args>`. > > git-rev-list-args huh. > > git-rev-lists(1) has `--all`. That must be were it comes from to begin > with. > > That’s why I kept looking for `--all` in all the wrong places. > > This patch should be dropped. I was going to say... <git-rev-list-args> is a superset of {--all}. But dropping this makes sense. Thanks, Taylor ^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 2/4] Documentation/git-bundle.txt: mention full backup example 2024-10-20 19:14 [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup kristofferhaugsbakk 2024-10-20 19:14 ` [PATCH 1/4] Documentation/git-bundle.txt: mention --all in Synopsis kristofferhaugsbakk @ 2024-10-20 19:15 ` kristofferhaugsbakk 2024-10-21 21:32 ` Taylor Blau 2024-10-20 19:15 ` [PATCH 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk ` (4 subsequent siblings) 6 siblings, 1 reply; 37+ messages in thread From: kristofferhaugsbakk @ 2024-10-20 19:15 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab From: Kristoffer Haugsbakk <code@khaugsbakk.name> Tell the user how to make a full backup of the repository right at the start of the doc. This is a requested use-case.[1] But the doc is a bit unassuming about it: “ If you want to match `git clone --mirror`, which would include your refs such as `refs/remotes/*`, use `--all`. The user cannot be expected to formulate “I want a full backup” as “I want to match `git clone --mirror`” for a bundle file or something. 🔗 1: https://stackoverflow.com/a/5578292/1725151 Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Documentation/git-bundle.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 7579dd309ac..bf0d448a736 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -26,6 +26,9 @@ 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 can use `git bundle create <file> --all` to create a full backup of +your repository. + 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 -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH 2/4] Documentation/git-bundle.txt: mention full backup example 2024-10-20 19:15 ` [PATCH 2/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk @ 2024-10-21 21:32 ` Taylor Blau 2024-10-22 21:18 ` Kristoffer Haugsbakk 0 siblings, 1 reply; 37+ messages in thread From: Taylor Blau @ 2024-10-21 21:32 UTC (permalink / raw) To: kristofferhaugsbakk; +Cc: git, Kristoffer Haugsbakk, avarab On Sun, Oct 20, 2024 at 09:15:00PM +0200, kristofferhaugsbakk@fastmail.com wrote: > From: Kristoffer Haugsbakk <code@khaugsbakk.name> > > Tell the user how to make a full backup of the repository right at the > start of the doc. > > This is a requested use-case.[1] But the doc is a bit unassuming > about it: > > “ If you want to match `git clone --mirror`, which would include your > refs such as `refs/remotes/*`, use `--all`. > > The user cannot be expected to formulate “I want a full backup” as “I > want to match `git clone --mirror`” for a bundle file or something. > > 🔗 1: https://stackoverflow.com/a/5578292/1725151 We do not typically use emoji characters in commit messages on the Git project. The convention here would be to write this as [1]: https://stackoverflow.com/a/5578292/1725151 > Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> > --- > Documentation/git-bundle.txt | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt > index 7579dd309ac..bf0d448a736 100644 > --- a/Documentation/git-bundle.txt > +++ b/Documentation/git-bundle.txt > @@ -26,6 +26,9 @@ 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 can use `git bundle create <file> --all` to create a full backup of > +your repository. > + Looks good, and could likely be combined with the previous paragraph instead of breaking and starting a new one. Now that you mention it here, does it make sense to drop the more subtle mention that you refer to in the patch message? Thanks, Taylor ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 2/4] Documentation/git-bundle.txt: mention full backup example 2024-10-21 21:32 ` Taylor Blau @ 2024-10-22 21:18 ` Kristoffer Haugsbakk 0 siblings, 0 replies; 37+ messages in thread From: Kristoffer Haugsbakk @ 2024-10-22 21:18 UTC (permalink / raw) To: Taylor Blau, Kristoffer Haugsbakk Cc: git, Ævar Arnfjörð Bjarmason On Mon, Oct 21, 2024, at 23:32, Taylor Blau wrote: > On Sun, Oct 20, 2024 at 09:15:00PM +0200, > kristofferhaugsbakk@fastmail.com wrote: >> From: Kristoffer Haugsbakk <code@khaugsbakk.name> >> >> Tell the user how to make a full backup of the repository right at the >> start of the doc. >> >> This is a requested use-case.[1] But the doc is a bit unassuming >> about it: >> >> “ If you want to match `git clone --mirror`, which would include your >> refs such as `refs/remotes/*`, use `--all`. >> >> The user cannot be expected to formulate “I want a full backup” as “I >> want to match `git clone --mirror`” for a bundle file or something. >> >> 🔗 1: https://stackoverflow.com/a/5578292/1725151 > > We do not typically use emoji characters in commit messages on the Git > project. The convention here would be to write this as > > [1]: https://stackoverflow.com/a/5578292/1725151 Ok. Will fix. >> +You can use `git bundle create <file> --all` to create a full backup of >> +your repository. >> + > > Looks good, and could likely be combined with the previous paragraph > instead of breaking and starting a new one. > > Now that you mention it here, does it make sense to drop the more subtle > mention that you refer to in the patch message? Both sound good. I’ll see what it looks like when I sit down with it again. Thanks -- Kristoffer Haugsbakk kristofferhaugsbakk@fastmail.com ^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 3/4] Documentation/git-bundle.txt: mention --all in spec. refs 2024-10-20 19:14 [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup kristofferhaugsbakk 2024-10-20 19:14 ` [PATCH 1/4] Documentation/git-bundle.txt: mention --all in Synopsis kristofferhaugsbakk 2024-10-20 19:15 ` [PATCH 2/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk @ 2024-10-20 19:15 ` kristofferhaugsbakk 2024-10-21 21:33 ` Taylor Blau 2024-10-20 19:15 ` [PATCH 4/4] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk ` (3 subsequent siblings) 6 siblings, 1 reply; 37+ messages in thread From: kristofferhaugsbakk @ 2024-10-20 19:15 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab From: Kristoffer Haugsbakk <code@khaugsbakk.name> Mention `--all` as an alternative in “Specifying References”. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Documentation/git-bundle.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index bf0d448a736..cf25e6e8540 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -135,7 +135,7 @@ SPECIFYING REFERENCES --------------------- Revisions must be accompanied by reference names to be packaged in a -bundle. +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 -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH 3/4] Documentation/git-bundle.txt: mention --all in spec. refs 2024-10-20 19:15 ` [PATCH 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk @ 2024-10-21 21:33 ` Taylor Blau 0 siblings, 0 replies; 37+ messages in thread From: Taylor Blau @ 2024-10-21 21:33 UTC (permalink / raw) To: kristofferhaugsbakk; +Cc: git, Kristoffer Haugsbakk, avarab On Sun, Oct 20, 2024 at 09:15:01PM +0200, kristofferhaugsbakk@fastmail.com wrote: > From: Kristoffer Haugsbakk <code@khaugsbakk.name> > > Mention `--all` as an alternative in “Specifying References”. > > Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> > --- > Documentation/git-bundle.txt | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Good. Thanks, Taylor ^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 4/4] Documentation/git-bundle.txt: discuss naïve backups 2024-10-20 19:14 [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup kristofferhaugsbakk ` (2 preceding siblings ...) 2024-10-20 19:15 ` [PATCH 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk @ 2024-10-20 19:15 ` kristofferhaugsbakk 2024-10-21 21:36 ` [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup Taylor Blau ` (2 subsequent siblings) 6 siblings, 0 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-10-20 19:15 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab From: Kristoffer Haugsbakk <code@khaugsbakk.name> It might be naïve to think that those who need this education would end up here in the first place. But I think it’s good to mention this high-level concept here on a command which provides a backup strategy. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): Correct mention of the section? All-caps seems to be the convention. Documentation/git-bundle.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index cf25e6e8540..b5cc4746b45 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -324,6 +324,20 @@ 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 -a <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]. + +See also linkgit:gitfaq[1], section "TRANSFERS" for a discussion of the +problems associated with file syncing across systems. + FILE FORMAT ----------- -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup 2024-10-20 19:14 [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup kristofferhaugsbakk ` (3 preceding siblings ...) 2024-10-20 19:15 ` [PATCH 4/4] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk @ 2024-10-21 21:36 ` Taylor Blau 2024-10-22 17:29 ` Taylor Blau 2024-10-29 20:41 ` [PATCH v2 0/3] " kristofferhaugsbakk 6 siblings, 0 replies; 37+ messages in thread From: Taylor Blau @ 2024-10-21 21:36 UTC (permalink / raw) To: kristofferhaugsbakk; +Cc: git, Kristoffer Haugsbakk, avarab On Sun, Oct 20, 2024 at 09:14:58PM +0200, kristofferhaugsbakk@fastmail.com wrote: > +Cc is just `./contrib/contacts/git-contacts` minus Junio. Ævar, who you CC'd here is currently inactive[^1], so it may be unlikely that we receive a response from him. > Kristoffer Haugsbakk (4): > Documentation/git-bundle.txt: mention --all in Synopsis > Documentation/git-bundle.txt: mention full backup example > Documentation/git-bundle.txt: mention --all in spec. refs > Documentation/git-bundle.txt: discuss naïve backups As you suggested elsewhere in the thread, I dropped the first patch from this series, but the other three look good. I had a small note on the second patch (first after dropping), but let me know if you plan to address it or not. Thanks, Taylor [^1]: ...and missed. It would be nice to see you back sometime, Ævar. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup 2024-10-20 19:14 [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup kristofferhaugsbakk ` (4 preceding siblings ...) 2024-10-21 21:36 ` [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup Taylor Blau @ 2024-10-22 17:29 ` Taylor Blau 2024-10-22 21:22 ` Kristoffer Haugsbakk 2024-10-29 20:41 ` [PATCH v2 0/3] " kristofferhaugsbakk 6 siblings, 1 reply; 37+ messages in thread From: Taylor Blau @ 2024-10-22 17:29 UTC (permalink / raw) To: kristofferhaugsbakk; +Cc: git, Kristoffer Haugsbakk, avarab On Sun, Oct 20, 2024 at 09:14:58PM +0200, kristofferhaugsbakk@fastmail.com wrote: > From: Kristoffer Haugsbakk <code@khaugsbakk.name> > > The documentation for git-bundle(1) now properly covers `--all`, the > option that can be used to package all refs. A "Discussions" section > has also been added to address the naive backup strategy of copying a > Git repository manually. When applying to 'seen' last night, it looks like this topic caused some breakage here: https://github.com/git/git/actions/runs/11449483611/job/31855169149#step:4:144 Would you mind taking a look, Kristoffer? Thanks, Taylor ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup 2024-10-22 17:29 ` Taylor Blau @ 2024-10-22 21:22 ` Kristoffer Haugsbakk 0 siblings, 0 replies; 37+ messages in thread From: Kristoffer Haugsbakk @ 2024-10-22 21:22 UTC (permalink / raw) To: Taylor Blau, Kristoffer Haugsbakk Cc: git, Ævar Arnfjörð Bjarmason On Tue, Oct 22, 2024, at 19:29, Taylor Blau wrote: > On Sun, Oct 20, 2024 at 09:14:58PM +0200, > kristofferhaugsbakk@fastmail.com wrote: >> From: Kristoffer Haugsbakk <code@khaugsbakk.name> >> >> The documentation for git-bundle(1) now properly covers `--all`, the >> option that can be used to package all refs. A "Discussions" section >> has also been added to address the naive backup strategy of copying a >> Git repository manually. > > When applying to 'seen' last night, it looks like this topic caused some > breakage here: > > > https://github.com/git/git/actions/runs/11449483611/job/31855169149#step:4:144 > > Would you mind taking a look, Kristoffer? Ah, thanks for the heads up. I’ll take a look at it. (’Tis a shame when we neglect to run five-second-run linters before sending out) ^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v2 0/3] Documentation/git-bundle.txt: promote --all for full backup 2024-10-20 19:14 [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup kristofferhaugsbakk ` (5 preceding siblings ...) 2024-10-22 17:29 ` Taylor Blau @ 2024-10-29 20:41 ` kristofferhaugsbakk 2024-10-29 20:41 ` [PATCH v2 1/3] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk ` (4 more replies) 6 siblings, 5 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-10-29 20:41 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me From: Kristoffer Haugsbakk <code@khaugsbakk.name> The documentation for git-bundle(1) now properly covers `--all`, the option from git-rev-list(1) that can be used to package all refs. A "Discussions" section has also been added to address the naive backup strategy of copying a Git repository manually with cp(1) or some other non-Git tool. --- The part above was for the-topic-summary. I was prompted by SO questions like this one: https://stackoverflow.com/questions/5578270/fully-backup-a-git-repo I then compared VonC’s answer to the man page. The first thing I noticed was that `--all` wasn’t in the synopsis. +Cc is just `./contrib/contacts/git-contacts` minus Junio. (Although he is inactive (from v1); keeping Cc on the series since it is customary) Cheers § Changes in v2 • Patch v1 1/4: drop • Patch v2 1/3: combine with previous paragraph and drop “mirror” sentence • Patch v2 3/3: fix `make lint-docs` failure Kristoffer Haugsbakk (3): Documentation/git-bundle.txt: mention full backup example Documentation/git-bundle.txt: mention --all in spec. refs Documentation/git-bundle.txt: discuss naïve backups Documentation/git-bundle.txt | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) Interdiff against v1: diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index b5cc4746b45..7bffd2e4a05 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -10,7 +10,7 @@ SYNOPSIS -------- [verse] 'git bundle' create [-q | --quiet | --progress] - [--version=<version>] <file> (<git-rev-list-args> | --all) + [--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>...] @@ -23,11 +23,8 @@ 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 can use `git bundle create <file> --all` to create a full backup of -your repository. +repository (`git bundle create <file> --all`), and to relay the state of +the references in one repository to another. Git commands that fetch or otherwise "read" via protocols such as `ssh://` and `https://` can also operate on bundle files. It is @@ -206,8 +203,6 @@ 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 match `git clone --mirror`, which would include your -refs such as `refs/remotes/*`, use `--all`. 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>`. @@ -335,7 +330,7 @@ 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]. -See also linkgit:gitfaq[1], section "TRANSFERS" for a discussion of the +See also linkgit:gitfaq[7], section "TRANSFERS" for a discussion of the problems associated with file syncing across systems. FILE FORMAT diff --git a/builtin/bundle.c b/builtin/bundle.c index 6d610253575..127518c2a8d 100644 --- a/builtin/bundle.c +++ b/builtin/bundle.c @@ -17,7 +17,7 @@ #define BUILTIN_BUNDLE_CREATE_USAGE \ N_("git bundle create [-q | --quiet | --progress]\n" \ - " [--version=<version>] <file> (<git-rev-list-args> | --all)") + " [--version=<version>] <file> <git-rev-list-args>") #define BUILTIN_BUNDLE_VERIFY_USAGE \ N_("git bundle verify [-q | --quiet] <file>") #define BUILTIN_BUNDLE_LIST_HEADS_USAGE \ Range-diff against v1: 1: 39bdc5941c7 ! 1: e9be866f33d Documentation/git-bundle.txt: mention --all in Synopsis @@ Metadata Author: Kristoffer Haugsbakk <code@khaugsbakk.name> ## Commit message ## - Documentation/git-bundle.txt: mention --all in Synopsis + Documentation/git-bundle.txt: mention full backup example - `--all` is convenient for bundling all refs. But it is only mentioned - once, halfway through the doc, under the demure section “Object - prerequisites”. It deserves to be mentioned as an alternative to - `<git-rev-list-args>`. + Tell the user how to make a full backup of the repository right at the + start of the doc. + + This is a requested use-case.[1] But the doc is a bit unassuming + about it: + + “ If you want to match `git clone --mirror`, which would include your + refs such as `refs/remotes/*`, use `--all`. + + The user cannot be expected to formulate “I want a full backup” as “I + want to match `git clone --mirror`” for a bundle file or something. + Let’s drop this mention of `--all` later in the doc and frontload it. + + † 1: E.g.: + + • https://stackoverflow.com/questions/5578270/fully-backup-a-git-repo + • https://stackoverflow.com/questions/11792671/how-to-git-bundle-a-complete-repo Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> ## Notes (series) ## - Long line in bundle.c now? + v2: + • Mention as a parenthetical on an existing paragraph (don’t create a + new sentence and paragraph) + • Remove the “mirror” mention + + Link (both): https://lore.kernel.org/git/ZxbIWEGS1UB3UIg+@nand.local/ ## Documentation/git-bundle.txt ## -@@ Documentation/git-bundle.txt: SYNOPSIS - -------- - [verse] - 'git bundle' create [-q | --quiet | --progress] -- [--version=<version>] <file> <git-rev-list-args> -+ [--version=<version>] <file> (<git-rev-list-args> | --all) - 'git bundle' verify [-q | --quiet] <file> - 'git bundle' list-heads <file> [<refname>...] - 'git bundle' unbundle [--progress] <file> [<refname>...] - - ## builtin/bundle.c ## -@@ +@@ Documentation/git-bundle.txt: 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. ++repository (`git bundle create <file> --all`), and to relay the state of ++the references in one repository to another. + + Git commands that fetch or otherwise "read" via protocols such as + `ssh://` and `https://` can also operate on bundle files. It is +@@ Documentation/git-bundle.txt: 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. - #define BUILTIN_BUNDLE_CREATE_USAGE \ - N_("git bundle create [-q | --quiet | --progress]\n" \ -- " [--version=<version>] <file> <git-rev-list-args>") -+ " [--version=<version>] <file> (<git-rev-list-args> | --all)") - #define BUILTIN_BUNDLE_VERIFY_USAGE \ - N_("git bundle verify [-q | --quiet] <file>") - #define BUILTIN_BUNDLE_LIST_HEADS_USAGE \ +-If you want to match `git clone --mirror`, which would include your +-refs such as `refs/remotes/*`, use `--all`. + 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>`. 2: f7d9aa89c95 < -: ----------- Documentation/git-bundle.txt: mention full backup example 3: 33980a47d13 = 2: f18f8ca453d Documentation/git-bundle.txt: mention --all in spec. refs 4: 63a431537b7 ! 3: c50f9d405f9 Documentation/git-bundle.txt: discuss naïve backups @@ Commit message ## Notes (series) ## + v2: + • Fix gitfaq(7) link + + Link: https://lore.kernel.org/git/ZxfhAAgNlbEq60VB@nand.local/#t + v1: Correct mention of the section? All-caps seems to be the convention. ## Documentation/git-bundle.txt ## @@ Documentation/git-bundle.txt: You can also see what references it offers: +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]. + -+See also linkgit:gitfaq[1], section "TRANSFERS" for a discussion of the ++See also linkgit:gitfaq[7], section "TRANSFERS" for a discussion of the +problems associated with file syncing across systems. + FILE FORMAT base-commit: 34b6ce9b30747131b6e781ff718a45328aa887d0 -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v2 1/3] Documentation/git-bundle.txt: mention full backup example 2024-10-29 20:41 ` [PATCH v2 0/3] " kristofferhaugsbakk @ 2024-10-29 20:41 ` kristofferhaugsbakk 2024-11-02 1:27 ` Junio C Hamano 2024-10-29 20:41 ` [PATCH v2 2/3] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk ` (3 subsequent siblings) 4 siblings, 1 reply; 37+ messages in thread From: kristofferhaugsbakk @ 2024-10-29 20:41 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me From: Kristoffer Haugsbakk <code@khaugsbakk.name> Tell the user how to make a full backup of the repository right at the start of the doc. This is a requested use-case.[1] But the doc is a bit unassuming about it: “ If you want to match `git clone --mirror`, which would include your refs such as `refs/remotes/*`, use `--all`. The user cannot be expected to formulate “I want a full backup” as “I want to match `git clone --mirror`” for a bundle file or something. Let’s drop this mention of `--all` later in the doc and frontload it. † 1: E.g.: • https://stackoverflow.com/questions/5578270/fully-backup-a-git-repo • https://stackoverflow.com/questions/11792671/how-to-git-bundle-a-complete-repo Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): v2: • Mention as a parenthetical on an existing paragraph (don’t create a new sentence and paragraph) • Remove the “mirror” mention Link (both): https://lore.kernel.org/git/ZxbIWEGS1UB3UIg+@nand.local/ Documentation/git-bundle.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 3ab42a19cae..0fa181c749d 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -23,8 +23,8 @@ 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. +repository (`git bundle create <file> --all`), and to relay the state of +the references in one repository to another. Git commands that fetch or otherwise "read" via protocols such as `ssh://` and `https://` can also operate on bundle files. It is @@ -203,8 +203,6 @@ 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 match `git clone --mirror`, which would include your -refs such as `refs/remotes/*`, use `--all`. 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>`. -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH v2 1/3] Documentation/git-bundle.txt: mention full backup example 2024-10-29 20:41 ` [PATCH v2 1/3] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk @ 2024-11-02 1:27 ` Junio C Hamano 2024-11-06 19:31 ` Kristoffer Haugsbakk 0 siblings, 1 reply; 37+ messages in thread From: Junio C Hamano @ 2024-11-02 1:27 UTC (permalink / raw) To: kristofferhaugsbakk; +Cc: git, Kristoffer Haugsbakk, avarab, me kristofferhaugsbakk@fastmail.com writes: > From: Kristoffer Haugsbakk <code@khaugsbakk.name> > > Tell the user how to make a full backup of the repository right at the > start of the doc. > > This is a requested use-case.[1] But the doc is a bit unassuming > about it: > > “ If you want to match `git clone --mirror`, which would include your > refs such as `refs/remotes/*`, use `--all`. What's the open fancy quote followed by a SP doing there, apparently without the matching closing one? Can we replace it with a SP? > The user cannot be expected to formulate “I want a full backup” as “I > want to match `git clone --mirror`” for a bundle file or something. > Let’s drop this mention of `--all` later in the doc and frontload it. > diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt > index 3ab42a19cae..0fa181c749d 100644 > --- a/Documentation/git-bundle.txt > +++ b/Documentation/git-bundle.txt > @@ -23,8 +23,8 @@ 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. > +repository (`git bundle create <file> --all`), and to relay the state of > +the references in one repository to another. In the new construction, it is unclear if the new command line example is about making a "full backup" and not "incremental", or it applies to both. I am not sure if this, especially with the removal of "--all" from the later section, is an improvement. Let me try if I can come up with a better version by elaborating the later section without touching this part. This is not a new issue, but naïvely, one would expect "full backup" to allow one to recover lost .git/config entries. We should tighten the phrasing for "backups of a repository" to avoid such misleading false promises. As it is the primary motivation of this series to clarify how you would use the command for "full backup", I think this point is worth tackling as part of this series. This also is not a new issue, but the dashed-option "--all" after "<file>" is an oddball from "git help cli"'s point of view. It perfectly fits within the SYNOPSIS for this command in that "--all" is merely a form of valid arguments you can give to "git rev-list", so I do not see anything that needs to be done on this point, though. So, here is my attempt. Documentation/git-bundle.txt | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git c/Documentation/git-bundle.txt w/Documentation/git-bundle.txt index 3ab42a19ca..633c99c8b2 100644 --- c/Documentation/git-bundle.txt +++ w/Documentation/git-bundle.txt @@ -22,9 +22,10 @@ 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, and to relay the state of the references in one repository -to another. +They can be used to create both incremental and full backups of +objects and refs in a repository. They can be used to transfer the +state of the references to another repository, together with objects +these references point at. Git commands that fetch or otherwise "read" via protocols such as `ssh://` and `https://` can also operate on bundle files. It is @@ -176,7 +177,7 @@ 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. +earlier parts of the history. This is like taking a "full backup". Feeding a revision such as `new` to `git bundle create` will create a bundle file that contains all the objects reachable from the revision @@ -192,9 +193,11 @@ 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 +$ git bundle create incremental.bundle old..new ---------------- +Such a bundle file is like an "incremental backup". + 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`). @@ -203,11 +206,27 @@ 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 match `git clone --mirror`, which would include your -refs such as `refs/remotes/*`, use `--all`. -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>`. +If you want to prepare a bundle from which you can "git clone" as if +you were cloning from the repository, you can use `--branches +--tags` for the `<git-rev-list-args>`, as "git clone" transfers only +these two kinds of refs. + +If you use `--all` for the `<git-rev-list-args>`, the resulting +bundle will be able to recreate all the refs, including those +outside branches and tags, when extracted with "git clone --mirror". + +When creating an incremental bundle on top of an existing bundle, +`git bundle list-heads <existing-bundle>` can be used to extract +the then-current tips of the history recorded in it. Then you can +list them as the prerequisite objects when creating an incremental +bundle, e.g. + + $ git bundle create incremental.bundle --all --not \ + $(git bundle list-heads old.bundle | awk '{print $1}') + +which tells the command to include all refs (as if cloning with the +`--mirror` option), but without duplicating the objects already +available in the `old.bundle` bundle. The 'git bundle verify' command can be used to check whether your recipient repository has the required prerequisite commits for a ^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH v2 1/3] Documentation/git-bundle.txt: mention full backup example 2024-11-02 1:27 ` Junio C Hamano @ 2024-11-06 19:31 ` Kristoffer Haugsbakk 0 siblings, 0 replies; 37+ messages in thread From: Kristoffer Haugsbakk @ 2024-11-06 19:31 UTC (permalink / raw) To: Junio C Hamano Cc: git, Kristoffer Haugsbakk, Ævar Arnfjörð Bjarmason, Taylor Blau On Sat, Nov 2, 2024, at 02:27, Junio C Hamano wrote: > kristofferhaugsbakk@fastmail.com writes: > >> From: Kristoffer Haugsbakk <code@khaugsbakk.name> >> >> Tell the user how to make a full backup of the repository right at the >> start of the doc. >> >> This is a requested use-case.[1] But the doc is a bit unassuming >> about it: >> >> “ If you want to match `git clone --mirror`, which would include your >> refs such as `refs/remotes/*`, use `--all`. > > What's the open fancy quote followed by a SP doing there, apparently > without the matching closing one? Can we replace it with a SP? I’ll replace it. The idea came from merge commits like: ``` Pull more 9p reverts from Dominique Martinet: "Revert patches causing inode collision problems. The code simplification introduced significant regressions on servers that do not remap inode numbers when exporting multiple underlying filesystems with colliding inodes. See the top-most revert (commit be2ca3825372) for details. This problem had been ignored for too long and the reverts will also head to stable (6.9+). I'm confident this set of patches gets us back to previous behaviour (another related patch had already been reverted back in April and we're almost back to square 1, and the rest didn't touch inode lifecycle)" ``` But (1) space between the quote char and the text to make it stand out and (2) no trailing close quote (the deindent closes the quote). > >> The user cannot be expected to formulate “I want a full backup” as “I >> want to match `git clone --mirror`” for a bundle file or something. >> Let’s drop this mention of `--all` later in the doc and frontload it. > >> diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt >> index 3ab42a19cae..0fa181c749d 100644 >> --- a/Documentation/git-bundle.txt >> +++ b/Documentation/git-bundle.txt >> @@ -23,8 +23,8 @@ 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. >> +repository (`git bundle create <file> --all`), and to relay the state of >> +the references in one repository to another. > > In the new construction, it is unclear if the new command line > example is about making a "full backup" and not "incremental", or it > applies to both. I am not sure if this, especially with the removal > of "--all" from the later section, is an improvement. Let me try if > I can come up with a better version by elaborating the later section > without touching this part. > > This is not a new issue, but naïvely, one would expect "full backup" > to allow one to recover lost .git/config entries. We should tighten > the phrasing for "backups of a repository" to avoid such misleading > false promises. As it is the primary motivation of this series to > clarify how you would use the command for "full backup", I think > this point is worth tackling as part of this series. Good point. The change is biased by the groove I’ve gotten into in the last years: (1) of never leaving unstaged changes for such a long time that I would be said if I lost them, and (2) never using git-stash(1) unless I’m popping the stack within the next fifteen seconds. So there is not much non-ref data (including the stash ref) that I would miss. (But I have started using local repo config more so that could be lost) And with worktrees, people could have a *quite a lot* of uncommitted state lying around. Since some people use worktrees like branches. So yes. There is absolutely a need to make clear that this “full backup” doesn’t cover those things. > > This also is not a new issue, but the dashed-option "--all" after > "<file>" is an oddball from "git help cli"'s point of view. It > perfectly fits within the SYNOPSIS for this command in that "--all" > is merely a form of valid arguments you can give to "git rev-list", > so I do not see anything that needs to be done on this point, though. > > So, here is my attempt. > > […] Thank you. I’ve adopted some of this for the next version. > + > + $ git bundle create incremental.bundle --all --not \ > + $(git bundle list-heads old.bundle | awk '{print $1}') > + > +which tells the command to include all refs (as if cloning with the > +`--mirror` option), but without duplicating the objects already > +available in the `old.bundle` bundle. This approach seems less manual than the incremental backup examples in the existing doc (Examples section). But I think I’ll stick to just the simple dump-to-file approach and leave the incremental backup example for the existing example. > The 'git bundle verify' command can be used to check whether your > recipient repository has the required prerequisite commits for a ^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v2 2/3] Documentation/git-bundle.txt: mention --all in spec. refs 2024-10-29 20:41 ` [PATCH v2 0/3] " kristofferhaugsbakk 2024-10-29 20:41 ` [PATCH v2 1/3] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk @ 2024-10-29 20:41 ` kristofferhaugsbakk 2024-10-29 20:41 ` [PATCH v2 3/3] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk ` (2 subsequent siblings) 4 siblings, 0 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-10-29 20:41 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me From: Kristoffer Haugsbakk <code@khaugsbakk.name> Mention `--all` as an alternative in “Specifying References”. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Documentation/git-bundle.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 0fa181c749d..bce62bc8309 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -132,7 +132,7 @@ SPECIFYING REFERENCES --------------------- Revisions must be accompanied by reference names to be packaged in a -bundle. +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 -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v2 3/3] Documentation/git-bundle.txt: discuss naïve backups 2024-10-29 20:41 ` [PATCH v2 0/3] " kristofferhaugsbakk 2024-10-29 20:41 ` [PATCH v2 1/3] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk 2024-10-29 20:41 ` [PATCH v2 2/3] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk @ 2024-10-29 20:41 ` kristofferhaugsbakk 2024-11-02 1:39 ` Junio C Hamano 2024-10-29 22:19 ` [PATCH v2 0/3] Documentation/git-bundle.txt: promote --all for full backup Taylor Blau 2024-11-07 11:57 ` [PATCH v3 0/4] " kristofferhaugsbakk 4 siblings, 1 reply; 37+ messages in thread From: kristofferhaugsbakk @ 2024-10-29 20:41 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me From: Kristoffer Haugsbakk <code@khaugsbakk.name> It might be naïve to think that those who need this education would end up here in the first place. But I think it’s good to mention this high-level concept here on a command which provides a backup strategy. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): v2: • Fix gitfaq(7) link Link: https://lore.kernel.org/git/ZxfhAAgNlbEq60VB@nand.local/#t v1: Correct mention of the section? All-caps seems to be the convention. Documentation/git-bundle.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index bce62bc8309..7bffd2e4a05 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -319,6 +319,20 @@ 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 -a <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]. + +See also linkgit:gitfaq[7], section "TRANSFERS" for a discussion of the +problems associated with file syncing across systems. + FILE FORMAT ----------- -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH v2 3/3] Documentation/git-bundle.txt: discuss naïve backups 2024-10-29 20:41 ` [PATCH v2 3/3] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk @ 2024-11-02 1:39 ` Junio C Hamano 0 siblings, 0 replies; 37+ messages in thread From: Junio C Hamano @ 2024-11-02 1:39 UTC (permalink / raw) To: kristofferhaugsbakk; +Cc: git, Kristoffer Haugsbakk, avarab, me kristofferhaugsbakk@fastmail.com writes: > +A naive way to make a full backup of a repository is to use something to > +the effect of `cp -a <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. There is nothing wrong in the above, but ... > +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]. ... "git bundle create - --all" in (or "git clone --mirror" from) a repository cannot be an equivalent to "cp -a" in a quiescent repository. You'd lose what is staged, you'd lose per repository configuration, you'd lose hooks, you may be losing other things I am not remembering. IOW, those who uses what you call "a naive way" may be doing so with a valid reason. So the patch is not quite correct as-is, even though it is going in the right direction. It discourages apples and recommends oranges. Let me think aloud to see if I can come up with an improvement. It is tempting to do "cp -a <repository> <elsewhere>" or "tar cf - <repository>" to take a snapshot of a repository, but unless the repository is quiescent, you will get an incomplete snapshot with inconsiistent state. If all you care about is the state of the objects and the refs that point to objects, you can instead use "git clone --mirror <repo> <elsewhere>" or "git bundle create <bndl> --all" to take a consistent snapshot. Note that you will lose other local states of the repository, such as the contents of the index, working tree, per-repository configuration, hooks, etc. or something like that, perhaps? ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v2 0/3] Documentation/git-bundle.txt: promote --all for full backup 2024-10-29 20:41 ` [PATCH v2 0/3] " kristofferhaugsbakk ` (2 preceding siblings ...) 2024-10-29 20:41 ` [PATCH v2 3/3] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk @ 2024-10-29 22:19 ` Taylor Blau 2024-11-07 11:57 ` [PATCH v3 0/4] " kristofferhaugsbakk 4 siblings, 0 replies; 37+ messages in thread From: Taylor Blau @ 2024-10-29 22:19 UTC (permalink / raw) To: kristofferhaugsbakk; +Cc: git, Kristoffer Haugsbakk, avarab On Tue, Oct 29, 2024 at 09:41:43PM +0100, kristofferhaugsbakk@fastmail.com wrote: > Kristoffer Haugsbakk (3): > Documentation/git-bundle.txt: mention full backup example > Documentation/git-bundle.txt: mention --all in spec. refs > Documentation/git-bundle.txt: discuss naïve backups > > Documentation/git-bundle.txt | 22 +++++++++++++++++----- > 1 file changed, 17 insertions(+), 5 deletions(-) This new version looks quite good to me, thanks for working on it! It would be nice to get some feedback from other reviewers on the list, but absent of that I think that this one is ready to start merging down. Thanks, Taylor ^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v3 0/4] Documentation/git-bundle.txt: promote --all for full backup 2024-10-29 20:41 ` [PATCH v2 0/3] " kristofferhaugsbakk ` (3 preceding siblings ...) 2024-10-29 22:19 ` [PATCH v2 0/3] Documentation/git-bundle.txt: promote --all for full backup Taylor Blau @ 2024-11-07 11:57 ` kristofferhaugsbakk 2024-11-07 11:57 ` [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk ` (5 more replies) 4 siblings, 6 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-07 11:57 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> The documentation for git-bundle(1) now prominently covers `--all`, the option from git-rev-list(1) that can be used to package all refs. A "Discussion" section has also been added to address the naive backup strategy of copying a Git repository manually with cp(1) or some other non-Git tool. --- The part above was for the-topic-summary. I was prompted by SO questions like this one: https://stackoverflow.com/questions/5578270/fully-backup-a-git-repo I then compared VonC’s answer to the man page. Cheers § Changes in v3 After some feedback from Junio I’ve added a disclaimer about what this “full backup” does not cover, like e.g. repo config. And since this requires some introduction and overall space (paragraphs), I’ve moved it into the Examples section. To structure this now two-example section it now starts with a list of what examples are coming up. The second example is marked by “For the next example”. I’ve also noted what the “full backup” does not cover in the Discussion section. The details are noted on the patches. Kristoffer Haugsbakk (4): Documentation/git-bundle.txt: mention full backup example Documentation/git-bundle.txt: remove old `--all` example Documentation/git-bundle.txt: mention --all in spec. refs Documentation/git-bundle.txt: discuss naïve backups Documentation/git-bundle.txt | 52 +++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 9 deletions(-) Interdiff against v2: diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 7bffd2e4a05..ad9ab3247f5 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -23,8 +23,9 @@ 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 (`git bundle create <file> --all`), and to relay the state of -the references in one repository to another. +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 @@ -34,8 +35,6 @@ 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. -See the "EXAMPLES" section below for examples of how to use bundles. - BUNDLE FORMAT ------------- @@ -214,8 +213,27 @@ bundle. EXAMPLES -------- -Assume you want to transfer the history from a repository R1 on machine A -to another repository R2 on machine B. +We'll discuss two cases: + +1. Taking a full backup of a repository +2. Transfer 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 (except `refs/stash`, i.e. the stash): + +---------------- +$ git bundle create <file> --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, per-repository configuration, hooks, etc. + +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. @@ -323,12 +341,16 @@ DISCUSSION ---------- A naive way to make a full backup of a repository is to use something to -the effect of `cp -a <repo> <destination>`. This is discouraged since +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, per-repository configuration, +hooks, etc. See also linkgit:gitfaq[7], section "TRANSFERS" for a discussion of the problems associated with file syncing across systems. Range-diff against v2: 1: e9be866f33d ! 1: b222c6787a7 Documentation/git-bundle.txt: mention full backup example @@ Metadata ## Commit message ## Documentation/git-bundle.txt: mention full backup example - Tell the user how to make a full backup of the repository right at the - start of the doc. + Provide an example about how to make a “full backup” with caveats about + what that means in this case. This is a requested use-case.[1] But the doc is a bit unassuming about it: - “ If you want to match `git clone --mirror`, which would include your + If you want to match `git clone --mirror`, which would include your refs such as `refs/remotes/*`, use `--all`. The user cannot be expected to formulate “I want a full backup” as “I @@ Commit message • https://stackoverflow.com/questions/5578270/fully-backup-a-git-repo • https://stackoverflow.com/questions/11792671/how-to-git-bundle-a-complete-repo + Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> ## Notes (series) ## + v3: + • Elaborate on “full backups” in Examples instead + • Just point to the section in the second paragraph where everything is + elaborated + • Incorporate some of Junio’s suggestions: + • Mention what the “full backup” here does not include + + Link: https://lore.kernel.org/git/xmqqh68q1l37.fsf@gitster.g/ + Link: https://lore.kernel.org/git/xmqqzfmiza69.fsf@gitster.g/#t + • Remove the final paragraph pointing to Examples now that we mention it + in the second paragraph v2: • Mention as a parenthetical on an existing paragraph (don’t create a new sentence and paragraph) @@ Notes (series) Link (both): https://lore.kernel.org/git/ZxbIWEGS1UB3UIg+@nand.local/ + + ## Notes (meta-trailers) ## + Helped-by: Junio C Hamano <gitster@pobox.com> + Link: https://lore.kernel.org/git/xmqqzfmiza69.fsf@gitster.g/ + ## Documentation/git-bundle.txt ## @@ Documentation/git-bundle.txt: the "offline" transfer of Git objects without an active "server" sitting on the other side of the network connection. @@ Documentation/git-bundle.txt: the "offline" transfer of Git objects without an a 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. -+repository (`git bundle create <file> --all`), and to relay the state of -+the references in one repository to another. ++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 -@@ Documentation/git-bundle.txt: 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. +@@ Documentation/git-bundle.txt: 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. + +-See the "EXAMPLES" section below for examples of how to use bundles. +- + BUNDLE FORMAT + ------------- + +@@ Documentation/git-bundle.txt: bundle. + EXAMPLES + -------- --If you want to match `git clone --mirror`, which would include your --refs such as `refs/remotes/*`, use `--all`. - 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>`. +-Assume you want to transfer the history from a repository R1 on machine A +-to another repository R2 on machine B. ++We'll discuss two cases: ++ ++1. Taking a full backup of a repository ++2. Transfer 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 (except `refs/stash`, i.e. the stash): ++ ++---------------- ++$ git bundle create <file> --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, per-repository configuration, hooks, etc. ++ ++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. -: ----------- > 2: f0dbe356ca6 Documentation/git-bundle.txt: remove old `--all` example 2: f18f8ca453d = 3: 8336b0f451e Documentation/git-bundle.txt: mention --all in spec. refs 3: c50f9d405f9 ! 4: 0ab05a4cf09 Documentation/git-bundle.txt: discuss naïve backups @@ Commit message ## Notes (series) ## + v3: + • Use `cp -r` instead of `cp -a` since the former is more widely + supported (even though it is just an example) + • Mention what this “full backup” does not cover here as well (see first + patch) v2: • Fix gitfaq(7) link @@ Documentation/git-bundle.txt: You can also see what references it offers: +---------- + +A naive way to make a full backup of a repository is to use something to -+the effect of `cp -a <repo> <destination>`. This is discouraged since ++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, per-repository configuration, ++hooks, etc. + +See also linkgit:gitfaq[7], section "TRANSFERS" for a discussion of the +problems associated with file syncing across systems. base-commit: 34b6ce9b30747131b6e781ff718a45328aa887d0 -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example 2024-11-07 11:57 ` [PATCH v3 0/4] " kristofferhaugsbakk @ 2024-11-07 11:57 ` kristofferhaugsbakk 2024-11-08 2:01 ` Junio C Hamano 2024-11-07 11:57 ` [PATCH v3 2/4] Documentation/git-bundle.txt: remove old `--all` example kristofferhaugsbakk ` (4 subsequent siblings) 5 siblings, 1 reply; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-07 11:57 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> Provide an example about how to make a “full backup” with caveats about what that means in this case. This is a requested use-case.[1] But the doc is a bit unassuming about it: If you want to match `git clone --mirror`, which would include your refs such as `refs/remotes/*`, use `--all`. The user cannot be expected to formulate “I want a full backup” as “I want to match `git clone --mirror`” for a bundle file or something. Let’s drop this mention of `--all` later in the doc and frontload it. † 1: E.g.: • https://stackoverflow.com/questions/5578270/fully-backup-a-git-repo • https://stackoverflow.com/questions/11792671/how-to-git-bundle-a-complete-repo Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): v3: • Elaborate on “full backups” in Examples instead • Just point to the section in the second paragraph where everything is elaborated • Incorporate some of Junio’s suggestions: • Mention what the “full backup” here does not include Link: https://lore.kernel.org/git/xmqqh68q1l37.fsf@gitster.g/ Link: https://lore.kernel.org/git/xmqqzfmiza69.fsf@gitster.g/#t • Remove the final paragraph pointing to Examples now that we mention it in the second paragraph v2: • Mention as a parenthetical on an existing paragraph (don’t create a new sentence and paragraph) • Remove the “mirror” mention Link (both): https://lore.kernel.org/git/ZxbIWEGS1UB3UIg+@nand.local/ Notes (meta-trailers): Helped-by: Junio C Hamano <gitster@pobox.com> Link: https://lore.kernel.org/git/xmqqzfmiza69.fsf@gitster.g/ Documentation/git-bundle.txt | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 3ab42a19cae..f39cafee927 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -23,8 +23,9 @@ 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. +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 @@ -34,8 +35,6 @@ 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. -See the "EXAMPLES" section below for examples of how to use bundles. - BUNDLE FORMAT ------------- @@ -216,8 +215,27 @@ bundle. EXAMPLES -------- -Assume you want to transfer the history from a repository R1 on machine A -to another repository R2 on machine B. +We'll discuss two cases: + +1. Taking a full backup of a repository +2. Transfer 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 (except `refs/stash`, i.e. the stash): + +---------------- +$ git bundle create <file> --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, per-repository configuration, hooks, etc. + +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. -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example 2024-11-07 11:57 ` [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk @ 2024-11-08 2:01 ` Junio C Hamano 2024-11-10 19:38 ` Kristoffer Haugsbakk 0 siblings, 1 reply; 37+ messages in thread From: Junio C Hamano @ 2024-11-08 2:01 UTC (permalink / raw) To: kristofferhaugsbakk; +Cc: git, Kristoffer Haugsbakk, avarab, me kristofferhaugsbakk@fastmail.com writes: > +We'll discuss two cases: > + > +1. Taking a full backup of a repository > +2. Transfer the history of a repository to another machine when the two > + machines have no direct connection Contrasting (1) taking a backup and (2) extracting a backup later is a very useful way to frame the problem, but then, I'd say 1. taking a backup, either full or incremental, of a repository 2. using the backup, either full or incremental, to transfer the history of the origin repository to any repository (including itself) without needing any other connection between the two repositories. Whether a full or an incremental, the resulting bundle file can be used as an offline medium and then later extracted elsewhere, even if there is no direct network connection between the origin repository and the destination repository. But you can extract in the origin repository as well. But that would require a bit more surgery to the presentation order of the text, so I do not mind deferrring it to a later and separate series. If we were to go that route, it would be helpful to have a paragraph to describe how you use your "full backup" bundle to recover lost data from, though. To those of us who know what is happening, there is not much difference between the extraction side of the sneaker-net example, but as we framed the use in two distinct cases, it would be helpful to make each case stand on its own. > +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 (except `refs/stash`, i.e. the stash): Are you sure the "except" part is factually correct? I did $ git bundle create x.bndl --all && git ls-remote x.bndl | grep stash and I see refs/stash listed there just fine. You should be able to extract them all with $ git clone --mirror x.bndl xxx && cd xxx && git for-each-ref | grep stash and see that refs/stash gets propagated. Fix is a simple s/except/including/ ;-) > +---------------- > +$ git bundle create <file> --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, per-repository configuration, hooks, etc. And to make each case stand on its own, we would want to teach readers how to use the full backup to recover data from here, before moving on to the "next example". You can use the resulting bundle file as if it is a repository, a snapshot of it at the time the bundle was created. You can use --- $ git ls-remote full.bndl --- to inspect what refs are recorded in it, and you can fetch from or even merge a branch out of it, with commands like: --- $ git fetch full.bndl my-butchered-topic $ git show-branch my-butchered-topic FETCH_HEAD $ git branch -f my-butchered-topic FETCH_HEAD $ git pull full.bndl my-butchered-topic --- after you screwed up one of your branches and resurrect it from the backup. or something like that. > +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. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example 2024-11-08 2:01 ` Junio C Hamano @ 2024-11-10 19:38 ` Kristoffer Haugsbakk 2024-11-12 17:31 ` Kristoffer Haugsbakk 0 siblings, 1 reply; 37+ messages in thread From: Kristoffer Haugsbakk @ 2024-11-10 19:38 UTC (permalink / raw) To: Junio C Hamano, Kristoffer Haugsbakk Cc: git, Ævar Arnfjörð Bjarmason, Taylor Blau On Fri, Nov 8, 2024, at 03:01, Junio C Hamano wrote: > kristofferhaugsbakk@fastmail.com writes: > >> +We'll discuss two cases: >> + >> +1. Taking a full backup of a repository >> +2. Transfer the history of a repository to another machine when the two >> + machines have no direct connection > > Contrasting (1) taking a backup and (2) extracting a backup later is > a very useful way to frame the problem, but then, I'd say > > 1. taking a backup, either full or incremental, of a repository > > 2. using the backup, either full or incremental, to transfer the > history of the origin repository to any repository (including > itself) without needing any other connection between the two > repositories. > > Whether a full or an incremental, the resulting bundle file can be > used as an offline medium and then later extracted elsewhere, even > if there is no direct network connection between the origin > repository and the destination repository. But you can extract in > the origin repository as well. > > But that would require a bit more surgery to the presentation order > of the text, so I do not mind deferrring it to a later and separate > series. If we were to go that route, it would be helpful to have a > paragraph to describe how you use your "full backup" bundle to recover > lost data from, though. To those of us who know what is happening, > there is not much difference between the extraction side of the > sneaker-net example, but as we framed the use in two distinct cases, > it would be helpful to make each case stand on its own. Sure. I should be able to fit in a paragraph about using that backup bundle. >> +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 (except `refs/stash`, i.e. the stash): > > Are you sure the "except" part is factually correct? It was in my testing/to my recollection. Hmm but I must have managed to fool myself somehow. :P ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example 2024-11-10 19:38 ` Kristoffer Haugsbakk @ 2024-11-12 17:31 ` Kristoffer Haugsbakk 2024-11-12 22:58 ` Junio C Hamano 0 siblings, 1 reply; 37+ messages in thread From: Kristoffer Haugsbakk @ 2024-11-12 17:31 UTC (permalink / raw) To: Kristoffer Haugsbakk, Junio C Hamano Cc: git, Ævar Arnfjörð Bjarmason, Taylor Blau On Sun, Nov 10, 2024, at 20:38, Kristoffer Haugsbakk wrote: > On Fri, Nov 8, 2024, at 03:01, Junio C Hamano wrote: >>> +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 (except `refs/stash`, i.e. the stash): >> >> Are you sure the "except" part is factually correct? Okay now I get it. Your git-ls-remote(1) example is correct. But I did something like: ``` git clone backup.pack ./repo ``` And `clone` will not transfer `refs/stash`. It’s there but it doesn’t seem that convenient to get *out* with a porcelain like git-clone(1). Maybe it’s possible but I kind of want to say “okay just pop your stashes and make regular commits/branches”. I’m not sure how to formulate that. Seems clumsy: refs are included in the bundle (also `refs/stash` but that particular one won't be included in e.g. a clone): Would it be too drastic to use a footnote? -- Kristoffer Haugsbakk ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example 2024-11-12 17:31 ` Kristoffer Haugsbakk @ 2024-11-12 22:58 ` Junio C Hamano 2024-11-16 14:28 ` Kristoffer Haugsbakk 0 siblings, 1 reply; 37+ messages in thread From: Junio C Hamano @ 2024-11-12 22:58 UTC (permalink / raw) To: Kristoffer Haugsbakk Cc: Kristoffer Haugsbakk, git, Ævar Arnfjörð Bjarmason, Taylor Blau "Kristoffer Haugsbakk" <kristofferhaugsbakk@fastmail.com> writes: > Maybe it’s possible but I kind of want to say “okay just pop your > stashes and make regular commits/branches”. That requires _more_ than recording the value of the ref for stash, as data for the Nth stash is recorded as the Nth reflog entry for that ref, and the reflog data is not what fetch/push/clone/bundle commands make available. > I’m not sure how to formulate that. Seems clumsy: > > refs are included in the bundle (also `refs/stash` but that > particular one won't be included in e.g. a clone): > > Would it be too drastic to use a footnote? I am not sure what you want to refer to with "that particular one", but the value of refs/stash does get recorded, and making a mirror clone out of the resulting bundle does give refs/stash with the value of the refs/stash in the original repository where the bundle was taken from. So refs/stash _does_ get included. What is not included is the reflog data for that ref (or any other ref, for that matter). Because the ref value is transferred via fetch/push/clone/bundle but the reflog (i.e. past values of a ref) data is *not*, "git stash show stash@{4}" is not something you can recreate in the copy of a repository, whether you create the copy with "clone" or "bundle + clone". The story is the same for other refs, and stash is not that special in this regard. "git show master@{yesterday}" in a freshly created copy would give something entirely different from what you would get in the original repository you mirror-cloned or took a bundle from. You'd need "cp -r" for that. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example 2024-11-12 22:58 ` Junio C Hamano @ 2024-11-16 14:28 ` Kristoffer Haugsbakk 0 siblings, 0 replies; 37+ messages in thread From: Kristoffer Haugsbakk @ 2024-11-16 14:28 UTC (permalink / raw) To: Junio C Hamano Cc: Kristoffer Haugsbakk, git, Ævar Arnfjörð Bjarmason, Taylor Blau On Tue, Nov 12, 2024, at 23:58, Junio C Hamano wrote: > "Kristoffer Haugsbakk" <kristofferhaugsbakk@fastmail.com> writes: > >> Maybe it’s possible but I kind of want to say “okay just pop your >> stashes and make regular commits/branches”. > > That requires _more_ than recording the value of the ref for stash, > as data for the Nth stash is recorded as the Nth reflog entry for > that ref, and the reflog data is not what fetch/push/clone/bundle > commands make available. > >> I’m not sure how to formulate that. Seems clumsy: >> >> refs are included in the bundle (also `refs/stash` but that >> particular one won't be included in e.g. a clone): >> >> Would it be too drastic to use a footnote? > > I am not sure what you want to refer to with "that particular one", > but the value of refs/stash does get recorded, and making a mirror > clone out of the resulting bundle does give refs/stash with the > value of the refs/stash in the original repository where the bundle > was taken from. So refs/stash _does_ get included. What is not > included is the reflog data for that ref (or any other ref, for that > matter). > > Because the ref value is transferred via fetch/push/clone/bundle but > the reflog (i.e. past values of a ref) data is *not*, "git stash > show stash@{4}" is not something you can recreate in the copy of a > repository, whether you create the copy with "clone" or "bundle + > clone". The story is the same for other refs, and stash is not that > special in this regard. "git show master@{yesterday}" in a freshly > created copy would give something entirely different from what you > would get in the original repository you mirror-cloned or took a > bundle from. > > You'd need "cp -r" for that. Thanks. I get it now. I always forget that the stash uses the reflog. ^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v3 2/4] Documentation/git-bundle.txt: remove old `--all` example 2024-11-07 11:57 ` [PATCH v3 0/4] " kristofferhaugsbakk 2024-11-07 11:57 ` [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk @ 2024-11-07 11:57 ` kristofferhaugsbakk 2024-11-07 11:57 ` [PATCH v3 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk ` (3 subsequent siblings) 5 siblings, 0 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-07 11:57 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> We don’t need this part now that we have a fleshed-out `--all` example. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): v3: • Moved over from previous patch Removing this mention was first suggested in the following link. Link: https://lore.kernel.org/git/ZxbIWEGS1UB3UIg+@nand.local/ Documentation/git-bundle.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index f39cafee927..724534a330f 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -202,8 +202,6 @@ 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 match `git clone --mirror`, which would include your -refs such as `refs/remotes/*`, use `--all`. 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>`. -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v3 3/4] Documentation/git-bundle.txt: mention --all in spec. refs 2024-11-07 11:57 ` [PATCH v3 0/4] " kristofferhaugsbakk 2024-11-07 11:57 ` [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk 2024-11-07 11:57 ` [PATCH v3 2/4] Documentation/git-bundle.txt: remove old `--all` example kristofferhaugsbakk @ 2024-11-07 11:57 ` kristofferhaugsbakk 2024-11-07 11:57 ` [PATCH v3 4/4] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk ` (2 subsequent siblings) 5 siblings, 0 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-07 11:57 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> Mention `--all` as an alternative in “Specifying References”. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Documentation/git-bundle.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 724534a330f..d95bdd0429c 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -131,7 +131,7 @@ SPECIFYING REFERENCES --------------------- Revisions must be accompanied by reference names to be packaged in a -bundle. +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 -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v3 4/4] Documentation/git-bundle.txt: discuss naïve backups 2024-11-07 11:57 ` [PATCH v3 0/4] " kristofferhaugsbakk ` (2 preceding siblings ...) 2024-11-07 11:57 ` [PATCH v3 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk @ 2024-11-07 11:57 ` kristofferhaugsbakk 2024-11-07 16:36 ` [PATCH v3 0/4] Documentation/git-bundle.txt: promote --all for full backup Junio C Hamano 2024-11-16 14:54 ` [PATCH v4 " kristofferhaugsbakk 5 siblings, 0 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-07 11:57 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> It might be naïve to think that those who need this education would end up here in the first place. But I think it’s good to mention this high-level concept here on a command which provides a backup strategy. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): v3: • Use `cp -r` instead of `cp -a` since the former is more widely supported (even though it is just an example) • Mention what this “full backup” does not cover here as well (see first patch) v2: • Fix gitfaq(7) link Link: https://lore.kernel.org/git/ZxfhAAgNlbEq60VB@nand.local/#t v1: Correct mention of the section? All-caps seems to be the convention. Documentation/git-bundle.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index d95bdd0429c..ad9ab3247f5 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -337,6 +337,24 @@ 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, 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 ----------- -- 2.46.1.641.g54e7913fcb6 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH v3 0/4] Documentation/git-bundle.txt: promote --all for full backup 2024-11-07 11:57 ` [PATCH v3 0/4] " kristofferhaugsbakk ` (3 preceding siblings ...) 2024-11-07 11:57 ` [PATCH v3 4/4] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk @ 2024-11-07 16:36 ` Junio C Hamano 2024-11-16 14:54 ` [PATCH v4 " kristofferhaugsbakk 5 siblings, 0 replies; 37+ messages in thread From: Junio C Hamano @ 2024-11-07 16:36 UTC (permalink / raw) To: kristofferhaugsbakk; +Cc: git, Kristoffer Haugsbakk, avarab, me kristofferhaugsbakk@fastmail.com writes: > The details are noted on the patches. > > Kristoffer Haugsbakk (4): > Documentation/git-bundle.txt: mention full backup example > Documentation/git-bundle.txt: remove old `--all` example > Documentation/git-bundle.txt: mention --all in spec. refs > Documentation/git-bundle.txt: discuss naïve backups I gave them a cursory read and nothing stood out as iffy. Looked good. One thing I wondered was, because it is not useful at all to take a "backup" when the user does not know how to restore from the backup, we may have to move things around to stress on _how_ the resulting backup bundle(s) are used to restore the saved state. I haven't applied the patches to review these changes in wider context yet, though. Thanks. ^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v4 0/4] Documentation/git-bundle.txt: promote --all for full backup 2024-11-07 11:57 ` [PATCH v3 0/4] " kristofferhaugsbakk ` (4 preceding siblings ...) 2024-11-07 16:36 ` [PATCH v3 0/4] Documentation/git-bundle.txt: promote --all for full backup Junio C Hamano @ 2024-11-16 14:54 ` kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 1/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk ` (3 more replies) 5 siblings, 4 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-16 14:54 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> The documentation for git-bundle(1) now prominently covers `--all`, the option from git-rev-list(1) that can be used to package all refs. A "Discussion" section has also been added to address the naive backup strategy of copying a Git repository manually with cp(1) or some other non-Git tool. --- The part above was for the-topic-summary. I was prompted by SO questions like this one: https://stackoverflow.com/questions/5578270/fully-backup-a-git-repo I then compared VonC’s answer to the man page. Cheers § Changes in v4 • Tell how to recover the backup (patch 1/4) • Fix confusion regarding `refs/stash` (patches 1/4 and 4/4) Kristoffer Haugsbakk (4): Documentation/git-bundle.txt: mention full backup example Documentation/git-bundle.txt: remove old `--all` example Documentation/git-bundle.txt: mention --all in spec. refs Documentation/git-bundle.txt: discuss naïve backups Documentation/git-bundle.txt | 59 ++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 9 deletions(-) Interdiff against v3: diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index ad9ab3247f5..504b8a8143a 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -216,21 +216,28 @@ EXAMPLES We'll discuss two cases: 1. Taking a full backup of a repository -2. Transfer the history of a repository to another machine when the two - machines have no direct connection +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 (except `refs/stash`, i.e. the stash): +refs are included in the bundle: ---------------- -$ git bundle create <file> --all +$ 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, per-repository configuration, hooks, etc. +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. @@ -349,8 +356,8 @@ 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, per-repository configuration, -hooks, etc. +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. Range-diff against v3: 1: b222c6787a7 ! 1: 5121edfee67 Documentation/git-bundle.txt: mention full backup example @@ Commit message ## Notes (series) ## + v4: + • Drop the part about `refs/stash` since that is wrong. What we want to + communicate is that the state of the stash is not transferred since + git-clone(1) does not include the reflogs. We can just lump that in + with the existin list of the index, working tree, … etc. + + Link: https://lore.kernel.org/git/xmqqh68c3vr8.fsf@gitster.g/ + • Add para. describing how to recover the backup + + Link: https://lore.kernel.org/git/xmqq1pzmqy97.fsf@gitster.g/ + • Correct tense: “transferring” v3: • Elaborate on “full backups” in Examples instead • Just point to the section in the second paragraph where everything is @@ Documentation/git-bundle.txt: bundle. +We'll discuss two cases: + +1. Taking a full backup of a repository -+2. Transfer the history of a repository to another machine when the two -+ machines have no direct connection ++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 (except `refs/stash`, i.e. the stash): ++refs are included in the bundle: + +---------------- -+$ git bundle create <file> --all ++$ 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, per-repository configuration, hooks, etc. ++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. 2: f0dbe356ca6 = 2: 7e9f320fade Documentation/git-bundle.txt: remove old `--all` example 3: 8336b0f451e = 3: 4e9907f092e Documentation/git-bundle.txt: mention --all in spec. refs 4: 0ab05a4cf09 ! 4: c8d5e3ee504 Documentation/git-bundle.txt: discuss naïve backups @@ Commit message ## Notes (series) ## + v4: + • Mention the stash (knock-on effect from patch 1/4) v3: • Use `cp -r` instead of `cp -a` since the former is more widely supported (even though it is just an example) @@ Documentation/git-bundle.txt: You can also see what references it offers: +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, per-repository configuration, -+hooks, etc. ++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. base-commit: 34b6ce9b30747131b6e781ff718a45328aa887d0 -- 2.47.0 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 1/4] Documentation/git-bundle.txt: mention full backup example 2024-11-16 14:54 ` [PATCH v4 " kristofferhaugsbakk @ 2024-11-16 14:54 ` kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 2/4] Documentation/git-bundle.txt: remove old `--all` example kristofferhaugsbakk ` (2 subsequent siblings) 3 siblings, 0 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-16 14:54 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> Provide an example about how to make a “full backup” with caveats about what that means in this case. This is a requested use-case.[1] But the doc is a bit unassuming about it: If you want to match `git clone --mirror`, which would include your refs such as `refs/remotes/*`, use `--all`. The user cannot be expected to formulate “I want a full backup” as “I want to match `git clone --mirror`” for a bundle file or something. Let’s drop this mention of `--all` later in the doc and frontload it. † 1: E.g.: • https://stackoverflow.com/questions/5578270/fully-backup-a-git-repo • https://stackoverflow.com/questions/11792671/how-to-git-bundle-a-complete-repo Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): v4: • Drop the part about `refs/stash` since that is wrong. What we want to communicate is that the state of the stash is not transferred since git-clone(1) does not include the reflogs. We can just lump that in with the existin list of the index, working tree, … etc. Link: https://lore.kernel.org/git/xmqqh68c3vr8.fsf@gitster.g/ • Add para. describing how to recover the backup Link: https://lore.kernel.org/git/xmqq1pzmqy97.fsf@gitster.g/ • Correct tense: “transferring” v3: • Elaborate on “full backups” in Examples instead • Just point to the section in the second paragraph where everything is elaborated • Incorporate some of Junio’s suggestions: • Mention what the “full backup” here does not include Link: https://lore.kernel.org/git/xmqqh68q1l37.fsf@gitster.g/ Link: https://lore.kernel.org/git/xmqqzfmiza69.fsf@gitster.g/#t • Remove the final paragraph pointing to Examples now that we mention it in the second paragraph v2: • Mention as a parenthetical on an existing paragraph (don’t create a new sentence and paragraph) • Remove the “mirror” mention Link (both): https://lore.kernel.org/git/ZxbIWEGS1UB3UIg+@nand.local/ Notes (meta-trailers): Helped-by: Junio C Hamano <gitster@pobox.com> Link: https://lore.kernel.org/git/xmqqzfmiza69.fsf@gitster.g/ Documentation/git-bundle.txt | 37 ++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 3ab42a19cae..b9eb9cef2f8 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -23,8 +23,9 @@ 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. +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 @@ -34,8 +35,6 @@ 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. -See the "EXAMPLES" section below for examples of how to use bundles. - BUNDLE FORMAT ------------- @@ -216,8 +215,34 @@ bundle. EXAMPLES -------- -Assume you want to transfer the history from a repository R1 on machine A -to another repository R2 on machine B. +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. -- 2.47.0 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 2/4] Documentation/git-bundle.txt: remove old `--all` example 2024-11-16 14:54 ` [PATCH v4 " kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 1/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk @ 2024-11-16 14:54 ` kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 4/4] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk 3 siblings, 0 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-16 14:54 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> We don’t need this part now that we have a fleshed-out `--all` example. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): v3: • Moved over from previous patch Removing this mention was first suggested in the following link. Link: https://lore.kernel.org/git/ZxbIWEGS1UB3UIg+@nand.local/ Documentation/git-bundle.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index b9eb9cef2f8..917d39356bb 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -202,8 +202,6 @@ 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 match `git clone --mirror`, which would include your -refs such as `refs/remotes/*`, use `--all`. 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>`. -- 2.47.0 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 3/4] Documentation/git-bundle.txt: mention --all in spec. refs 2024-11-16 14:54 ` [PATCH v4 " kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 1/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 2/4] Documentation/git-bundle.txt: remove old `--all` example kristofferhaugsbakk @ 2024-11-16 14:54 ` kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 4/4] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk 3 siblings, 0 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-16 14:54 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> Mention `--all` as an alternative in “Specifying References”. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Documentation/git-bundle.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 917d39356bb..eaa16fc4b83 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -131,7 +131,7 @@ SPECIFYING REFERENCES --------------------- Revisions must be accompanied by reference names to be packaged in a -bundle. +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 -- 2.47.0 ^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v4 4/4] Documentation/git-bundle.txt: discuss naïve backups 2024-11-16 14:54 ` [PATCH v4 " kristofferhaugsbakk ` (2 preceding siblings ...) 2024-11-16 14:54 ` [PATCH v4 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk @ 2024-11-16 14:54 ` kristofferhaugsbakk 3 siblings, 0 replies; 37+ messages in thread From: kristofferhaugsbakk @ 2024-11-16 14:54 UTC (permalink / raw) To: git; +Cc: Kristoffer Haugsbakk, avarab, me, gitster From: Kristoffer Haugsbakk <code@khaugsbakk.name> It might be naïve to think that those who need this education would end up here in the first place. But I think it’s good to mention this high-level concept here on a command which provides a backup strategy. Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> --- Notes (series): v4: • Mention the stash (knock-on effect from patch 1/4) v3: • Use `cp -r` instead of `cp -a` since the former is more widely supported (even though it is just an example) • Mention what this “full backup” does not cover here as well (see first patch) v2: • Fix gitfaq(7) link Link: https://lore.kernel.org/git/ZxfhAAgNlbEq60VB@nand.local/#t v1: Correct mention of the section? All-caps seems to be the convention. Documentation/git-bundle.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index eaa16fc4b83..504b8a8143a 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -344,6 +344,24 @@ 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 ----------- -- 2.47.0 ^ permalink raw reply related [flat|nested] 37+ messages in thread
end of thread, other threads:[~2024-11-16 14:56 UTC | newest] Thread overview: 37+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-10-20 19:14 [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup kristofferhaugsbakk 2024-10-20 19:14 ` [PATCH 1/4] Documentation/git-bundle.txt: mention --all in Synopsis kristofferhaugsbakk 2024-10-20 19:33 ` Kristoffer Haugsbakk 2024-10-21 21:30 ` Taylor Blau 2024-10-20 19:15 ` [PATCH 2/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk 2024-10-21 21:32 ` Taylor Blau 2024-10-22 21:18 ` Kristoffer Haugsbakk 2024-10-20 19:15 ` [PATCH 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk 2024-10-21 21:33 ` Taylor Blau 2024-10-20 19:15 ` [PATCH 4/4] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk 2024-10-21 21:36 ` [PATCH 0/4] Documentation/git-bundle.txt: promote --all for full backup Taylor Blau 2024-10-22 17:29 ` Taylor Blau 2024-10-22 21:22 ` Kristoffer Haugsbakk 2024-10-29 20:41 ` [PATCH v2 0/3] " kristofferhaugsbakk 2024-10-29 20:41 ` [PATCH v2 1/3] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk 2024-11-02 1:27 ` Junio C Hamano 2024-11-06 19:31 ` Kristoffer Haugsbakk 2024-10-29 20:41 ` [PATCH v2 2/3] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk 2024-10-29 20:41 ` [PATCH v2 3/3] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk 2024-11-02 1:39 ` Junio C Hamano 2024-10-29 22:19 ` [PATCH v2 0/3] Documentation/git-bundle.txt: promote --all for full backup Taylor Blau 2024-11-07 11:57 ` [PATCH v3 0/4] " kristofferhaugsbakk 2024-11-07 11:57 ` [PATCH v3 1/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk 2024-11-08 2:01 ` Junio C Hamano 2024-11-10 19:38 ` Kristoffer Haugsbakk 2024-11-12 17:31 ` Kristoffer Haugsbakk 2024-11-12 22:58 ` Junio C Hamano 2024-11-16 14:28 ` Kristoffer Haugsbakk 2024-11-07 11:57 ` [PATCH v3 2/4] Documentation/git-bundle.txt: remove old `--all` example kristofferhaugsbakk 2024-11-07 11:57 ` [PATCH v3 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk 2024-11-07 11:57 ` [PATCH v3 4/4] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk 2024-11-07 16:36 ` [PATCH v3 0/4] Documentation/git-bundle.txt: promote --all for full backup Junio C Hamano 2024-11-16 14:54 ` [PATCH v4 " kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 1/4] Documentation/git-bundle.txt: mention full backup example kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 2/4] Documentation/git-bundle.txt: remove old `--all` example kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 3/4] Documentation/git-bundle.txt: mention --all in spec. refs kristofferhaugsbakk 2024-11-16 14:54 ` [PATCH v4 4/4] Documentation/git-bundle.txt: discuss naïve backups kristofferhaugsbakk
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).