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

Re: [RFC/PATCH 2/2] doc: command line interface (cli) dot-repository dwimmery

From
Junio C Hamano <gitster@pobox.com>
Date
May 21, 2013, 16:23 UTC
Message-ID
<7vfvxgqp3m.fsf@alter.siamese.dyndns.org>
In-Reply-To
<08847FEAFB00489695F31AA651F5EA2E@PhilipOakley>
"Philip Oakley" <philipoakley@iee.org> writes:
Show 21 quoted lines
> From: "Junio C Hamano" <gitster@pobox.com>
> Sent: Monday, May 20, 2013 11:22 PM
>> "Philip Oakley" <philipoakley@iee.org> writes:
>>
>>> So we can have a branch whose remote is '.'
>>> _and_ a remote whose URL is '.'
>>
>> Yes, and they are two separate concepts.
> Thank you of the confirmation.
>
>>
>> "git fetch" while on "mywork" branch with this:
>>
>>    [branch "mywork"]
>>        remote = git://git.k.org/pub/scm/git/git.git
>>        merge = refs/heads/master
>>
>> without having any named remote whose remote.$name.url is set to
>> that URL may happen to work but it is by accident as far as I know.
> Interesting. Any thoughts on which way it should be
> documented/deprecated?

If "leave it as-is" is not an option, I personally would prefer mentioning "this happens to work, but do not rely on it" in the passing. I do not see any immediate need to break things for people discovered that this happens to work and who decided that they have no need for a remote tracking branch for the particular remote this branch happens to integrate with. By making that choice, they may be forgoing the use of @{u}, but they won't be inconvenienced as "git fetch" will leave what they need @{u} for in FETCH_HEAD, i.e. instead of doing

	git fetch
	git log [-p] ..@{u}
        git merge @{u} ;# or git rebase @{u}

as a "verify in the middle" replacement for "git pull [--rebase]", they can do

	git fetch
	git log [-p] ..FETCH_HEAD
        git merge FETCH_HEAD ;# or git rebase FETCH_HEAD
just fine.

The "do not rely on it" is primarily because there are more familiar ways invented later (namely, use a named remote instead of writing a real URL, with remote tracking branches). I do not think we would want to deliberately sabotage the people who currently use such a setting, but I do not see a strong reason to recommend it to people who are new to Git, either, *unless* they need to fetch from many different places and do not want to have remote tracking branches because the only time they care about the state of their remotes is immediately after they fetched.

Show 9 quoted lines
>>> Can there be a clash with a named remote that is actually '.', where
>>> the push/fetch is actually a no-op?
>>
>> Nobody sane would do it in the first place, so...
>
> Oh I don't know. I don't think 'sanity' comes into it any more than
> common sense' is common. It's easy to fall into the inverse
> Kruger-Dunning mode where those in the know don't realise how much
> they know, and how 'stupid' those that don't can be (that'd be me;-).

How would you even express such a remote named "." in the first place? "git remote add" would not let you say:

	$ git remote add . git://some.where.xz/some/repo.git
        fatal: '.' is not a valid remote name

and even if you add configuration variables by hand, it would not look like this:

	[remote "."]
        	fetch = +refs/heads/*:refs/remotes/./*

You would want some real token between "refs/remotes/" and the trailing "/*" instead, so...

Show 7 quoted lines
> All this 'what's a dot-repo and where can I use it' came about because
> of an answer that give it's use as a 'trick'.
>
> On Sat, May 4, 2013 at 2:51 PM, Jonathan Nieder <jrnieder@gmail.com>
> wrote:
>> Another trick is to use "git push":
>>         git push . $production_sha1:refs/heads/master

It all falls out naturally from the "Git is distributed and no repository is special" principle. I think that word "trick" merely refers to "those who do not realize that the local repository is not all that special and merely is _a_ repository just like anybody else's may not realize they can do this", nothing more.

> Filipe gave 'git fetch .' in [PATCH 1/3] fetch: add --allow-local
> option, 16 May 2013

That patch came from a mistaken suggestion from me that was retracted with

    http://article.gmane.org/gmane.comp.version-control.git/224729
Previous: Philip OakleyNext: Felipe Contreras
Message 13 of 33 in “Extend dot repository documentation”
  1. 0/2 Extend dot repository documentationPhilip Oakley, May 19, 2013
  2. 1/2 config doc: add dot-repository notePhilip Oakley, May 19, 2013
  3. Jonathan NiederMay 19, 2013
  4. Junio C HamanoMay 20, 2013
  5. Philip OakleyMay 20, 2013
  6. 2/2 doc: command line interface (cli) dot-repository dwimmeryPhilip Oakley, May 19, 2013
  7. Jonathan NiederMay 19, 2013
  8. Philip OakleyMay 19, 2013
  9. Junio C HamanoMay 20, 2013
  10. Philip OakleyMay 20, 2013
  11. Junio C HamanoMay 20, 2013
  12. Philip OakleyMay 21, 2013
  13. Junio C HamanoMay 21, 2013
  14. Felipe ContrerasMay 21, 2013
  15. Philip OakleyMay 21, 2013
  16. Felipe ContrerasMay 21, 2013
  17. Junio C HamanoMay 21, 2013
  18. Felipe ContrerasMay 22, 2013
  19. Junio C HamanoMay 22, 2013
  20. Felipe ContrerasMay 22, 2013
  21. Junio C HamanoMay 22, 2013
  22. Felipe ContrerasMay 22, 2013
  23. Philip OakleyMay 22, 2013
  24. Felipe ContrerasMay 22, 2013
  25. 0/3 Extend dot repository documentationPhilip Oakley, Sep 13, 2013
  26. 1/3 Doc URLs: relative paths imply the dot-respositoryPhilip Oakley, Sep 13, 2013
  27. Junio C HamanoSep 13, 2013
  28. Philip OakleySep 14, 2013
  29. 2/3 config doc: update dot-repository notesPhilip Oakley, Sep 13, 2013
  30. Junio C HamanoSep 13, 2013
  31. Philip OakleySep 14, 2013
  32. 3/3 doc: command line interface (cli) dot-repository dwimmeryPhilip Oakley, Sep 13, 2013
  33. Junio C HamanoSep 13, 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.