"Derrick Stolee via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Derrick Stolee <dstolee@xxxxxxxxxxxxx> > > To prevent long blocking time during a 'git fetch' call, a user > may want to set up a schedule for background 'git fetch' processes. > However, these runs will update the refs/remotes branches due to > the default refspec set in the config when Git adds a remote. > Hence the user will not notice when remote refs are updated during > their foreground fetches. In fact, they may _want_ those refs to > stay put so they can work with the refs from their last foreground > fetch call. > > This can be accomplished by overriding the configured refspec using > '--refmap=' along with a custom refspec: > > git fetch <remote> --refmap= +refs/heads/*:refs/hidden/<remote>/* > > to populate a custom ref space and download a pack of the new > reachable objects. This kind of call allows a few things to happen: > > 1. We download a new pack if refs have updated. > 2. Since the refs/hidden branches exist, GC will not remove the > newly-downloaded data. > 3. With fetch.writeCommitGraph enabled, the refs/hidden refs are > used to update the commit-graph file. > > To avoid the refs/hidden directory from filling without bound, the > --prune option can be included. When providing a refspec like this, > the --prune option does not delete remote refs and instead only > deletes refs in the target refspace. > > Update the documentation to clarify how '--refmap=""' works and > create tests to guarantee this behavior remains in the future. > > Signed-off-by: Derrick Stolee <dstolee@xxxxxxxxxxxxx> > --- Thanks. Looks quite good. Will queue.