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

Re: [PATCH] Fix premature call to git_config() causing t1020-subdirectory to fail

From
Daniel Barkalow <barkalow@iabervon.org>
Date
Feb 27, 2008, 19:47 UTC
Message-ID
<alpine.LNX.1.00.0802271430130.19665@iabervon.org>
In-Reply-To
<7vy79718tn.fsf@gitster.siamese.dyndns.org>
On Tue, 26 Feb 2008, Junio C Hamano wrote:
Show 18 quoted lines
> Daniel Barkalow <barkalow@iabervon.org> writes:
> 
> > There's nothing in the documentation to suggest that you can use 
> > GIT_CONFIG to affect how the old repository is read, or that GIT_CONFIG 
> > doesn't affect the new repository. Actually, as far as I can tell, the 
> > configuration of a repository you're cloning (local or remote) doesn't 
> > matter at all. Note that GIT_DIR and GIT_WORK_TREE refer to the new repo, 
> > so it would be surprising for GIT_CONFIG to refer to the old one.
> 
> There was a bit of confusion in this discussion.
> 
> GIT_DIR the user may have in the environment may refer to the
> old reopsitory before "git clone" is invoked, but it should not
> matter at all, as the origin of the cloning comes from the
> command line and that is where we will read from.  The scripted
> version sets GIT_DIR for our own use to point at the new
> repository upfront and exports it, so we are safe from bogus
> GIT_DIR value the user may have in the environment.

Huh. I think there's a comment in some test or somewhere that made me think that "GIT_DIR=dest.git git clone foo" would write to dest.git instead of ./foo/.git, but your description here is accurate.

> GIT_WORK_TREE naming the new repository feels Ok, as you do not
> care about the work tree of the original tree when cloning, and
> you may want to have a say in where the work tree associated
> with the new repository should go.

We currently definitely support "GIT_WORK_TREE=work git clone something", pretty much explicitly on line 235 of git-clone.sh.

Show 20 quoted lines
> GIT_CONFIG the user may have will refer to the old repository
> before "git clone" is invoked, as there is no new repository
> built yet.  But clone does not read from the old config, so "you
> can use GIT_CONFIG to read from old repository" may be true, but
> it does not matter.  We won't use it (we do _not_ want to use
> it) to read from the old configuration file.
> 
> We would however want to make sure that we write to the correct
> configuration file of the new repository and not some random
> other place, and that's where the environment variable in the
> scripted version comes into the picture.
> 
> In the scripted version, the only way to make sure which exact
> configuration file is updated is to set and export GIT_CONFIG
> when running "git config", so there are a few places that does
> exactly that (e.g. call to git-init and setting of core.bare).
> Unfortunately many codepaths in the scripted version are utterly
> careless (e.g. setting of remote."$origin".fetch); they should
> make sure that they protect themselves against GIT_CONFIG the
> user may have in the environment that point at random places.

Since it sets GIT_DIR, it also could simply unset GIT_CONFIG, and then everything would just write to the config file for the new GIT_DIR. On the other hand, if you have GIT_CONFIG exported in your environment, and you set up a repository with "git clone", and clone unsets or overrides GIT_CONFIG, then your new repository will immediately be unusable, because clone will set up the config file inside the new repository, but nothing you run after that will look in the new repository, since everything else obeys the GIT_CONFIG you still have set.

On the other hand, I don't see why any git command other than "git config" (run my the user directly) has any business looking at GIT_CONFIG, since it's only mentioned in the man page for git-config, and not in general for configuration, the wrapper, or other programs.

	-Daniel
*This .sig left intentionally blank*
Previous: Junio C HamanoNext: Junio C Hamano
Message 20 of 47 in “[RFC] Build in clone”
  1. Daniel BarkalowFeb 25, 2008
  2. Johan HerlandFeb 26, 2008
  3. Johannes SchindelinFeb 26, 2008
  4. Johan HerlandFeb 26, 2008
  5. Johan HerlandFeb 26, 2008
  6. Johan HerlandFeb 26, 2008
  7. Fix premature free of ref_lists while writing temporary refs to fileJohan Herland, Feb 26, 2008
  8. Johannes SchindelinFeb 26, 2008
  9. Johan HerlandFeb 26, 2008
  10. Daniel BarkalowFeb 26, 2008
  11. Johan HerlandFeb 26, 2008
  12. Fix premature call to git_config() causing t1020-subdirectory to failJohan Herland, Feb 26, 2008
  13. Johannes SchindelinFeb 26, 2008
  14. Daniel BarkalowFeb 26, 2008
  15. Johannes SchindelinFeb 26, 2008
  16. Daniel BarkalowFeb 26, 2008
  17. Junio C HamanoFeb 27, 2008
  18. Daniel BarkalowFeb 27, 2008
  19. Junio C HamanoFeb 27, 2008
  20. Daniel BarkalowFeb 27, 2008
  21. Junio C HamanoFeb 27, 2008
  22. Daniel BarkalowFeb 27, 2008
  23. Daniel BarkalowFeb 26, 2008
  24. Kristian HøgsbergFeb 26, 2008
  25. builtin-clone: create remotes/origin/HEAD symref, if guessedJohannes Schindelin, Mar 2, 2008
  26. builtin-clone: create remotes/origin/HEAD symref, if guessedJohannes Schindelin, Mar 2, 2008
  27. builtin clone: support bundlesJohannes Schindelin, Mar 2, 2008
  28. Daniel BarkalowMar 2, 2008
  29. Santi BéjarMar 3, 2008
  30. Daniel BarkalowMar 2, 2008
  31. Johannes SchindelinMar 2, 2008
  32. Junio C HamanoMar 2, 2008
  33. Junio C HamanoMar 2, 2008
  34. Add test for cloning with "--reference" repo being a subset of source repoJohan Herland, Mar 3, 2008
  35. Daniel BarkalowMar 3, 2008
  36. Daniel BarkalowMar 3, 2008
  37. Johan HerlandMar 4, 2008
  38. 1/2 Add test illustrating issues with sha1_file_name() and switching reposJohan Herland, Mar 4, 2008
  39. 2/2 Overly simplistic fix for issue with sha1_file_name() and switching reposJohan Herland, Mar 4, 2008
  40. Daniel BarkalowMar 4, 2008
  41. Daniel BarkalowMar 5, 2008
  42. Johan HerlandMar 5, 2008
  43. Kristian HøgsbergMar 3, 2008
  44. Pierre HabouzitMar 3, 2008
  45. Johannes SchindelinMar 3, 2008
  46. Johannes SchindelinMar 3, 2008
  47. Johan HerlandMar 3, 2008

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.