コードをCVSソース管理からGitに移行する方法があるかどうかを知る必要がありますか?
はいの場合、コミットの履歴はどうですか?
私は個人的にCVSからGitへの変換を行っていませんが、Eric Raymondの cvs-fast-export
が使用するツールであると信じています。彼はmanページを掲載しています herecvsps
はEricが保守している別のツールですが、最近ではcvs-fast-export
の代わりに廃止されました。 cvs2git
は、cvs2svn
と同じ機械の一部で構築された別のツールです。後者は非常に熟達していたため、cvs2git
が同等に優れていることを期待しています。
注意すべき点が1つあります。CVSはかなり壊れたRCSです。 Gitに正確に反映できないコンテンツが含まれている可能性があります。 IOW、そこにはいくつかの不整合インピーダンスがありますが、ツールは可能な限り保存するために非常に一生懸命努力します。コンバージョンを確認し、結果に満足していることを確認してください。 Gitの履歴の一部を修正して、より受け入れやすいものにする必要があるかもしれませんが、そうする必要はないと思います。
cvs2git ( 最新の安定版リリースはこちら を使用してSourceForge CVSリポジトリをGitに移行するために使用したプロセスを次に示しますが、IIRCではgithub開発バージョンを使用しました) Pythonであるため、コンパイルを必要としないWindowsとLinuxの両方:
Sourceforge CVSからgitにインポートする方法。
最初に、履歴全体を含むcvsリポジトリをダウンロード/チェックアウトする必要があります(HEAD/Trunkをチェックアウトするだけではありません):
rsync -av rsync://PROJECT.cvs.sourceforge.net/cvsroot/PROJECT/\* cvs
次にcvs2gitを使用します(pythonスクリプト、すべてのプラットフォームで動作し、コンパイルは不要です):
python cvs2git --blobfile="blob.dat" --dumpfile="dump.dat" --username="username_to_access_repo" --options=cvs2git.options --fallback-encoding utf-8 cvs
これにより、すべてのcvs履歴を含む2つのファイルblobとdumpが生成されます。テキストエディタでそれらを開いて、コンテンツが正しいように見えることを確認できます。
次に、別のフォルダー内でgitリポジトリを初期化します。
mkdir gitexport/
cd gitexport
git init
次に、エクスポートされたcvs履歴をgitにロードします。
cat ../{blob,dump}.dat | git fast-import
そして、git commitカーソルを履歴の最後に置きます:
git reset --hard
最後に、オプションで、リモートgitリポジトリにプッシュできます:
git Push -u Origin master
もちろん、
git remote add Origin https://your_repo_url
の前に必要です
注:cvs2git.options
はcvs2git
のJSON形式の構成ファイルで、作成者名などのさまざまなものの変換を指定できます(インポート後にニックネームが自動的にフルネームに変換されます)。 ドキュメントはこちら または サンプルオプションファイルの例 を参照してください。
また、この方法でリポジトリを所有する必要はありません、所有していないSourceForgeプロジェクトを移行できますチェックアウトですので、これはすべてのパブリックリポジトリで機能します)。
se git-cvsimport
CVSリポジトリをGitにインポートします。デフォルトでは、これはすべてのリビジョンをチェックアウトし、比較的完全な履歴を提供します。
オペレーティングシステムによっては、このサポートを個別にインストールする必要がある場合があります。たとえば、Ubuntuマシンでは、git-cvs
パッケージ。
この回答 はさらに詳しく説明します。
私は最近(2016) reposurgeon Eric Raymondを使用して、sourceforgeからgitにCVSリポジトリをインポートしました。私はとてもうれしく驚き、とてもうまくいきました。 cvs2svnやその他のツールでの過去の経験の後、この種のタスクのためにためらうことなく再手術を勧めます。
エリックは簡単な移行ガイドを投稿しました here
gaborous の answer は git fast-import
、ログメッセージで失敗する可能性がありますnot UTF-8でエンコードされています。
これは、Git 2.23(2019年第2四半期)でうまく機能します:The "git fast-export/import
"ペアは、UTF-8以外のエンコーディングでログメッセージを使用したコミットを処理するように改善されています。
commit e80001f 、 commit 57a8be2 、 commit ccbfc96 、 commit 3edfcc6 、 commit 32615ce を参照してください(2019年5月14日)by Elijah Newren(newren
) 。
( 浜野潤夫-gitster
- in commit 66dc7b6 、2019年6月13日)
fast-export
:要求された場合のみコミットメッセージの自動再エンコードを行いますコミットメッセージの自動再エンコード(およびエンコードヘッダーのドロップ)は、可逆的な履歴の書き換え(たとえば、sha1sum <-> sha256sumの遷移、一部のサブツリーの書き換え)の試行を傷つけ、
fast-export
出力を変更するために明示的なユーザー要求を要求する(例:--signed-tags=strip
、--tag-of-filtered-object=rewrite
)。--reencode
フラグは、ユーザーが指定するために使用でき、他の高速エクスポートフラグと同様に、デフォルトで 'abort
'になります。
つまり、 Documentation/git-fast-export
に含まれるもの:
--reencode=(yes|no|abort)::
コミットオブジェクトで
encoding
ヘッダーを処理する方法を指定します。
- '
abort
'(デフォルト)に問い合わせると、このプログラムはそのようなコミットオブジェクトに遭遇すると死にます。- 「yes」の場合、コミットメッセージはUTF-8に再エンコードされます。
- 「no」を指定すると、元のエンコードが保持されます。
fast-export
:再エンコードできない場合、エンコードヘッダーを削除しないいつ
fast-export
は、「エンコード」ヘッダーを含むコミットを検出し、UTF-8で再エンコードを試行し、エンコードヘッダーをドロップします。
ただし、UTF-8での再エンコードに失敗した場合、たとえばコミットメッセージの文字の1つが古いエンコードでは無効だった場合、元のエンコードを保持する必要があります。そうしないと、元のコミットメッセージの他のすべての(有効な)文字を理解するために必要な情報が失われます。
fast-import
:「エンコード」コミットヘッダーをサポートGitはUTF-8以外のエンコーディングのコミットメッセージをサポートしているため、
fast-import
コミットをインポートします。
これは、外部システムからのコミットメッセージを再エンコードしたくない場合に役立ちます。また、Gitリポジトリで可逆履歴の書き換え(sha1sum <-> sha256sum遷移またはサブツリー作業)を実現する場合にも役立ちます。コミット履歴で特殊なエンコーディングを使用しています。
Documentation/git-fast-import
に含まれるもの:
エンコーディング `
オプションの
encoding
コマンドは、コミットメッセージのエンコードを示します。
ほとんどのコミットはUTF-8であり、エンコードは省略されますが、これにより、コミットメッセージを最初に再エンコードせずにgitにインポートできます。
そのテスト を表示するには、名前に非ASCII文字を含む著者を使用しますが、特別なコミットメッセージはありません。
サイズを確認することで、UTF-8への再エンコードが機能したことを確認します。
コミットオブジェクトは、再エンコードされない場合、240バイトになります。
- 「
encoding iso-8859-7\n
"ヘッダーは20バイトをドロップします。- Pi文字π の再エンコード
\xF0
(\360
)iso-8859-7で\xCF\x80
(\317\200
)UTF-8では、バイトが追加されます。予想されるサイズを確認してください。
Sourceforgeからgithubにプロジェクトを複製するために、次の手順を実行しました。
PROJECT=some_sourceforge_project_name
GITUSER=rubo77
rsync -av rsync://a.cvs.sourceforge.net/cvsroot/$PROJECT/\* cvs
svn export --username=guest http://cvs2svn.tigris.org/svn/cvs2svn/trunk cvs2svn-trunk
cp ./cvs2svn-trunk/cvs2git-example.options ./cvs2git.options
vim cvs2git.options # edit run_options.set_project
cvs2svn-trunk/cvs2git --options=cvs2git.options --fallback-encoding utf-8
https://github.com/$GITUSER/$PROJECT.git
で空のgitを作成します
git clone [email protected]:$GITUSER/$PROJECT.git $PROJECT-github
cd $PROJECT-github
cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
git log
git reset --hard
git Push