threads / discuss / 19872

Specifying multiple refspecs in remote.{remote}.fetch

Subject: Specifying multiple refspecs in remote.{remote}.fetch

## tl;dr

3 messages between Jun 20, 2009 and Jun 20, 2009.

replies: 2people: 2as markdown or json

Jon Seymour· Jun 20, 2009, 06:37 UTC · lore
It doesn't seem to be possible to specify multiple refspecs in a git config.
I want to do this:

remote.hub/pub/release.fetch=+refs/heads/*:refs/remotes/hub/pub/release/* +refs/tags/*:refs/tags/hub/pub/release/* remote.hub/pub/release.tagopt=--no-tags

but git fetch complains:

fatal: Invalid refspec '+refs/heads/*:refs/remotes/hub/pub/release/* +refs/tags/*:refs/tags/hub/pub/release/*'

Now, in theory, I could use a file in remotes/ to specify multiple
Pull: lines. This works if my remote doesn't have slashes in its name,
but it doesn't work if my remote does have slashes in its name since
git doesn't recognize remote files located in sub-directories of
${GIT_DIR}/remotes.
Is it a reasonable expectation that:
* git should support multiple refspecs specified via git config?
* git should support subdirectories in ${GIT_DIR}/remotes?
BTW: the reason I want to do this is that I need to namespace the tags
and heads because I am using a "hub" repo to simplify a transport
topology for distributing a number of different spoke repos via a
smaller number of hub repos. Since I can't guarantee the branches and
tags of each spoke repo will be globally unique, I need to namespace
both the heads and the tags and a path-like naming convention for each
spoke repo seems like the most natural way to do that.
jon seymour.
Jakub Narebski· Jun 20, 2009, 07:42 UTC · re: Jon Seymour · lore

Re: Specifying multiple refspecs in remote.{remote}.fetch

Jon Seymour <jon.seymour@gmail.com> writes:
Show 18 quoted lines
> It doesn't seem to be possible to specify multiple refspecs in a git config.
> 
> I want to do this:
> 
> remote.hub/pub/release.fetch=+refs/heads/*:refs/remotes/hub/pub/release/*
> +refs/tags/*:refs/tags/hub/pub/release/*
> remote.hub/pub/release.tagopt=--no-tags
> 
> but git fetch complains:
> 
> fatal: Invalid refspec '+refs/heads/*:refs/remotes/hub/pub/release/*
> +refs/tags/*:refs/tags/hub/pub/release/*'
> 
> Now, in theory, I could use a file in remotes/ to specify multiple
> Pull: lines. This works if my remote doesn't have slashes in its name,
> but it doesn't work if my remote does have slashes in its name since
> git doesn't recognize remote files located in sub-directories of
> ${GIT_DIR}/remotes.

And you can put multiple values for the same remote.hub/pub/release.fetch key, using "git config --add".

  $ git config --add remote.hub/pub/release.fetch \
        +refs/heads/*:refs/remotes/hub/pub/release/*
  $ git config --add remote.hub/pub/release.fetch \
        +refs/tags/*:refs/tags/hub/pub/release/*
  $ ...
You would get the following config:
  [remote "hub/pub/release"]
        url = ...
        fetch = +refs/heads/*:refs/remotes/hub/pub/release/*
        fetch = +refs/tags/*:refs/tags/hub/pub/release/*
        tagopts = --no-tags
You don't put many refspecs in a *single* value.
 
> Is it a reasonable expectation that:
> 
> * git should support multiple refspecs specified via git config?
It does.
> * git should support subdirectories in ${GIT_DIR}/remotes?
It does.
-- 
Jakub Narebski
Poland
ShadeHawk on #git
Jon Seymour· Jun 20, 2009, 13:00 UTC · re: Jakub Narebski · lore

Re: Specifying multiple refspecs in remote.{remote}.fetch

Jakub,
Ah, thanks for that.

I don't know why my attempt to use subdirs of remotes failed but if you say it works I'll try it again.

Anyway, thank you!
jon.

← back to recent threads