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

Re: merge renamed files/directories?

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
May 6, 2008, 16:10 UTC
Message-ID
<alpine.LFD.1.10.0805060851470.32269@woody.linux-foundation.org>
In-Reply-To
<20080506154709.GF6918@mit.edu>
On Tue, 6 May 2008, Theodore Tso wrote:
Show 5 quoted lines
> 
> Actually, the directory rename hueristic *does* have relevance in at
> least some real-world cases.  For example, MySQL has plugin
> directories, and occasionally the plugins get renamed, for whatever
> reason.
I'm not saying that directory renames don't happen.
I don't even say that merges across directory renames don't happen.
I *am* saying that it's not a problem.

It's like data conflicts. Do they happen? Sure as hell. I can pretty much guarantee that any sane project will have more data conflicts than they will have rename conflicts (whether single-file or directory), and it's not only a problem, it's something that is absolutely *required* from a source control management system!

So are data conflicts a problem?

I claim that they aren't. They are a *positive* resource that you need to handle. Some of the "handling" is obviously going to be to try to avoid them, and if you get too much of them, the real "problem" is that you merge too seldom, or more commonly that you have a piece of code that is simply not done well enough, so many different people have to muck around in that area.

But fundamentally, you should always have data conflicts, and they aren't a problem in themselves. They are a problem only

 - If they are hard to understand and see, and *unexpected*. The SCM
   should explain what is going on, and explain why a conflict happens 
   (and that may perhaps mean after-the fact! I love "gitk --merge" 
   exactly because it tends to be very good at explaining what was going 
   on!).
 - If they are hard to fix.
   For example, one of the main problems I had with BK merging was the 
   fact that while the megetool was wonderful, you effectively *had* to 
   merge using it, and you couldn't sanely do an "incremental" merge 
   where you first did a first merge job, then checked that it at 
   least compiles, then tested it, and finally looked at the diffs from 
   both parents and looked at whether those all made sense, and you could 
   "refine" or fix the merge along the different phases.
   Of course, you hope that all merges are pretty obvious, and you can do 
   it right in one go, but no, they're not. They'll never be. They'll 
   never be fully automtic, but even when they aren't automatic, they'll 
   not even be trivially to do manually. But that's OK, as long as the 
   tool at least doesn't fight you, and lets you do whatever you want to 
   do a part of fixing things up.
Now, take a look back at directory renames.
Do they happen?
Yes.
Do they potentially mis-merge?
Yes.
But are they common and/or hard to fix and handle?
No.

And that's why I don't think people should call them "problems". The only _real_ issue here, I think, is that git just does things differently from other SCM's. Git does a _lot_ of things differently. You get used to it.

			Linus
Previous: Theodore TsoNext: Linus Torvalds
Message 38 of 49 in “detecting rename->commit->modify->commit”
  1. Ittay DrorMay 1, 2008
  2. Jeff KingMay 1, 2008
  3. Ittay DrorMay 1, 2008
  4. Jeff KingMay 1, 2008
  5. Ittay DrorMay 1, 2008
  6. Jeff KingMay 1, 2008
  7. Jakub NarebskiMay 1, 2008
  8. Teemu LikonenMay 1, 2008
  9. Jeff KingMay 1, 2008
  10. Sitaram ChamartyMay 2, 2008
  11. Junio C HamanoMay 2, 2008
  12. Sitaram ChamartyMay 2, 2008
  13. Ittay DrorMay 1, 2008
  14. Jeff KingMay 1, 2008
  15. Ittay DrorMay 1, 2008
  16. Jeff KingMay 1, 2008
  17. Ittay DrorMay 1, 2008
  18. David TweedMay 1, 2008
  19. Avery PennarunMay 1, 2008
  20. Jeff KingMay 1, 2008
  21. Avery PennarunMay 1, 2008
  22. Jeff KingMay 1, 2008
  23. Avery PennarunMay 1, 2008
  24. Jeff KingMay 1, 2008
  25. Steven GrimmMay 1, 2008
  26. Jeff KingMay 1, 2008
  27. merge renamed files/directories? (was: Re: detecting rename->commit->modify->commit)Ittay Dror, May 3, 2008
  28. Avery PennarunMay 3, 2008
  29. Ittay DrorMay 4, 2008
  30. Jakub NarebskiMay 4, 2008
  31. Avery PennarunMay 5, 2008
  32. Robin RosenbergMay 5, 2008
  33. Linus TorvaldsMay 5, 2008
  34. Steven GrimmMay 5, 2008
  35. Linus TorvaldsMay 6, 2008
  36. Linus TorvaldsMay 6, 2008
  37. Theodore TsoMay 6, 2008
  38. Linus TorvaldsMay 6, 2008
  39. Linus TorvaldsMay 6, 2008
  40. Ittay DrorMay 6, 2008
  41. Linus TorvaldsMay 6, 2008
  42. Avery PennarunMay 6, 2008
  43. Shawn O. PearceMay 6, 2008
  44. Avery PennarunMay 6, 2008
  45. Shawn O. PearceMay 6, 2008
  46. Linus TorvaldsMay 6, 2008
  47. Jeff KingMay 8, 2008
  48. Sitaram ChamartyMay 1, 2008
  49. Ittay DrorMay 1, 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.