38

CVSには中央リポジトリがあり、Gitでローカルに使用してから、変更をCVSに送り返したいと思います。

毎日何を達成できますか?

私が達成したいタスクは次のとおりです。

  • ブランチのインポート、
  • GITのような形式で履歴を取得し、
  • 変更/コミットを一元化されたサーバーにエクスポートして戻す

ところで、私はCVSでgitを使用するためのベストプラクティスも調べました。しかし、それはうまくいきませんでした、そして私は私が何を逃したか、または間違ったことを理解することができませんでした。

4

3 に答える 3

53

私が過去にしたことは次のとおりです。

CVSリポジトリをインポートする

使用:

$ git cvsimport -C target-cvs -r cvs -k -vA authors-file.txt -d $CVSROOT module

どこ:

  • target-cvsリポジトリのローカルコピーを保持するディレクトリです。
  • cvsリモートリポジトリを参照するために使用する名前です。だから、私は、、cvs/masterなどcvs/HEADをローカルでポイントしmasterます。
  • authors-file.txtCVSアカウントとName+emailの間の一致を含むファイルであり、各行には次のものが含まれます。userid=User Name <useremail@hostname>
  • $CVSROOTCVSリポジトリサーバーです。sourceforgeリポジトリからの匿名クローンを使用する場合は、次を使用します。:pserver:anonymous@project_name.cvs.sourceforge.net:/cvsroot/project_name
  • moduleクローンを作成したいリポジトリ内のモジュールです。リポジトリにモジュールが1つしかない場合は、おそらくと同じになりますproject_name

リポジトリを更新する

以前に書いたコマンドを繰り返すことができます。その特定の例では、の親ディレクトリで実行する必要がありますtarget-cvs将来的に簡単にするために、いくつかの変数を構成することをお勧めします(「改訂履歴をmercurialまたはgitからcvsにエクスポートする方法の回答で詳細を読むことができます

$ git cvsimport

gitこれは、ローカルリポジトリをCVSのリモートリポジトリと同期させるのに十分です。

日々の仕事

今後、すべての変更はローカルのgitブランチで行われる必要があります。1つの機能、1つのブランチ。このために、「成功したGit分岐モデル」で説明されているワークフローを使用します。唯一の違いは、マスターがCVSを指していることですが、概念的には同じワークフローをここに適用できます。それは単なる慣習です。

コミットがCVSにプッシュされると、次の更新でマスターに戻ります(git cvsimport)。次に、その機能を実装したローカルブランチを削除できます。

(ローカルブランチで)進行中の作業については、rebaseマスターに対して行う必要があります。機能が分離されているため、競合を解決するのが簡単になるはずです。トリッキーな部分は、一部のブランチが他のブランチに依存しているが、それでも管理しやすい場合です。マイクロコミットは(他のgitワークフローと同様に)大いに役立ちます。

すべてのローカルブランチがリベースされ、マスターが変更されていない場合(更新を除く)、正常に機能するgit cvsexportcommitはずです。1回のコミットで機能することを忘れないでください。少し面倒ですが、何もないよりはましです。前の例では、コマンドは次のようになります。

$ git cvsexportcommit -vc commit-id

リモートCVSへの読み取り専用アクセスしか持っていない場合は、パッチを電子メールで送信するか、gitリポジトリを公開して、コミッターがパッチを取得して適用できるようにすることができます。この場合、CVSの通常のワークフローと何ら変わりはありません。繰り返しになりますが、次のアップデートでは、masterの変更が表示されます。

于 2012-07-15T07:05:11.873 に答える
7

ツールの非互換性のため、最近のバージョンgit cvsimportでは壊れています。cvsps

したがって、をインストールする必要がありますcvsps-2.1

OSXでは次のことができます(持っているbrew):

brew tap homebrew/versions
brew install cvsps2
brew unlink cvsps
brew link --overwrite cvsps2

そして、通常どおり空のgitリポジトリにインポートします。例:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:anonymous@reponame.cvs.sourceforge.net:/cvsroot/path ModuleName

cvs2gitCVSリポジトリをgitに変換できるツールを使用することもできます。ただし、CVSROOTディレクトリにアクセスする必要があります。

インストール手順については、 cvs2gitのドキュメントを確認してください。

使用例:

cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo

これにより、gitfast-import形式で2つの出力ファイルが作成されます。これらのファイルの名前は、オプションファイルまたはコマンドライン引数によって指定されます。この例では、これらのファイルの名前はcvs2git-tmp/git-blob.datandcvs2git-tmp/git-dump.datです。

これらのファイルは、次の方法で空のgitリポジトリにインポートできます。

cat git-blob.dat git-dump.dat | git fast-import

TAG.FIXUP次に、ブランチを削除して実行gitk --allし、変換の結果を表示します。

次のコマンドを実行して、詳細を確認しますcvs2git --help

于 2015-03-18T13:46:18.520 に答える
2

あなたの場合、すぐに使えるレシピはないと思います。ただし、次のことを試すことができます。

  • CVSデータをGitと手動で同期するか、そのためのスクリプトを作成します。彼らはCVSから情報を取得し、それをGitに渡します。これにより、Gitのある種の履歴が得られます。完全にきれいではなく、完全に使用可能ではありませんが、それでもです。
  • のようなツールを使用して、CVSリポジトリをGitに移行しますgit cvsimport。そして、Gitに、を使用して他の開発者のCVSのふりをするように依頼しgit cvsserverます。
于 2012-07-10T13:46:52.070 に答える