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

Re: [RFC PATCH v2 3/6] doc: Add namespace collision guidelines file

From
Junio C Hamano <gitster@pobox.com>
Date
May 28, 2020, 18:49 UTC
Message-ID
<xmqqy2pb3new.fsf@gitster.c.googlers.com>
In-Reply-To
<20200525232727.21096-4-keni@his.com>
Kenneth Lorber <keni@his.com> writes:
Show 8 quoted lines
> +Git uses identifiers in a number of different namespaces:
> +
> +* environment variables
> +* files in $GIT_DIR
> +* files in the working trees
> +* config sections
> +* hooks
> +* attributes

The names of the subcommands "git" can spawn is a shared resource. You can install "git-imerge" program in one of the directories on your $PATH and say "git imerge" to invoke the program.

Two third-party developers may have to coordinate to avoid giving the same name to their totally-unrelated tools, if they hope that both of their tools to be useful in the larger Git ecosystem.

> +In order to reduce the chance of collisions between names Git uses
> +and those used by other entities (users, groups, and extension authors),
> +the following are recommended best practices.
OK.
> +Names reserved to Git:
s/to/by/ perhaps.
> +Names reserved for individual users:
> +
> +* The directory `$GIT_DIR/my`

So an individual user is allowed to store anything in that directory, and "git" or any third-party tools won't care. OK.

> +* Environment variables starting with `GIT_MY_`

Likewise. But then the users can use MY_FOO_BLAH without GIT_ prefix in the first place, so there isn't much gain there. Downside for "git" and third-party tool authors is not so big (just the loss of a single prefix "_MY"), so perhaps it is OK.

> +* Configuration section `my`
> +* Files or directories in `$GIT_DIR/hooks` starting with `my_`
> +* Attributes starting with `my_`

The last one does not make much sense. You have to forbid defining my_attributes in .gitattributes files that are tracked in-tree; otherwise I cannot work with you on the same project, because I cannot use my_attributes for my own purpose in that project. For the same reason, reserving attributes for individual repositories does not make much sense, either.

> +Names reserved for individual repos:
> +
> +* The directory `$GIT_DIR/this`

It is unclear what it means to have $GIT_DIR/my and $GIT_DIR/this and how to choose which one of these two ought to be used for each occasion a user finds a need to store something in these places.

> +* Environment variables starting with `GIT_THIS_`
The utility of this one is dubious.  
	$ export GIT_THIS_BLAH=value
	$ cd repo1 ; work work work
	$ cd ../repo2 ; work work work

Unless you arrange to reset GIT_THIS_* environment variable every time you visit a separate repository, it would not be pratical to use.

> +Names reserved for the lowest level group of people:
What's lowest level group of people?
Also, where did the guideline for third-party tools go?

At this point I need to say that this is not very well thought out (yet), or that this is not very well explained, or perhaps both, so I'll stop commenting on it for now.

Thanks.
Previous: Kenneth LorberNext: Junio C Hamano
Message 27 of 42 in “various documentation bits”
  1. 0/6 various documentation bitsKenneth Lorber, May 17, 2020
  2. 2/6 Add bit on extending git to Hacking GitKenneth Lorber, May 17, 2020
  3. Junio C HamanoMay 17, 2020
  4. Kenneth LorberMay 18, 2020
  5. 1/6 Tell the glossary about core.hooksPathKenneth Lorber, May 17, 2020
  6. Junio C HamanoMay 17, 2020
  7. Kenneth LorberMay 18, 2020
  8. 5/6 Tell config.txt about NAMESPACE COLLISIONSKenneth Lorber, May 17, 2020
  9. Junio C HamanoMay 18, 2020
  10. 4/6 Include NAMESPACE COLLISIONS doc into gitrepository-layout.txtKenneth Lorber, May 17, 2020
  11. Junio C HamanoMay 18, 2020
  12. Kenneth LorberMay 18, 2020
  13. 3/6 Add namespace collision avoidance guidelines fileKenneth Lorber, May 17, 2020
  14. Abhishek KumarMay 17, 2020
  15. Kenneth LorberMay 18, 2020
  16. Junio C HamanoMay 17, 2020
  17. Kenneth LorberMay 18, 2020
  18. 6/6 Add NAMESPACE COLLISIONS reference to Hacking GitKenneth Lorber, May 17, 2020
  19. Abhishek KumarMay 17, 2020
  20. Junio C HamanoMay 17, 2020
  21. Kenneth LorberMay 18, 2020
  22. Kenneth LorberMay 18, 2020
  23. 0/6 various documentation bitsKenneth Lorber, May 25, 2020
  24. 6/6 doc: Add collision reference to Hacking GitKenneth Lorber, May 25, 2020
  25. 2/6 doc: Add bit on extending git to Hacking GitKenneth Lorber, May 25, 2020
  26. 3/6 doc: Add namespace collision guidelines fileKenneth Lorber, May 25, 2020
  27. Junio C HamanoMay 28, 2020
  28. Junio C HamanoMay 28, 2020
  29. Junio C HamanoMay 29, 2020
  30. Junio C HamanoMay 29, 2020
  31. Kenneth LorberJun 1, 2020
  32. Kenneth LorberJun 1, 2020
  33. 4/6 doc: Add collision doc to gitrepository-layout.txtKenneth Lorber, May 25, 2020
  34. 1/6 doc: Tell the glossary about core.hooksPathKenneth Lorber, May 25, 2020
  35. Junio C HamanoMay 26, 2020
  36. Kenneth LorberMay 27, 2020
  37. Kenneth LorberMay 27, 2020
  38. Junio C HamanoMay 27, 2020
  39. 5/6 doc: Tell config.txt about namespace collisionsKenneth Lorber, May 25, 2020
  40. 0/2 update glossary hooks entryKenneth Lorber, May 31, 2020
  41. 1/2 doc: Tell the glossary about core.hooksPathKenneth Lorber, May 31, 2020
  42. 2/2 doc: remove dated info and refs to sample hooksKenneth Lorber, May 31, 2020

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.