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

Re: I don't want the .git directory next to my code.

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Jan 16, 2008, 18:15 UTC
Message-ID
<alpine.LFD.1.00.0801161000310.2806@woody.linux-foundation.org>
In-Reply-To
<478E3D8E.1090300@talkingspider.com>
On Wed, 16 Jan 2008, Mike wrote:
Show 7 quoted lines
>
> Neil Macneale wrote:
> >
> > It seems to me that you are asking git to be your deployment software,
> > which is a bad fit.
> 
> I'm asking git to get out of my deployment!
I think you mis-understood.

The normal way of handling this is to NOT DO DEVELOPMENT IN YOUR DEPLOYMENT TREE!

It's almost always a bad idea to develop in the tree that is also where you "export" things, and if you find git annoying in this respect, ask yourself why pretty much *every*single*scm*out*there* makes their infrastructure even more noticeable (eg CVS subdirectories in every single directory etc)

So while you can do various tricks (symlinking ".git", using GIT_DIR, etc etc) to get the .git contents out of your worktree, the thing is, the correct thing to do is almost always to simply re-think the whole problem, and come at it the other way: rather than getting .git out of your development tree, you should consider getting your development tree out of your deployment area!

Let me do a few examples of why this is a good idea:
 - the whole point of development trees and SCM's (and that's *especially* 
   true with git) is how you can try things out, go backwards in time, and 
   generally just do *development*.
   If you do that in what is your public deployment area, you're already 
   very limited. Not only may you not want to make that .git directory 
   accessible to others (while you *do* obviously want to make the 
   deployment itself), you also end up exposing things like your 
   management scripts and source code along with "generated files" etc 
   that are the things you actually want to deploy.
   Yes, it's certainly quite possible that you simply don't have any 
   management scripts etc, and that you don't generate any files, and you 
   simply want to just deploy the exact files that you also want to track. 
   But that really is a fairly unusual thing to do.
 - with git in particular, you lose a lot of the capabilities if you are 
   forcing yourself to have "deployment == development tree". Things like 
   switching branches for managing different versions suddenly are 
   painful, because you're artificially forcing a 1:1 relationship between 
   "development" and "deployment".
 - Most sane people want to deploy and test separately. In particular, you 
   want to test *before* you deploy. People make mistakes, they don't want 
   to show them. Or there are consistency requirements, and/or you simply 
   want to deploy to multiple sites simultaneously. All of which really 
   re-inforces the "develop separately" mentality, where the actual 
   deployment is then a separate "now I'm ready, let's push out the 
   result".

Now, maybe none of these things are issues at all for you. Good for you. But hopefully this explains why most people don't have your issues, and why people try to tell you that "deployment software" is a separate thing from "source control management", and you often want both, and _want_ to keep them separate.

		Linus
Previous: Johannes SchindelinNext: Linus Torvalds
Message 11 of 65 in “I don't want the .git directory next to my code.”
  1. MikeJan 16, 2008
  2. Randal L. SchwartzJan 16, 2008
  3. MikeJan 16, 2008
  4. David SymondsJan 16, 2008
  5. MikeJan 16, 2008
  6. SeanJan 16, 2008
  7. MikeJan 16, 2008
  8. Neil MacnealeJan 16, 2008
  9. MikeJan 16, 2008
  10. Johannes SchindelinJan 16, 2008
  11. Linus TorvaldsJan 16, 2008
  12. Linus TorvaldsJan 16, 2008
  13. MikeJan 17, 2008
  14. Kris ShannonJan 17, 2008
  15. Wincent ColaiutaJan 17, 2008
  16. Jeff KingJan 17, 2008
  17. Linus TorvaldsJan 17, 2008
  18. Johannes SchindelinJan 17, 2008
  19. Linus TorvaldsJan 17, 2008
  20. Johannes SchindelinJan 17, 2008
  21. MikeJan 17, 2008
  22. Johannes SchindelinJan 17, 2008
  23. MikeJan 17, 2008
  24. Johannes SchindelinJan 17, 2008
  25. MikeJan 17, 2008
  26. Johannes SchindelinJan 17, 2008
  27. MikeJan 17, 2008
  28. Johannes SchindelinJan 17, 2008
  29. David SymondsJan 18, 2008
  30. Russ DillJan 22, 2008
  31. Martin LanghoffJan 17, 2008
  32. Andreas EricssonJan 18, 2008
  33. Junio C HamanoJan 16, 2008
  34. Ping YinJan 17, 2008
  35. Linus TorvaldsJan 17, 2008
  36. Dan McGeeJan 16, 2008
  37. MikeJan 16, 2008
  38. Mike KrierJan 16, 2008
  39. MikeJan 16, 2008
  40. Nguyen Thai Ngoc DuyJan 16, 2008
  41. David SymondsJan 16, 2008
  42. MikeJan 16, 2008
  43. Daniel BarkalowJan 16, 2008
  44. Luke LuJan 16, 2008
  45. MikeJan 16, 2008
  46. Sam VilainJan 17, 2008
  47. Daniel BarkalowJan 16, 2008
  48. MikeJan 16, 2008
  49. Johannes SchindelinJan 16, 2008
  50. Bert WesargJan 16, 2008
  51. Wayne DavisonJan 16, 2008
  52. Matthieu MoyJan 16, 2008
  53. Johannes SchindelinJan 16, 2008
  54. Bill LearJan 16, 2008
  55. Matthieu MoyJan 16, 2008
  56. Johannes SchindelinJan 16, 2008
  57. Junio C HamanoJan 16, 2008
  58. Johannes SchindelinJan 16, 2008
  59. Matthieu MoyJan 16, 2008
  60. Johannes SchindelinJan 16, 2008
  61. Jakub NarebskiJan 16, 2008
  62. Brian DowningJan 17, 2008
  63. Randal L. SchwartzJan 17, 2008
  64. Martin LanghoffJan 17, 2008
  65. Randal L. SchwartzJan 17, 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.