git-cvsexportcommit(1)
======================

NAME
----
git-cvsexportcommit - Export a single commit to a CVS checkout


SYNOPSIS
--------
'git cvsexportcommit' [-h] [-u] [-v] [-c] [-P] [-p] [-a] [-d cvsroot]
	[-w cvsworkdir] [-W] [-f] [-m msgprefix] [PARENTCOMMIT] COMMITID


DESCRIPTION
-----------
Exports a commit from GIT to a CVS checkout, making it easier
to merge patches from a git repository into a CVS repository.

Specify the name of a CVS checkout using the -w switch or execute it
from the root of the CVS working copy. In the latter case GIT_DIR must
be defined. See examples below.

It does its best to do the safe thing, it will check that the files are
unchanged and up to date in the CVS checkout, and it will not autocommit
by default.

Supports file additions, removals, and commits that affect binary files.

If the commit is a merge commit, you must tell 'git-cvsexportcommit' what
parent the changeset should be done against.

OPTIONS
-------

-c::
	Commit automatically if the patch applied cleanly. It will not
	commit if any hunks fail to apply or there were other problems.

-p::
	Be pedantic (paranoid) when applying patches. Invokes patch with
	--fuzz=0

-a::
	Add authorship information. Adds Author line, and Committer (if
	different from Author) to the message.

-d::
	Set an alternative CVSROOT to use.  This corresponds to the CVS
	-d parameter.  Usually users will not want to set this, except
	if using CVS in an asymmetric fashion.

-f::
	Force the merge even if the files are not up to date.

-P::
	Force the parent commit, even if it is not a direct parent.

-m::
	Prepend the commit message with the provided prefix.
	Useful for patch series and the like.

-u::
	Update affected files from CVS repository before attempting export.

-w::
	Specify the location of the CVS checkout to use for the export. This
	option does not require GIT_DIR to be set before execution if the
	current directory is within a git repository.  The default is the
	value of 'cvsexportcommit.cvsdir'.

-W::
	Tell cvsexportcommit that the current working directory is not only
	a Git checkout, but also the CVS checkout.  Therefore, Git will
	reset the working directory to the parent commit before proceeding.

-v::
	Verbose.

CONFIGURATION
-------------
cvsexportcommit.cvsdir::
	The default location of the CVS checkout to use for the export.

EXAMPLES
--------

Merge one patch into CVS::
+
------------
$ export GIT_DIR=~/project/.git
$ cd ~/project_cvs_checkout
$ git cvsexportcommit -v <commit-sha1>
$ cvs commit -F .msg <files>
------------

Merge one patch into CVS (-c and -w options). The working directory is within the Git Repo::
+
------------
	$ git cvsexportcommit -v -c -w ~/project_cvs_checkout <commit-sha1>
------------

Merge pending patches into CVS automatically -- only if you really know what you are doing::
+
------------
$ export GIT_DIR=~/project/.git
$ cd ~/project_cvs_checkout
$ git cherry cvshead myhead | sed -n 's/^+ //p' | xargs -l1 git cvsexportcommit -c -p -v
------------

Author
------
Written by Martin Langhoff <martin@catalyst.net.nz> and others.

Documentation
--------------
Documentation by Martin Langhoff <martin@catalyst.net.nz> and others.

GIT
---
Part of the linkgit:git[1] suite
