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

Re: [PATCH 23/24] t5505,t5516: create .git/branches/ when needed

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jul 19, 2019, 14:52 UTC
Message-ID
<nycvar.QRO.7.76.6.1907191555180.47@tvgsbejvaqbjf.bet>
In-Reply-To
<xmqqftn3xet7.fsf@gitster-ct.c.googlers.com>
Hi Junio,
On Thu, 18 Jul 2019, Junio C Hamano wrote:
Show 21 quoted lines
> "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
> writes:
>
> > From: Johannes Schindelin <johannes.schindelin@gmx.de>
> >
> > It is a real old anachronism from the Cogito days to have a
> > .git/branches/ directory. And to have tests that ensure that Cogito
> > users can migrate away from using that directory.
> >
> > But so be it, let's continue testing it.
> >
> > Let's make sure, however, that git init does not need to create that
> > directory.
> >
> > This bug was noticed when testing with templates that had been
> > pre-committed, skipping the empty branches/ directory of course because
> > Git does not track empty directories.
>
> Many tests assume that the .git/info/ directory exists, and the only
> reason why they can is because we have templates/info--exclude; the
> situation around .git/branches/ is exactly the same.

No, the situation with `info/` is that it includes a file called `exclude`, which means that the `templates/` directory can be "tracked". This is important because we want to commit all those generated files that cannot be generated inside Visual Studio without Git for Windows' SDK (which weighs in with several hundred megabytes to download, a gigabyte on disk).

The `branches/` subdirectory, in contrast, is totally useless for at least 99.999% of the users, and hence it is understandable that it does not even contain a single file. Which means that it is *not* "tracked".

So when checking out, e.g. the `vs/master` branch at https://github.com/git-for-windows/git, which is auto-generated using this here patch series from Git for Windows' `master`, to allow building in Visual Studio without having to download the full Git for Windows SDK, there will be the `info/` directory (by virtue of containing a trackable file) exists, and the `branches/` subdirectory won't exist.

As a consequence, the test scripts indicated in the commit message, which _can_ be run in a regular Git for Windows (no Git for Windows SDK required), will fail without this patch.

> Deprecating .git/branches/ directory and dropping the parts of tests
> that wants to make sure the support still works (t5516 is not about
> migration but about working with .git/branches configuration) would
> be a different matter.
Indeed.

You probably forgot that I already proposed that, long time ago: https://public-inbox.org/git/cover.1494509599.git.johannes.schindelin@gmx.de/

I haven't forgotten, because you shot it down unceremoniously:
	The last time I thought about trying this several years ago, I found
	that people who need to grab things from many places still do use
	.git/branches/ and their use case is hard to migrate to .git/config,
	primarily because the former is "one per file" and it is easy to
	add/remove/tweak without affecting others.  Ask akpm@ if he still
	prefers to use .git/branches/ for example.

Of course, with such a kind of argument, there is no way how I could possibly prove that it is no longer advisable to have `.git/branches/`.

"Someone, somewhere _probably_ finds this still useful, so we won't remove it."

> Until that happens, let's not do this patch;
Well, that's another of these type of arguments.

Without this patch, and without removing support for `.git/branches/`, you force the Visual Studio build to _not_ pass the test suite. It's as simple as that.

So basically, by this statement you decided that there will not be a fully-functional way to build Git in Visual Studio and to pass the test suite with that.

Which is a shame.
> otherwise it would force us to sprinkle "mkdir -p .git/info/" all
> over the place for the same rationale.

You may have assumed that I did not carefully verify that the test suite passes with these patches. But I did. And I would not have submitted this patch series if such a patch was necessary, at least not without said patch.

> A directory in .git/ created by hardcoded mkdir in "git init" (like
> .git/refs/) and created by copying templates by "git init" (like
> .git/info/ and .git/branches) are both "created by 'git init'".
> Special casing the latter is just silly.

The thing that _really_ is silly is that we have that directory in Git's templates, still.

Git itself does not populate it. Git does not need it, ever. Git works Just Fine without it, and it is really by design that it does not require the presence of that subdirectory.

Only those two test cases insist, for some reason that escapes me, on the presence of those subdirectories.

As I said, Git does not populate that subdirectory. It even lacks all facilities to populate it. You have to write the files inside it yourself, you have to figure out the syntax of the files in that directory, and the only place where we document this is buried deeply in `Documentation/gitrepository-layout.txt`.

