Home Explore Blog CI



git

3rd chunk of `Documentation/gitcvs-migration.adoc`
b5960bc66c1407deff56f522e1dc06c89b435e5bbec067370000000100000d88

https://github.com/andreyvit/cvsps[https://github.com/andreyvit/cvsps] and make
sure it is in your path.  Then cd to a checked out CVS working directory
of the project you are interested in and run linkgit:git-cvsimport[1]:

-------------------------------------------
$ git cvsimport -C <destination> <module>
-------------------------------------------

This puts a Git archive of the named CVS module in the directory
<destination>, which will be created if necessary.

The import checks out from CVS every revision of every file.  Reportedly
cvsimport can average some twenty revisions per second, so for a
medium-sized project this should not take more than a couple of minutes.
Larger projects or remote repositories may take longer.

The main trunk is stored in the Git branch named `origin`, and additional
CVS branches are stored in Git branches with the same names.  The most
recent version of the main trunk is also left checked out on the `master`
branch, so you can start adding your own changes right away.

The import is incremental, so if you call it again next month it will
fetch any CVS updates that have been made in the meantime.  For this to
work, you must not modify the imported branches; instead, create new
branches for your own changes, and merge in the imported branches as
necessary.

If you want a shared repository, you will need to make a bare clone
of the imported directory, as described above. Then treat the imported
directory as another development clone for purposes of merging
incremental imports.

Advanced Shared Repository Management
-------------------------------------

Git allows you to specify scripts called "hooks" to be run at certain
points.  You can use these, for example, to send all commits to the shared
repository to a mailing list.  See linkgit:githooks[5].

You can enforce finer grained permissions using update hooks.  See
link:howto/update-hook-example.html[Controlling access to branches using
update hooks].

Providing CVS Access to a Git Repository
----------------------------------------

It is also possible to provide true CVS access to a Git repository, so
that developers can still use CVS; see linkgit:git-cvsserver[1] for
details.

Alternative Development Models
------------------------------

CVS users are accustomed to giving a group of developers commit access to
a common repository.  As we've seen, this is also possible with Git.
However, the distributed nature of Git allows other development models,
and you may want to first consider whether one of them might be a better
fit for your project.

For example, you can choose a single person to maintain the project's
primary public repository.  Other developers then clone this repository
and each work in their own clone.  When they have a series of changes that
they're happy with, they ask the maintainer to pull from the branch
containing the changes.  The maintainer reviews their changes and pulls
them into the primary repository, which other developers pull from as
necessary to stay coordinated.  The Linux kernel and other projects use
variants of this model.

With a small group, developers may just pull changes from each other's
repositories without the need for a central maintainer.

SEE ALSO
--------
linkgit:gittutorial[7],
linkgit:gittutorial-2[7],
linkgit:gitcore-tutorial[7],
linkgit:gitglossary[7],
linkgit:giteveryday[7],
link:user-manual.html[The Git User's Manual]

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

Title: Importing from CVS and Advanced Git Repository Management
Summary
This section describes how to import a CVS project into Git using `git-cvsimport`, manage a shared Git repository, and use advanced features such as hooks and update hooks to enforce permissions and automate tasks, as well as alternative development models and providing CVS access to a Git repository.