git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v6 06/10] fast-export: add new --refspec option

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 12, 2013, 23:54 UTC
Message-ID
<xmqqob5pfa6j.fsf@gitster.dls.corp.google.com>
In-Reply-To
<xmqq38n1guo8.fsf@gitster.dls.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 16 quoted lines
> Felipe Contreras <felipe.contreras@gmail.com> writes:
>
>> Does it?
>>
>>  % git config remote.origin.fetch '+refs/heads/*:refs/remotes-test/origin/*'
>>  % git fetch origin master
>>  From /home/felipec/dev/git
>>   * branch            master     -> FETCH_HEAD
>>   * [new branch]      master     -> refs/remotes-test/origin/master
>>
>> In this case remote.origin.fetch is determining how to translate ref names, not
>> what gets transferred, *exactly* the same as we are doing with --refspec. And
>> as far as I know, remote.origin.fetch is a refspec.
>
> If you had 'next' and 'pu' branches at the remote, do they get
> fetched with that command line?
More interestingly, if you have
	[remote "mothership"]
		push = +refs/heads/*:refs/remotes/satellite/*
in your configuration and then said
	$ git push mothership master

then configured remote.mothership.push is not even used (I bring this up because "export" is more closely related to "push" than "fetch").

This (and why 'next' and 'pu' are not fetched in the "fetch" example) is because traditionally, refspecs that are explicitly given on the command line overrides configured ones (in other words, configured ones are used as a fallback default).

This is a bit of tangent, but since the recent discussion on the triangular workflows, I've been wondering if we may want to have a new way to configure things so that we can say "When I push to mothership any one of my local branches, I want it to go to the ref with the same name at the mothership under refs/remotes/satellite/ hierarchy (because I am emulating 'git fetch' that is run on the mothership to get updates from this satellite)", somewhat similar to what you added to "fast-export" via the option in question.

But we cannot achieve that mapping by changing the meaning of the configured refspecs remote.mothership.push without having to worry about breaking existing practices of people. When they say "git push mothership master", they do mean to push refs/heads/master to refs/heads/master, and it will break the expectation in their existing repositories if we change the semantics under them.

A possible way to achieve that mapping "When I push to mothership any one of my local branches,..." could be to introduce a _new_ configuration (so that existing repositories will not suddenly change their behaviour):

	[remote "mothership"]
		pushmap = +refs/heads/*:refs/remotes/satellite/*
And then we can allow this command line
	$ git push mothership master

to be affected by the mapping when expanding the short-hand refspecs given on the command line. Traditionally, anything without colon stood as a short-hand for "push to the same name", e.g. 'master' is for 'refs/heads/master:refs/heads/master' in this example, and 'v1.0' would be for 'refs/tags/v1.0:refs/tags/v1.0'.

But it does not have to stay that way. In order to move things forward in that direction, this new configuration has to be distinguishable from the traditional "refspec", as it embodies a different concept.

Previous: Felipe ContrerasNext: Felipe Contreras
Message 21 of 32 in “transport-helper: add support to delete branches”
  1. 10/10 transport-helper: add support to delete branchesFelipe Contreras, Nov 11, 2013
  2. 00/10 transport-helper: updatesFelipe Contreras, Nov 11, 2013
  3. Junio C HamanoNov 11, 2013
  4. Felipe ContrerasNov 11, 2013
  5. Junio C HamanoNov 11, 2013
  6. Richard HansenNov 12, 2013
  7. Felipe ContrerasNov 12, 2013
  8. remote-bzr: support the new 'force' optionRichard Hansen, Nov 12, 2013
  9. Felipe ContrerasNov 12, 2013
  10. 01/10 transport-helper: fix extra linesFelipe Contreras, Nov 11, 2013
  11. 08/10 fast-import: add support to delete refsFelipe Contreras, Nov 11, 2013
  12. 05/10 fast-export: improve argument parsingFelipe Contreras, Nov 11, 2013
  13. 06/10 fast-export: add new --refspec optionFelipe Contreras, Nov 11, 2013
  14. Junio C HamanoNov 11, 2013
  15. Felipe ContrerasNov 11, 2013
  16. Richard HansenNov 12, 2013
  17. Junio C HamanoNov 12, 2013
  18. Felipe ContrerasNov 12, 2013
  19. Junio C HamanoNov 12, 2013
  20. Felipe ContrerasNov 12, 2013
  21. Junio C HamanoNov 12, 2013
  22. Felipe ContrerasDec 7, 2013
  23. Junio C HamanoDec 9, 2013
  24. Junio C HamanoDec 9, 2013
  25. Felipe ContrerasApr 24, 2014
  26. 03/10 transport-helper: add 'force' to 'export' helpersFelipe Contreras, Nov 11, 2013
  27. Junio C HamanoNov 11, 2013
  28. Felipe ContrerasNov 11, 2013
  29. 09/10 fast-export: add support to delete refsFelipe Contreras, Nov 11, 2013
  30. 07/10 transport-helper: add support for old:new refspecFelipe Contreras, Nov 11, 2013
  31. 04/10 transport-helper: check for 'forced update' messageFelipe Contreras, Nov 11, 2013
  32. 02/10 transport-helper: don't update refs in dry-runFelipe Contreras, Nov 11, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.