On Fri, Oct 20, 2006 at 06:59:17PM -0400, Jeff King wrote: > On Fri, Oct 20, 2006 at 08:12:10PM +0200, Jan Hudec wrote: > > > At this point, I expect the tree to look like this: > > A$ ls -R > > .: > > data/ > > data: > > hello.txt > > A$ cat data/hello.txt > > Hello World! > > Git does what you expect here. > > > A$ VCT mv data greetings > > A$ VCT commit -m "Renamed the data directory to greetings" > > B$ echo "Goodbye World!" > data/goodbye.txt > > B$ VCT add data/goodbye.txt > > B$ VCT commit -m "Added goodbye message." > > A$ VCT merge B > > > > And now I expect to have tree looking like this: > > > > A$ ls -R > > .: > > greetings/ > > greetings: > > hello.txt > > goodbye.txt > > Git does not do what you expect here. It notes that files moved, but it > does not have a concept of directories moving. Git could, even without > file-ids or special patch types, figure out what happened by noting that > every file in data/ was renamed to its analogue in greetings/, and infer > that previously non-existant files in data/ should also be moved to > greetings/. > > However, I'm not sure that I personally would prefer that behavior. In > some cases you might actually WANT data/goodbye.txt, and in some other > cases a conflict might be more appropriate. In any case, I would rather > the SCM do the simple and predictable thing (which I consider to be > creating data/goodbye.txt) rather than be clever and wrong (even if it's > only wrong a small percentage of the time). > > In short, git doesn't do what you expect, but I'm not convinced that > it's a bug or lack of feature, and not simply a difference in desired > behavior. I still consider it a bug, but different problems of the file-id solution have already been described in this thread that I consider bugs as well. Besides I start to think that it should be actually possible to solve this case with the git-style approach. I have to state beforehand, that I don't know how the most recent git algorithm works, but I imagine there is some kind of 'brackets' saying the text is in a given file. Now if those 'brackets' were not flat, but nested, ie. instead of saying 'this is in foo/bar' it would say 'this is in bar is in foo', the difference when renaming directory would only affect the 'outer bracket' and therefore merge correctly with adding content inside it. -------------------------------------------------------------------------------- - Jan Hudec `Bulb' <bulb@xxxxxx> - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html