Dear diary, on Tue, Nov 29, 2005 at 09:05:29AM CET, I got a letter where linux@horizon.com said that... > > *2* Cogito (things that start with cg-*) seems to try to be > > cleverer. Pasky might want to brag about the rules in Cogito > > land. > In fact, he might want to explain what the difference is between cogito > and git. Most particularly, are there any restrictions on mixing cg-* > and git-* operations from within the same directory? Nope, except: Cogito vs. other GIT tools ~~~~~~~~~~~~~~~~~~~~~~~~~~ You can *MOSTLY* use Cogito in parallel with other GIT frontends (e.g. StGIT), as well as the GIT plumbing and core GIT tools - the tools only need to keep HEAD in place and follow the standardized `refs/` hierarchy. The only notable exception is that you should stick with a single toolkit during a merge. (-- Cogito README) So exactly during a merge, things might not blend well, since Cogito does things a bit differently. It knows of no MERGE_HEAD, MERGE_MSG and such, and instead passes stuff over different channels or computes/asks it at different times. Historically, cg-merge and git-merge evolution has been almost entirely separate. From the user POV, the main difference between Cogito and GIT merging is that: (i) Cogito tries to never leave the index "dirty" (i.e. containing unmerged entries), and instead all conflicts should propagate to the working tree, so that the user can resolve them without any further special tools. (What is lacking here is that Cogito won't proofcheck that you really resolved them all during a commit. That's a big TODO. But core GIT won't you warn about committing the classical << >> == conflicts either.) (ii) Cogito will handle trees with some local modifications better - basically any local modifications git-read-tree -m won't care about. I didn't read the whole conversation, so to reiterate: git-read-tree will complain when the index does not match the HEAD, but won't complain about modified files in the working tree if the merge is not going to touch them. Now, let's say you do this (output is visually only roughly or not at all resembling what would real tools tell you): $ ls a b c $ echo 'somelocalhack' >>a $ git merge "blah" HEAD remotehead File-level merge of 'b' and 'c'... Oops, 'b' contained local conflicts. Automatic merge aborted, fix up by hand. $ fixup b $ git commit Committed files 'a', 'b', 'c'. Oops. It grabbed your local hack and committed it along the merge. Cogito won't do this, it will hold 'a' back when doing the merge commit (if it works right; in the past, there were several bugs related to this, but hopefully they are all fixed by now): $ ls a b c $ echo 'somelocalhack' >>a $ cg-merge remotehead ... Merging c ... Merging b Conflicts during merge of 'b'. Fix up the conflicts, then kindly do cg-commit. $ fixup b $ cg-commit -m"blah" Committed files 'b', 'c'. Also note that the cg-merge usage is simpler and you give the "blah" message only to cg-commit, when it's for sure you are going to use it. (iii) Cogito does not support the smart recursive merging strategy. That means it won't follow renames, and in case of multiple merge bases, it will not merge them recursively, but it will just ask you to choose one manually, or suggest you the most conservative merge base (where you should get no false clean merges, but you will probably have to deal with a lot of conflicts). -- Petr "Pasky" Baudis Stuff: http://pasky.or.cz/ VI has two modes: the one in which it beeps and the one in which it doesn't. - 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.htmlReceived on Tue Nov 29 22:02:59 2005
This archive was generated by hypermail 2.1.8 : 2005-11-29 22:03:05 EST