There are lots of problems with file ID's. One of the more obvious ones is
indeed that if you arrive at the same state two different ways (eg patches
vs "native SCM"), you end up with two fundmanetally different trees. Even
though clearly there was no real difference.
There are other serious problems. For example, file-ID based systems
invariably have _huge_ problems with handling two branches deleting and
renaming things differently, and we had several issues with that during
the BK days (ie two people would move files differently, and ending up
with different file ID's for the same path, and merging that inevitably
causes problems not just during the merge, but ever after, since one of
the file ID's will then have to be "deleted" even though it might be
active in one of the branches).
Finally, file-ID based systems fundamentally cannot handle some simple and
interesting cases, like partial content movement. We're starting to see
git actually being able to track file content moving between files: even
when the files themselves didn't move (ie Junio's "git pickaxe" work could
do things like that).
And there really aren't as many advantages to tracking renames as people
claim. The biggest advantage of tracking renames is to avoid the trap that
CVS fell into: being file-ID based _and_ not being able to track the file
ID moving is clearly the worst of all worlds.
So for anybody coming from a CVS background, tracking renames explicitly
is a _huge_ advantage, which is, I think, why some SCM people have gotten
so hung up about them. It's just that if you don't have the file-ID
problem in the first place (and git doesn't), then rename tracking doesn't
actually make any sense, and only makes things much worse.
Linus
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html