# GIT + CVS workflow query.

3 messages from 2007-06-26 to 2007-06-27. Participants: Eoin Hennessy, Yann Dirson, Junio C Hamano.
Thread: https://gitlist.dev/t/8738

## Eoin Hennessy, 2007-06-26 22:20

Subject: GIT + CVS workflow query.
Message-ID: <47281e410706261520r5b3549c7t39d93924d0a8ceea@mail.gmail.com>
URL: https://gitlist.dev/e/47281e410706261520r5b3549c7t39d93924d0a8ceea%40mail.gmail.com

```
Hi there,

I'd like to use GIT to track changes in a CVS repository. As well as
tracking changes, I will also need to push patches back to CVS from
GIT. My workflow is currently as follows:

  - Use git-cvsimport to import and update a mirror of the CVS
repository; 'project.git'.
 - Pull changes from the mirror to a cloned working copy; 'project'.
 - Fix bugs in the working copy and push commits back to the mirror.
  - Use git-cherry to identify commits in master not currently in the
branch updated by git-cvsimport. Then use git-cvsexportcommit to push
these commits into a CVS checkout.

My question is; as a next step in the workflow, should I be applying
the list of commits identified by git-cherry to the branch updated by
git-cvsimport? How else does one clear this list so that they do not
interfere with the next iteration of the workflow.

I hope I've been clear, and thanks for any suggestions.

```

## Yann Dirson, 2007-06-26 22:46

Subject: Re: GIT + CVS workflow query.
Message-ID: <20070626224659.GH7730@nan92-1-81-57-214-146.fbx.proxad.net>
URL: https://gitlist.dev/e/20070626224659.GH7730%40nan92-1-81-57-214-146.fbx.proxad.net
In-Reply-To: <47281e410706261520r5b3549c7t39d93924d0a8ceea@mail.gmail.com>

```
On Tue, Jun 26, 2007 at 11:20:24PM +0100, Eoin Hennessy wrote:
> Hi there,
> 
> I'd like to use GIT to track changes in a CVS repository. As well as
> tracking changes, I will also need to push patches back to CVS from
> GIT. My workflow is currently as follows:

I have done a similar thing for some time, with some differences.

>  - Use git-cvsimport to import and update a mirror of the CVS
> repository; 'project.git'.
> - Pull changes from the mirror to a cloned working copy; 'project'.
> - Fix bugs in the working copy

Yes.

> and push commits back to the mirror.

No, the mirror should solely be a mirror of cvs.  If you de-sync your
mirror, you're looking for trouble.

>  - Use git-cherry to identify commits in master not currently in the
> branch updated by git-cvsimport. Then use git-cvsexportcommit to push
> these commits into a CVS checkout.

Rather, the patches you have not committed yet are simply
remotes/origin/master..master.  What I did was simply
git-cvsexportcommit'ing them to my "CVS gateway checkout".

In the next iteration, cvsps will identify your commits as patchsets,
and what I did was registering the "merge to cvs" with an info/grafts
entry.  Nowaday, I would rather have my local commits in an stgit
stack, and "stg pull" would take care of detecting the merged patches
(not to mention that uncommitted patches would trivially map to stgit
patches).


But I occasionally had problems of cvs patches missed by the import,
and other issues because of cvsps not being able to cope with branches
created by cvs 1.12 (which is why I changed my workflow and wrote
stg-cvs, which in turn needs to be replaced).

Hope this helps,
-- 
Yann

```

## Junio C Hamano, 2007-06-27 00:36

Subject: Re: GIT + CVS workflow query.
Message-ID: <7vbqf2xmfr.fsf@assigned-by-dhcp.pobox.com>
URL: https://gitlist.dev/e/7vbqf2xmfr.fsf%40assigned-by-dhcp.pobox.com
In-Reply-To: <47281e410706261520r5b3549c7t39d93924d0a8ceea@mail.gmail.com>

```
"Eoin Hennessy" <eoin.hennessy@gmail.com> writes:

> I'd like to use GIT to track changes in a CVS repository. As well as
> tracking changes, I will also need to push patches back to CVS from
> GIT. My workflow is currently as follows:
>
> - Use git-cvsimport to import and update a mirror of the CVS
>    repository; 'project.git'.
> - Pull changes from the mirror to a cloned working copy; 'project'.
> - Fix bugs in the working copy and push commits back to the mirror.

Fix bugs, yes, but push back to the mirror is probably not what
you want.

> - Use git-cherry to identify commits in master not currently in the
>   branch updated by git-cvsimport. Then use git-cvsexportcommit to push
>   these commits into a CVS checkout.

What I do with my day-job project is that I keep a separate CVS
checkout like you do, and

 - cvsimport keeps track of the "project.git" mirror as you do;
 - pull changes from that to my "project" as you do (but see below);
 - fix things in "project", as you do;
 - identify the needed changes with 'git-cherry' as you do;
 - exportcommit to push them back to CVS through the CVS checkout;
 
Then the next cvsimport will get my changes (among other
people's changes) to "project.git".  

 - fetch changes from the "project.git" to my "project";
 - 'git-rebase' my changes on top of the tip of "project.git";

This will remove the duplicates that I had but now are in CVS.

```
