git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Johan Herland <johan@herland.net>
To: "Christian von Kietzell" <cuboci@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: Syncing with CVS
Date: Mon, 19 Jan 2009 11:28:21 +0100	[thread overview]
Message-ID: <200901191128.21230.johan@herland.net> (raw)
In-Reply-To: <f31e50960901190139w65b69fd1k752973a23c40f384@mail.gmail.com>

On Monday 19 January 2009, Christian von Kietzell wrote:
> Hi,
>
> I have a project I started in git. After a while I exported that to
> CVS via git cvsexportcommit which worked quite nicely. Now, a
> colleague made changes to the project - in CVS. What's the best way
> to get those back into my git repository so that I'll be able to sync
> back and forth between git and CVS? I had a quick look at the wiki
> but couldn't find anything appropriate.
>
> I know of git cvsimport, of course, but that doesn't work on my
> original repository. Or does it? I didn't find anything on how to
> limit what to import. After all, some of the commits are already in
> my repository (the ones I exported).
>
> Hope any of you can help. Thanks in advance.

Unfortunately bidirectional syncing between CVS and Git is pretty much 
impossible in the general case, because CVS's structure is so different 
from Git's. For one, it is very easy to (re)move tags and branches in 
CVS, with no record of where it was moved from. (Also, as anybody 
involved in proper CVS-to-Git converters ("git cvsimport" does _not_ 
fall into this category) will tell you, recreating history from CVS is 
a highly non-trivial task in itself.) This means that even if you have 
imported some CVS state into Git, you cannot guarantee that the CVS 
state has not changed the next time you try to import. Therefore, it is 
very hard to determine whether you're importing a whole new branch from 
CVS, or whether you are just incrementally importing patches on top of 
a previously imported branch.

I have a similar situation at $dayjob, where we have a central CVS 
server with the official version, and I use Git for working locally. In 
this case, I use "git cvsexportcommit" to propagate my local changes to 
the CVS server. I only use this approach on branches where nobody else 
is allowed to commit (of course CVS does not enforce this rule, so I 
have to manually make sure that does not happen). If someone else were 
to commit to my branch in CVS, I would have to redo a full CVS-to-Git 
conversion, in order to get a new Git repo that is in sync with CVS. I 
can then resume "git cvsexportcommit" to propagate my changes from Git 
to CVS.


Have fun! :)

...Johan

-- 
Johan Herland, <johan@herland.net>
www.herland.net

  reply	other threads:[~2009-01-19 10:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-19  9:39 Syncing with CVS Christian von Kietzell
2009-01-19 10:28 ` Johan Herland [this message]
2009-01-19 10:58 ` Boaz Harrosh
2009-01-19 22:05 ` Robin Rosenberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200901191128.21230.johan@herland.net \
    --to=johan@herland.net \
    --cc=cuboci@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).