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

Re: git ate my home directory :-(

From
Richard Weinberger <richard@nod.at>
Date
Mar 26, 2013, 17:06 UTC
Message-ID
<5151D589.2000002@nod.at>
In-Reply-To
<20130326145637.GA3822@sigill.intra.peff.net>
Am 26.03.2013 15:56, schrieb Jeff King:
Show 13 quoted lines
> On Tue, Mar 26, 2013 at 02:07:44PM +0100, Richard Weinberger wrote:
>
>>> Should this important warning be part of the git(1) documentation on
>>> the environment variables (and possibly other places) given the
>>> consequences of this case? It wasn't something
>>> I'd appreciated from a simple reading.
>>
>> BTW: Can't we change git-clean such that it will not delete any files
>> if GIT_DIR is set and GIT_WORK_TREE is "."?s
>
> We could, but that would break the existing behavior for other people
> (and I assume you mean "when GIT_WORK_TREE is not set at all", as I
> would think GIT_WORK_TREE=. is explicit enough).

Is there a valid use case to call git-clean with GIT_DIR set but GIT_WORK_TREE not (or to ."")? It will delete "." ;)

Show 7 quoted lines
> I am sympathetic to your data loss, but I wonder how common a problem it
> is in practice. Git-clean already does a dry-run by default; you have to
> give it `-f`. This is the first such report we've had. This seems more
> akin to "oops, I accidentally ran `rm -rf` in the wrong directory". Yes,
> it's catastrophic, but at some point you have to accept that deleting
> files is what rm (and git-clean) does; you can only put so many safety
> hoops in place.

The data loss was not too bad. I was able to restore anything within 2 hours. But was kinda shocked that git-clean deletes files outside my git tree. I'm aware of -d. But in my case it happened within a fully automated script. I simply thought GIT_DIR=.. git-clean -f -d does the right thing...

> I don't know. It's an uncommon enough case that we could deprecate
> "GIT_WORK_TREE is implicitly `.`" entirely, but I think it would need a
> deprecation period, and a way to get the same behavior (e.g., allowing
> "GIT_WORK_TREE=.").
Yeah, this sounds sane.

Thanks, //richard

P.s: I've told this story to some friends and co-workers which use git like me very day. All of them were shocked about the behavior of git-clean and GIT_DIR.

Previous: Jeff KingNext: demerphq
Message 21 of 35 in “git ate my home directory :-(”
  1. Richard WeinbergerMar 25, 2013
  2. Jonathan NiederMar 25, 2013
  3. Junio C HamanoMar 25, 2013
  4. Jonathan NiederMar 25, 2013
  5. Junio C HamanoMar 25, 2013
  6. Junio C HamanoMar 25, 2013
  7. Richard WeinbergerMar 25, 2013
  8. Jonathan NiederMar 25, 2013
  9. Junio C HamanoMar 25, 2013
  10. Richard WeinbergerMar 25, 2013
  11. Jonathan NiederMar 25, 2013
  12. Brandon CaseyMar 25, 2013
  13. Philip OakleyMar 26, 2013
  14. Duy NguyenMar 26, 2013
  15. Jeff KingMar 26, 2013
  16. Junio C HamanoMar 26, 2013
  17. Duy NguyenMar 27, 2013
  18. Philip OakleyMar 26, 2013
  19. Richard WeinbergerMar 26, 2013
  20. Jeff KingMar 26, 2013
  21. Richard WeinbergerMar 26, 2013
  22. demerphqMar 26, 2013
  23. Jeff KingMar 26, 2013
  24. demerphqMar 26, 2013
  25. Jeff KingMar 26, 2013
  26. Junio C HamanoMar 26, 2013
  27. Jeff KingMar 26, 2013
  28. 1/3 environment: set GIT_WORK_TREE when we figure out work treeJeff King, Mar 26, 2013
  29. Jonathan NiederMar 26, 2013
  30. 2/3 setup: warn about implicit worktree with $GIT_DIRJeff King, Mar 26, 2013
  31. Jonathan NiederMar 26, 2013
  32. Jeff KingMar 26, 2013
  33. Jonathan NiederMar 26, 2013
  34. Matthieu MoyMar 27, 2013
  35. 3/3 setup: treat GIT_DIR without GIT_WORK_TREE as a bare repoJeff King, Mar 26, 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.