CVSには中央リポジトリがあり、Gitでローカルに使用してから、変更をCVSに送り返したいと思います。
毎日何を達成できますか?
私が達成したいタスクは次のとおりです。
- ブランチのインポート、
- GITのような形式で履歴を取得し、
- 変更/コミットを一元化されたサーバーにエクスポートして戻す
ところで、私はCVSでgitを使用するためのベストプラクティスも調べました。しかし、それはうまくいきませんでした、そして私は私が何を逃したか、または間違ったことを理解することができませんでした。
CVSには中央リポジトリがあり、Gitでローカルに使用してから、変更をCVSに送り返したいと思います。
毎日何を達成できますか?
私が達成したいタスクは次のとおりです。
ところで、私はCVSでgitを使用するためのベストプラクティスも調べました。しかし、それはうまくいきませんでした、そして私は私が何を逃したか、または間違ったことを理解することができませんでした。
私が過去にしたことは次のとおりです。
使用:
$ 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.txt
CVSアカウントとName+emailの間の一致を含むファイルであり、各行には次のものが含まれます。userid=User Name <useremail@hostname>
$CVSROOT
CVSリポジトリサーバーです。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の変更が表示されます。
ツールの非互換性のため、最近のバージョン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
cvs2git
CVSリポジトリを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.dat
andcvs2git-tmp/git-dump.dat
です。
これらのファイルは、次の方法で空のgitリポジトリにインポートできます。
cat git-blob.dat git-dump.dat | git fast-import
TAG.FIXUP
次に、ブランチを削除して実行gitk --all
し、変換の結果を表示します。
次のコマンドを実行して、詳細を確認しますcvs2git --help
。
あなたの場合、すぐに使えるレシピはないと思います。ただし、次のことを試すことができます。
git cvsimport
。そして、Gitに、を使用して他の開発者のCVSのふりをするように依頼しgit cvsserver
ます。