]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/gitcvs-migration.txt
Documentation: be consistent about "git-" versus "git "
[thirdparty/git.git] / Documentation / gitcvs-migration.txt
CommitLineData
b27a23e3
CC
1gitcvs-migration(7)
2===================
3
4NAME
5----
6gitcvs-migration - git for CVS users
7
8SYNOPSIS
9--------
10git cvsimport *
11
12DESCRIPTION
13-----------
fcbfd5a6 14
cd976f5c
BF
15Git differs from CVS in that every working tree contains a repository with
16a full copy of the project history, and no repository is inherently more
17important than any other. However, you can emulate the CVS model by
18designating a single shared repository which people can synchronize with;
19this document explains how to do that.
fcbfd5a6 20
6998e4db
JN
21Some basic familiarity with git is required. Having gone through
22linkgit:gittutorial[7] and
23linkgit:gitglossary[7] should be sufficient.
fcbfd5a6 24
cd976f5c
BF
25Developing against a shared repository
26--------------------------------------
fcbfd5a6 27
cd976f5c 28Suppose a shared repository is set up in /pub/repo.git on the host
37425065 29foo.com. Then as an individual committer you can clone the shared
cd976f5c 30repository over ssh with:
b8bc67ce
BF
31
32------------------------------------------------
33$ git clone foo.com:/pub/repo.git/ my-project
34$ cd my-project
35------------------------------------------------
36
37and hack away. The equivalent of `cvs update` is
38
39------------------------------------------------
40$ git pull origin
41------------------------------------------------
42
43which merges in any work that others might have done since the clone
cd976f5c
BF
44operation. If there are uncommitted changes in your working tree, commit
45them first before running git pull.
b8bc67ce
BF
46
47[NOTE]
48================================
c04197ee 49The `pull` command knows where to get updates from because of certain
b1889c36 50configuration variables that were set by the first `git-clone`
5162e697 51command; see `git config -l` and the linkgit:git-config[1] man
c04197ee 52page for details.
b8bc67ce
BF
53================================
54
4cfeccc7 55You can update the shared repository with your changes by first committing
5162e697 56your changes, and then using the linkgit:git-push[1] command:
fcbfd5a6 57
b8bc67ce
BF
58------------------------------------------------
59$ git push origin master
60------------------------------------------------
fcbfd5a6 61
4003a58e 62to "push" those commits to the shared repository. If someone else has
b1889c36 63updated the repository more recently, `git-push`, like `cvs commit`, will
4003a58e
BF
64complain, in which case you must pull any changes before attempting the
65push again.
7da71deb 66
b1889c36
JN
67In the `git-push` command above we specify the name of the remote branch
68to update (`master`). If we leave that out, `git-push` tries to update
b8bc67ce
BF
69any branches in the remote repository that have the same name as a branch
70in the local repository. So the last `push` can be done with either of:
7da71deb 71
b8bc67ce
BF
72------------
73$ git push origin
cd976f5c 74$ git push foo.com:/pub/project.git/
b8bc67ce 75------------
7da71deb 76
b8bc67ce
BF
77as long as the shared repository does not have any branches
78other than `master`.
79
cd976f5c
BF
80Setting Up a Shared Repository
81------------------------------
82
83We assume you have already created a git repository for your project,
6998e4db
JN
84possibly created from scratch or from a tarball (see
85linkgit:gittutorial[7]), or imported from an already existing CVS
cd976f5c
BF
86repository (see the next section).
87
4cfeccc7
BF
88Assume your existing repo is at /home/alice/myproject. Create a new "bare"
89repository (a repository without a working tree) and fetch your project into
90it:
cd976f5c
BF
91
92------------------------------------------------
4cfeccc7
BF
93$ mkdir /pub/my-repo.git
94$ cd /pub/my-repo.git
5c94f87e 95$ git --bare init --shared
4cfeccc7 96$ git --bare fetch /home/alice/myproject master:master
cd976f5c
BF
97------------------------------------------------
98
99Next, give every team member read/write access to this repository. One
100easy way to do this is to give all the team members ssh access to the
101machine where the repository is hosted. If you don't want to give them a
102full shell on the machine, there is a restricted shell which only allows
5162e697 103users to do git pushes and pulls; see linkgit:git-shell[1].
cd976f5c
BF
104
105Put all the committers in the same group, and make the repository
106writable by that group:
107
108------------------------------------------------
4cfeccc7 109$ chgrp -R $group /pub/my-repo.git
cd976f5c
BF
110------------------------------------------------
111
112Make sure committers have a umask of at most 027, so that the directories
113they create are writable and searchable by other group members.
114
115Importing a CVS archive
116-----------------------
117
118First, install version 2.1 or higher of cvsps from
119link:http://www.cobite.com/cvsps/[http://www.cobite.com/cvsps/] and make
4cfeccc7 120sure it is in your path. Then cd to a checked out CVS working directory
5162e697 121of the project you are interested in and run linkgit:git-cvsimport[1]:
cd976f5c
BF
122
123-------------------------------------------
0bc25a78 124$ git cvsimport -C <destination> <module>
cd976f5c
BF
125-------------------------------------------
126
127This puts a git archive of the named CVS module in the directory
4cfeccc7 128<destination>, which will be created if necessary.
cd976f5c
BF
129
130The import checks out from CVS every revision of every file. Reportedly
131cvsimport can average some twenty revisions per second, so for a
132medium-sized project this should not take more than a couple of minutes.
133Larger projects or remote repositories may take longer.
134
135The main trunk is stored in the git branch named `origin`, and additional
136CVS branches are stored in git branches with the same names. The most
137recent version of the main trunk is also left checked out on the `master`
138branch, so you can start adding your own changes right away.
139
140The import is incremental, so if you call it again next month it will
141fetch any CVS updates that have been made in the meantime. For this to
142work, you must not modify the imported branches; instead, create new
143branches for your own changes, and merge in the imported branches as
144necessary.
b8bc67ce
BF
145
146Advanced Shared Repository Management
147-------------------------------------
148
149Git allows you to specify scripts called "hooks" to be run at certain
150points. You can use these, for example, to send all commits to the shared
6998e4db 151repository to a mailing list. See linkgit:githooks[5].
b8bc67ce
BF
152
153You can enforce finer grained permissions using update hooks. See
154link:howto/update-hook-example.txt[Controlling access to branches using
155update hooks].
fcbfd5a6 156
cd976f5c
BF
157Providing CVS Access to a git Repository
158----------------------------------------
159
160It is also possible to provide true CVS access to a git repository, so
5162e697 161that developers can still use CVS; see linkgit:git-cvsserver[1] for
cd976f5c
BF
162details.
163
164Alternative Development Models
165------------------------------
166
167CVS users are accustomed to giving a group of developers commit access to
168a common repository. As we've seen, this is also possible with git.
169However, the distributed nature of git allows other development models,
170and you may want to first consider whether one of them might be a better
171fit for your project.
172
173For example, you can choose a single person to maintain the project's
174primary public repository. Other developers then clone this repository
175and each work in their own clone. When they have a series of changes that
176they're happy with, they ask the maintainer to pull from the branch
177containing the changes. The maintainer reviews their changes and pulls
178them into the primary repository, which other developers pull from as
179necessary to stay coordinated. The Linux kernel and other projects use
180variants of this model.
b0bf8f24 181
cd976f5c
BF
182With a small group, developers may just pull changes from each other's
183repositories without the need for a central maintainer.
b27a23e3
CC
184
185SEE ALSO
186--------
497c8331
CC
187linkgit:gittutorial[7],
188linkgit:gittutorial-2[7],
189linkgit:gitcore-tutorial[7],
190linkgit:gitglossary[7],
b27a23e3
CC
191link:everyday.html[Everyday Git],
192link:user-manual.html[The Git User's Manual]
193
194GIT
195---
9e1f0a85 196Part of the linkgit:git[1] suite.