threads / discuss / 8738

GIT + CVS workflow query.

Subject: GIT + CVS workflow query.

## tl;dr

3 messages between Jun 26, 2007 and Jun 27, 2007.

replies: 2people: 3as markdown or json

Eoin Hennessy· Jun 26, 2007, 22:20 UTC · lore
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· Jun 26, 2007, 22:46 UTC · re: Eoin Hennessy · lore

Re: GIT + CVS workflow query.

On Tue, Jun 26, 2007 at 11:20:24PM +0100, Eoin Hennessy wrote:
Show 5 quoted lines
> 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· Jun 27, 2007, 00:36 UTC · re: Eoin Hennessy · lore

Re: GIT + CVS workflow query.

"Eoin Hennessy" <eoin.hennessy@gmail.com> writes:
Show 8 quoted lines
> 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.

← back to recent threads