[PATCH] git: fix trivial warning from show_rename_copy()
[gitweb.git] / Documentation / cvs-migration.txt
index 229c129f9cec92d84ae5ca3884b78aa6afbf98e4..e39b82938a98dbd258f534c4cadccd6de4db7888 100644 (file)
@@ -14,7 +14,7 @@ does a lot of things differently.
 One particular suckage of CVS is very hard to work around: CVS is
 basically a tool for tracking _file_ history, while git is a tool for
 tracking _project_ history.  This sometimes causes problems if you are
-used to doign very strange things in CVS, in particular if you're doing
+used to doing very strange things in CVS, in particular if you're doing
 things like making branches of just a subset of the project.  Git can't
 track that, since git never tracks things on the level of an individual
 file, only on the whole project level. 
@@ -35,8 +35,8 @@ that you're actually working in (your working directory, or your
 working directories _are_ the repositories.  However, you can easily
 emulate the CVS model by having one special "global repository", which
 people can synchronize with.  See details later, but in the meantime
-just keep in mind that with git, every checked out working tree will be
-a full revision control of its own. 
+just keep in mind that with git, every checked out working tree will
+have a full revision control history of its own.
 
 
 Importing a CVS archive
@@ -63,16 +63,38 @@ Once you've gotten (and installed) cvsps, you may or may not want to get
 any more familiar with it, but make sure it is in your path. After that,
 the magic command line is
 
-       git cvsimport <cvsroot> <module>
+       git cvsimport -v -d <cvsroot> <module> <destination>
 
 which will do exactly what you'd think it does: it will create a git
-archive of the named CVS module. The new archive will be created in a
-subdirectory named <module>.
+archive of the named CVS module. The new archive will be created in the
+subdirectory named <destination>; it'll be created if it doesn't exist.
+Default is the local directory.
 
-It can take some time to actually do the conversion for a large archive,
-and the conversion script can be reasonably chatty, but on some not very
-scientific tests it averaged about eight revisions per second, so a
-medium-sized project should not take more than a couple of minutes.
+It can take some time to actually do the conversion for a large archive
+since it involves checking out from CVS every revision of every file,
+and the conversion script is reasonably chatty unless you omit the '-v'
+option, but on some not very scientific tests it averaged about twenty
+revisions per second, so a medium-sized project should not take more
+than a couple of minutes.  For larger projects or remote repositories,
+the process may take longer.
+
+After the (initial) import is done, the CVS archive's current head
+revision will be checked out -- thus, you can start adding your own
+changes right away.
+
+The import is incremental, i.e. if you call it again next month it'll
+fetch any CVS updates that have been happening in the meantime. The
+cut-off is date-based, so don't change the branches that were imported
+from CVS.
+
+You can merge those updates (or, in fact, a different CVS branch) into
+your main branch:
+
+       cg-merge <branch>
+
+The HEAD revision from CVS is named "origin", not "HEAD", because git
+already uses "HEAD". (If you don't like 'origin', use cvsimport's
+'-o' option to change it.)
 
 
 Emulating CVS behaviour
@@ -88,9 +110,26 @@ needs to be in the tutorial too.
 CVS annotate
 ------------
 
-The core GIT itself does not have a "cvs annotate" equivalent.
-It has something that you may want to use when you would use
-"cvs annotate".
+So, something has gone wrong, and you don't know whom to blame, and
+you're an ex-CVS user and used to do "cvs annotate" to see who caused
+the breakage. You're looking for the "git annotate", and it's just
+claiming not to find such a script. You're annoyed.
+
+Yes, that's right.  Core git doesn't do "annotate", although it's
+technically possible, and there are at least two specialized scripts out
+there that can be used to get equivalent information (see the git
+mailing list archives for details). 
+
+Git has a couple of alternatives, though, that you may find sufficient
+or even superior depending on your use.  One is called "git-whatchanged"
+(for obvious reasons) and the other one is called "pickaxe" ("a tool for
+the software archeologist"). 
+
+The "git-whatchanged" script is a truly trivial script that can give you
+a good overview of what has changed in a file or a directory (or an
+arbitrary list of files or directories).  The "pickaxe" support is an
+additional layer that can be used to further specify exactly what you're
+looking for, if you already know the specific area that changed.
 
 Let's step back a bit and think about the reason why you would
 want to do "cvs annotate a-file.c" to begin with.