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分岐モデル」で説明されているワークフローを使用します。唯一の違いは、masterがCVSを指していることですが、概念的には同じワークフローをここで適用できます。これは単なる慣例です。
コミットがCVSにプッシュされると、次の更新でマスターに戻ります(git cvsimport
)。その後、その機能を実装したローカルブランチを削除できます。
(ローカルブランチで)進行中の作業については、マスターに対してrebase
する必要があります。機能が分離されているため、競合を解決する方が簡単です。トリッキーな部分は、一部のブランチが他のブランチに依存しているが、依然として管理可能である場合です。マイクロコミットは非常に役立ちます(Gitワークフローと同様)。
すべてのローカルブランチがリベースされ、マスターが更新されない場合は、git cvsexportcommit
が機能するはずです。 1回のコミットで機能することを忘れないでください。少し面倒ですが、何もないよりはましです。前の例を考えると、コマンドは次のようになります。
$ git cvsexportcommit -vc commit-id
リモートCVSへの読み取り専用アクセス権しかない場合は、パッチをメールで送信するか、gitリポジトリを公開して、コミッターがパッチを取得して適用できるようにします。この場合、CVSの通常のワークフローと何の違いもありません。繰り返しますが、次の更新では、masterの変更が表示されます。
最新バージョンでは、cvsps
tool incompatibility のため、git cvsimport
が壊れています。
したがって、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:[email protected]:/cvsroot/path ModuleName
CVSリポジトリをgitに変換できる cvs2git
ツールを使用することもできます。ただし、CVSROOTディレクトリにアクセスする必要があります。
インストール手順については cvs2git documentation を確認してください。
使用例:
cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo
これにより、git fast-import形式の2つの出力ファイルが作成されます。これらのファイルの名前は、オプションファイルまたはコマンドライン引数によって指定されます。この例では、これらのファイルの名前はcvs2git-tmp/git-blob.dat
およびcvs2git-tmp/git-dump.dat
です。
これらのファイルは、次の方法で空のgitリポジトリにインポートできます。
cat git-blob.dat git-dump.dat | git fast-import
次に、TAG.FIXUP
ブランチを削除し、gitk --all
を実行して、変換の結果を表示します。
cvs2git --help
を実行して、詳細を確認します。
あなたの場合、レシピを使用する準備はできていないと思います。ただし、次のことを試すことができます。
git cvsimport
を使用して、CVSリポジトリをGitに移行します。 git cvsserver
を使用して、Gitに他の開発者のCVSのふりをするように依頼します。