1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.1//EN"
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"en">
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8" />
6 <meta name=
"generator" content=
"AsciiDoc 8.4.5" />
7 <title>git-cvsimport(
1)
</title>
8 <style type=
"text/css">
10 p
, li
, dt
, dd
, div
, pre
, h1
, h2
, h3
, h4
, h5
, h6
{
12 border: 1px solid red;
17 margin: 1em 5% 1em 5%;
22 text-decoration: underline
;
42 h1
, h2
, h3
, h4
, h5
, h6
{
44 font-family: sans-serif
;
51 border-bottom: 2px solid silver
;
69 border: 1px solid silver
;
88 font-family: sans-serif
;
94 span#revnumber
, span#revdate
, span#revremark
{
95 font-family: sans-serif
;
99 font-family: sans-serif
;
101 border-top: 2px solid silver
;
107 padding-bottom: 0.5em;
111 padding-bottom: 0.5em;
116 margin-bottom: 1.5em;
118 div
.tableblock
, div
.imageblock
, div
.exampleblock
, div
.verseblock
,
119 div
.quoteblock
, div
.literalblock
, div
.listingblock
, div
.sidebarblock
,
120 div
.admonitionblock
{
122 margin-bottom: 1.5em;
124 div
.admonitionblock
{
126 margin-bottom: 2.5em;
129 div
.content
{ /* Block element content. */
133 /* Block element titles. */
134 div
.title
, caption
.title
{
136 font-family: sans-serif
;
140 margin-bottom: 0.5em;
146 td div
.title:first-child
{
149 div
.content div
.title:first-child
{
152 div
.content
+ div
.title
{
156 div
.sidebarblock
> div
.content
{
158 border: 1px solid silver
;
162 div
.listingblock
> div
.content
{
163 border: 1px solid silver
;
172 div
.quoteblock
> div
.attribution
{
181 div
.verseblock
> div
.content
{
184 div
.verseblock
> div
.attribution
{
188 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
189 div
.verseblock
+ div
.attribution
{
193 div
.admonitionblock
.icon
{
197 text-decoration: underline
;
199 padding-right: 0.5em;
201 div
.admonitionblock td
.content
{
203 border-left: 2px solid silver
;
206 div
.exampleblock
> div
.content
{
207 border-left: 2px solid silver
;
211 div
.imageblock div
.content
{ padding-left: 0; }
212 span
.image img
{ border-style: none
; }
213 a
.image:visited
{ color: white
; }
217 margin-bottom: 0.8em;
230 list-style-position: outside
;
233 list-style-type: decimal
;
236 list-style-type: lower-alpha
;
239 list-style-type: upper-alpha
;
242 list-style-type: lower-roman
;
245 list-style-type: upper-roman
;
248 div
.compact ul
, div
.compact ol
,
249 div
.compact p
, div
.compact p
,
250 div
.compact div
, div
.compact div
{
252 margin-bottom: 0.1em;
255 div
.tableblock
> table
{
256 border: 3px solid
#527bbd;
259 font-family: sans-serif
;
271 /* Because the table frame attribute is overriden by CSS in most browsers. */
272 div
.tableblock
> table
[frame
="void"] {
275 div
.tableblock
> table
[frame
="hsides"] {
276 border-left-style: none
;
277 border-right-style: none
;
279 div
.tableblock
> table
[frame
="vsides"] {
280 border-top-style: none
;
281 border-bottom-style: none
;
287 margin-bottom: 0.8em;
290 padding-bottom: 15px;
292 dt
.hdlist1
.strong
, td
.hdlist1
.strong
{
298 padding-right: 0.8em;
304 div
.hdlist
.compact tr
{
314 div#footer-badges
{ display: none
; }
319 font-family: sans-serif
;
323 margin-bottom: 0.1em;
326 div
.toclevel1
, div
.toclevel2
, div
.toclevel3
, div
.toclevel4
{
342 /* Overrides for manpage documents */
345 padding-bottom: 0.5em;
346 border-top: 2px solid silver
;
347 border-bottom: 2px solid silver
;
357 div#toc
{ display: none
; }
360 /* Workarounds for IE6's broken and incomplete CSS2. */
362 div
.sidebar-content
{
364 border: 1px solid silver
;
367 div
.sidebar-title
, div
.image-title
{
369 font-family: sans-serif
;
372 margin-bottom: 0.5em;
375 div
.listingblock div
.content
{
376 border: 1px solid silver
;
381 div
.quoteblock-attribution
{
386 div
.verseblock-content
{
389 div
.verseblock-attribution
{
394 div
.exampleblock-content
{
395 border-left: 2px solid silver
;
399 /* IE6 sets dynamically generated links as visited. */
400 div#toc
a:visited
{ color: blue
; }
406 git-cvsimport(
1) Manual Page
409 <div class=
"sectionbody">
411 Salvage your data out of another SCM people love to hate
415 <h2 id=
"_synopsis">SYNOPSIS
</h2>
416 <div class=
"sectionbody">
417 <div class=
"verseblock">
418 <div class=
"verseblock-content"><em>git cvsimport
</em> [-o
<branch-for-HEAD
>] [-h] [-v] [-d
<CVSROOT
>]
419 [-A
<author-conv-file
>] [-p
<options-for-cvsps
>] [-P
<file
>]
420 [-C
<git_repository
>] [-z
<fuzz
>] [-i] [-k] [-u] [-s
<subst
>]
421 [-a] [-m] [-M
<regex
>] [-S
<regex
>] [-L
<commitlimit
>]
422 [-r
<remote
>] [-R] [
<CVS_module
>]
</div>
423 <div class=
"verseblock-attribution">
426 <h2 id=
"_description">DESCRIPTION
</h2>
427 <div class=
"sectionbody">
428 <div class=
"paragraph"><p>Imports a CVS repository into git. It will either create a new
429 repository, or incrementally import into an existing one.
</p></div>
430 <div class=
"paragraph"><p>Splitting the CVS log into patch sets is done by
<em>cvsps
</em>.
431 At least version
2.1 is required.
</p></div>
432 <div class=
"paragraph"><p><strong>WARNING:
</strong> for certain situations the import leads to incorrect results.
433 Please see the section
<a href=
"#issues">ISSUES
</a> for further reference.
</p></div>
434 <div class=
"paragraph"><p>You should
<strong>never
</strong> do any work of your own on the branches that are
435 created by
<em>git cvsimport
</em>. By default initial import will create and populate a
436 "master" branch from the CVS repository
’s main branch which you
’re free
437 to work with; after that, you need to
<em>git merge
</em> incremental imports, or
438 any CVS branches, yourself. It is advisable to specify a named remote via
439 -r to separate and protect the incoming branches.
</p></div>
440 <div class=
"paragraph"><p>If you intend to set up a shared public repository that all developers can
441 read/write, or if you want to use
<a href=
"git-cvsserver.html">git-cvsserver(
1)
</a>, then you
442 probably want to make a bare clone of the imported repository,
443 and use the clone as the shared repository.
444 See
<a href=
"gitcvs-migration.html">gitcvs-migration(
7)
</a>.
</p></div>
446 <h2 id=
"_options">OPTIONS
</h2>
447 <div class=
"sectionbody">
448 <div class=
"dlist"><dl>
454 Verbosity: let
<em>cvsimport
</em> report what it is doing.
462 The root of the CVS archive. May be local (a simple path) or remote;
463 currently, only the :local:, :ext: and :pserver: access methods
464 are supported. If not given,
<em>git cvsimport
</em> will try to read it
465 from
<tt>CVS/Root
</tt>. If no such file exists, it checks for the
466 <tt>CVSROOT
</tt> environment variable.
474 The CVS module you want to import. Relative to
<CVSROOT
>.
475 If not given,
<em>git cvsimport
</em> tries to read it from
476 <tt>CVS/Repository
</tt>.
480 -C
<target-dir
>
484 The git repository to import to. If the directory doesn
’t
485 exist, it will be created. Default is the current directory.
493 The git remote to import this CVS repository into.
494 Moves all CVS branches into remotes/
<remote
>/
<branch
>
495 akin to the way
<em>git clone
</em> uses
<em>origin
</em> by default.
499 -o
<branch-for-HEAD
>
503 When no remote is specified (via -r) the
<em>HEAD
</em> branch
504 from CVS is imported to the
<em>origin
</em> branch within the git
505 repository, as
<em>HEAD
</em> already has a special meaning for git.
506 When a remote is specified the
<em>HEAD
</em> branch is named
507 remotes/
<remote
>/master mirroring
<em>git clone
</em> behaviour.
508 Use this option if you want to import into a different
511 <div class=
"paragraph"><p>Use
<em>-o master
</em> for continuing an import that was initially done by
512 the old cvs2git tool.
</p></div>
519 Import-only: don
’t perform a checkout after importing. This option
520 ensures the working directory and index remain untouched and will
521 not create them if they do not exist.
529 Kill keywords: will extract files with
<em>-kk
</em> from the CVS archive
530 to avoid noisy changesets. Highly recommended, but off by default
531 to preserve compatibility with early imported trees.
539 Convert underscores in tag and branch names to dots.
547 Substitute the character
"/" in branch names with
<subst
>
551 -p
<options-for-cvsps
>
555 Additional options for cvsps.
556 The options
<em>-u
</em> and
<em>-A
</em> are implicit and should not be used here.
558 <div class=
"paragraph"><p>If you need to pass multiple options, separate them with a comma.
</p></div>
565 Pass the timestamp fuzz factor to cvsps, in seconds. If unset,
566 cvsps defaults to
300s.
570 -P
<cvsps-output-file
>
574 Instead of calling cvsps, read the provided cvsps output file. Useful
575 for debugging or when cvsps is being handled outside cvsimport.
583 Attempt to detect merges based on the commit message. This option
584 will enable default regexes that try to capture the source
585 branch name from the commit message.
593 Attempt to detect merges based on the commit message with a custom
594 regex. It can be used with
<em>-m
</em> to enable the default regexes
595 as well. You must escape forward slashes.
597 <div class=
"paragraph"><p>The regex must capture the source branch name in $
1.
</p></div>
598 <div class=
"paragraph"><p>This option can be used several times to provide several detection regexes.
</p></div>
605 Skip paths matching the regex.
613 Import all commits, including recent ones. cvsimport by default
614 skips commits that have a timestamp less than
10 minutes ago.
622 Limit the number of commits imported. Workaround for cases where
623 cvsimport leaks memory.
627 -A
<author-conv-file
>
631 CVS by default uses the Unix username when writing its
632 commit logs. Using this option and an author-conv-file
635 <div class=
"listingblock">
636 <div class=
"content">
637 <pre><tt> exon=Andreas Ericsson
<ae@op5.se
>
638 spawn=Simon Pawn
<spawn@frog-pond.org
></tt></pre>
640 <div class=
"paragraph"><p><em>git cvsimport
</em> will make it appear as those authors had
641 their GIT_AUTHOR_NAME and GIT_AUTHOR_EMAIL set properly
643 <div class=
"paragraph"><p>For convenience, this data is saved to
<tt>$GIT_DIR/cvs-authors
</tt>
644 each time the
<em>-A
</em> option is provided and read from that same
645 file each time
<em>git cvsimport
</em> is run.
</p></div>
646 <div class=
"paragraph"><p>It is not recommended to use this feature if you intend to
647 export changes back to CVS again later with
648 <em>git cvsexportcommit
</em>.
</p></div>
655 Generate a
<tt>$GIT_DIR/cvs-revisions
</tt> file containing a mapping from CVS
656 revision numbers to newly-created Git commit IDs. The generated file
657 will contain one line for each (filename, revision) pair imported;
658 each line will look like
660 <div class=
"listingblock">
661 <div class=
"content">
662 <pre><tt>src/widget.c
1.1 1d862f173cdc7325b6fa6d2ae1cfd61fd1b512b7
</tt></pre>
664 <div class=
"paragraph"><p>The revision data is appended to the file if it already exists, for use when
665 doing incremental imports.
</p></div>
666 <div class=
"paragraph"><p>This option may be useful if you have CVS revision numbers stored in commit
667 messages, bug-tracking systems, email archives, and the like.
</p></div>
674 Print a short usage message and exit.
679 <h2 id=
"_output">OUTPUT
</h2>
680 <div class=
"sectionbody">
681 <div class=
"paragraph"><p>If
<em>-v
</em> is specified, the script reports what it is doing.
</p></div>
682 <div class=
"paragraph"><p>Otherwise, success is indicated the Unix way, i.e. by simply exiting with
683 a zero exit status.
</p></div>
685 <h2 id=
"issues">ISSUES
</h2>
686 <div class=
"sectionbody">
687 <div class=
"paragraph"><p>Problems related to timestamps:
</p></div>
688 <div class=
"ulist"><ul>
691 If timestamps of commits in the CVS repository are not stable enough
692 to be used for ordering commits changes may show up in the wrong
698 If any files were ever
"cvs import"ed more than once (e.g., import of
699 more than one vendor release) the HEAD contains the wrong content.
704 If the timestamp order of different files cross the revision order
705 within the commit matching time window the order of commits may be
710 <div class=
"paragraph"><p>Problems related to branches:
</p></div>
711 <div class=
"ulist"><ul>
714 Branches on which no commits have been made are not imported.
719 All files from the branching point are added to a branch even if
725 This applies to files added to the source branch
<strong>after
</strong> a daughter
726 branch was created: if previously no commit was made on the daughter
727 branch they will erroneously be added to the daughter branch in git.
731 <div class=
"paragraph"><p>Problems related to tags:
</p></div>
732 <div class=
"ulist"><ul>
735 Multiple tags on the same revision are not imported.
739 <div class=
"paragraph"><p>If you suspect that any of these issues may apply to the repository you
740 want to import consider using these alternative tools which proved to be
741 more stable in practice:
</p></div>
742 <div class=
"ulist"><ul>
745 cvs2git (part of cvs2svn),
<tt>http://cvs2svn.tigris.org
</tt>
750 parsecvs,
<tt>http://cgit.freedesktop.org/~keithp/parsecvs
</tt>
755 <h2 id=
"_git">GIT
</h2>
756 <div class=
"sectionbody">
757 <div class=
"paragraph"><p>Part of the
<a href=
"git.html">git(
1)
</a> suite
</p></div>
760 <div id=
"footer-text">
761 Last updated
2011-
03-
15 23:
30:
13 UTC