It is a bit silly, too, that we say there, in that very documentation for that very feature, that this feature is "slightly deprecated".

Either it is deprecated, or it isn't.

Further, it is a bit silly that this "slight deprecation" has been there since a1d4aa74241 (Add repository-layout document., 2005-09-01).

In other words, that feature was "slightly deprecated" already a mere five months after Git was made public. Yet we still shlep it around, fourteen (!) years later.

In yet other words, the support for `.git/branches` has been "slightly deprecated" more than 33x longer than it hasn't been.

I just wish that my patches to remove the support for `.git/branches` would have gone somewhere useful instead of into this ugly impasse.

Ciao, Dscho

Previous: Junio C HamanoNext: Junio C Hamano
Message 21 of 63 in “Reinstate support for Visual Studio”
  1. 00/24 Reinstate support for Visual StudioJohannes Schindelin via GitGitGadget, Jul 18, 2019
  2. 01/24 Vcproj.pm: auto-generate GUIDsJohannes Schindelin via GitGitGadget, Jul 18, 2019
  3. 03/24 Vcproj.pm: do not configure VCWebServiceProxyGeneratorToolJohannes Schindelin via GitGitGadget, Jul 18, 2019
  4. 02/24 Vcproj.pm: list git.exe first to be startup projectPhilip Oakley via GitGitGadget, Jul 18, 2019
  5. 09/24 contrib/buildsystems: ignore gettext stuffPhilip Oakley via GitGitGadget, Jul 18, 2019
  6. 06/24 contrib/buildsystems: ignore irrelevant files in Generators/Johannes Schindelin via GitGitGadget, Jul 18, 2019
  7. 07/24 contrib/buildsystems: fix misleading error messagePhilip Oakley via GitGitGadget, Jul 18, 2019
  8. 05/24 contrib/buildsystems: ignore invalidcontinue.objPhilip Oakley via GitGitGadget, Jul 18, 2019
  9. 10/24 contrib/buildsystems: redirect errors of the dry run into a log filePhilip Oakley via GitGitGadget, Jul 18, 2019
  10. 11/24 contrib/buildsystems: optionally capture the dry-run in a filePhilip Oakley via GitGitGadget, Jul 18, 2019
  11. 15/24 contrib/buildsystems: also handle -lexpatJohannes Schindelin via GitGitGadget, Jul 18, 2019
  12. 13/24 contrib/buildsystems: handle the curl library optionPhilip Oakley via GitGitGadget, Jul 18, 2019
  13. 12/24 contrib/buildsystems: error out on unknown optionJohannes Schindelin via GitGitGadget, Jul 18, 2019
  14. 18/24 msvc: add a Makefile target to pre-generate the Visual Studio solutionJohannes Schindelin via GitGitGadget, Jul 18, 2019
  15. 20/24 .gitignore: touch up the entries regarding Visual StudioPhilip Oakley via GitGitGadget, Jul 18, 2019
  16. 17/24 contrib/buildsystems: add a backend for modern Visual Studio versionsJohannes Schindelin via GitGitGadget, Jul 18, 2019
  17. 22/24 bin-wrappers: append `.exe` to target paths if necessaryJohannes Schindelin via GitGitGadget, Jul 18, 2019
  18. 24/24 git: avoid calling aliased builtins via their dashed formJohannes Schindelin via GitGitGadget, Jul 18, 2019
  19. 23/24 t5505,t5516: create .git/branches/ when neededJohannes Schindelin via GitGitGadget, Jul 18, 2019
  20. Junio C HamanoJul 18, 2019
  21. Johannes SchindelinJul 19, 2019
  22. Junio C HamanoJul 19, 2019
  23. Junio C HamanoJul 19, 2019
  24. Junio C HamanoJul 19, 2019
  25. 14/24 contrib/buildsystems: handle libiconv, tooJohannes Schindelin via GitGitGadget, Jul 18, 2019
  26. 21/24 .gitignore: ignore Visual Studio's temporary/generated filesJohannes Schindelin via GitGitGadget, Jul 18, 2019
  27. 19/24 vcxproj: also link-or-copy builtinsJohannes Schindelin via GitGitGadget, Jul 18, 2019
  28. 16/24 contrib/buildsystems: handle options starting with a slashJohannes Schindelin via GitGitGadget, Jul 18, 2019
  29. 08/24 contrib/buildsystems: handle quoted spaces in filenamesPhilip Oakley via GitGitGadget, Jul 18, 2019
  30. 04/24 Vcproj.pm: urlencode '<' and '>' when generating VC projectsJohannes Schindelin via GitGitGadget, Jul 18, 2019
  31. 00/23 Reinstate support for Visual StudioJohannes Schindelin via GitGitGadget, Jul 29, 2019
  32. 01/23 Vcproj.pm: auto-generate GUIDsJohannes Schindelin via GitGitGadget, Jul 29, 2019
  33. 02/23 Vcproj.pm: list git.exe first to be startup projectPhilip Oakley via GitGitGadget, Jul 29, 2019
  34. 03/23 Vcproj.pm: do not configure VCWebServiceProxyGeneratorToolJohannes Schindelin via GitGitGadget, Jul 29, 2019
  35. 04/23 Vcproj.pm: urlencode '<' and '>' when generating VC projectsJohannes Schindelin via GitGitGadget, Jul 29, 2019
  36. 05/23 contrib/buildsystems: ignore invalidcontinue.objPhilip Oakley via GitGitGadget, Jul 29, 2019
  37. 11/23 contrib/buildsystems: optionally capture the dry-run in a filePhilip Oakley via GitGitGadget, Jul 29, 2019
  38. 12/23 contrib/buildsystems: error out on unknown optionJohannes Schindelin via GitGitGadget, Jul 29, 2019
  39. 16/23 contrib/buildsystems: handle options starting with a slashJohannes Schindelin via GitGitGadget, Jul 29, 2019
  40. 15/23 contrib/buildsystems: also handle -lexpatJohannes Schindelin via GitGitGadget, Jul 29, 2019
  41. 17/23 contrib/buildsystems: add a backend for modern Visual Studio versionsJohannes Schindelin via GitGitGadget, Jul 29, 2019
  42. 20/23 .gitignore: touch up the entries regarding Visual StudioPhilip Oakley via GitGitGadget, Jul 29, 2019
  43. SZEDER GáborAug 25, 2019
  44. Philip OakleyAug 25, 2019
  45. SZEDER GáborAug 25, 2019
  46. Philip OakleyAug 25, 2019
  47. SZEDER GáborAug 26, 2019
  48. Johannes SchindelinAug 28, 2019
  49. Johannes SchindelinAug 26, 2019
  50. Junio C HamanoAug 26, 2019
  51. 21/23 .gitignore: ignore Visual Studio's temporary/generated filesJohannes Schindelin via GitGitGadget, Jul 29, 2019
  52. 23/23 git: avoid calling aliased builtins via their dashed formJohannes Schindelin via GitGitGadget, Jul 29, 2019
  53. 14/23 contrib/buildsystems: handle libiconv, tooJohannes Schindelin via GitGitGadget, Jul 29, 2019
  54. 19/23 vcxproj: also link-or-copy builtinsJohannes Schindelin via GitGitGadget, Jul 29, 2019
  55. 22/23 bin-wrappers: append `.exe` to target paths if necessaryJohannes Schindelin via GitGitGadget, Jul 29, 2019
  56. 18/23 msvc: add a Makefile target to pre-generate the Visual Studio solutionJohannes Schindelin via GitGitGadget, Jul 29, 2019
  57. 10/23 contrib/buildsystems: redirect errors of the dry run into a log filePhilip Oakley via GitGitGadget, Jul 29, 2019
  58. 06/23 contrib/buildsystems: ignore irrelevant files in Generators/Johannes Schindelin via GitGitGadget, Jul 29, 2019
  59. 13/23 contrib/buildsystems: handle the curl library optionPhilip Oakley via GitGitGadget, Jul 29, 2019
  60. 09/23 contrib/buildsystems: ignore gettext stuffPhilip Oakley via GitGitGadget, Jul 29, 2019
  61. 07/23 contrib/buildsystems: fix misleading error messagePhilip Oakley via GitGitGadget, Jul 29, 2019
  62. 08/23 contrib/buildsystems: handle quoted spaces in filenamesPhilip Oakley via GitGitGadget, Jul 29, 2019
  63. Junio C HamanoJul 29, 2019

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.