現在、gitが提供するすべてのメリットをsvnからgitに移行することを検討しています。私たちは現在、歴史を失い、問題を調査することを心配しています。 svnからgitに移行したときに誰かが他の問題を抱えていたかどうかを知りたい。落とし穴svn - > git migration
答えて
履歴の消失に関してsvnからgitへの変換に問題はありません。とにかく、改訂管理ソフトウェアの主な目的は、履歴を追跡することです。
第1のルールは当然です。それらを変換する前に常にリポジトリをバックアップし、運用環境で十分に自信が持てるまで数回のテストを実行してください。
主な相違点は、gitサブモジュールと比較してSubversionの外観がどのように動作するかです。 参照:
- Why are git submodules incompatible with svn externals?
- How do I adapt my svn:externals strategy to git submodules?
- Git submodule tutorial
また、ユーザーをサポートする上でいくつかの時間を費やすことを期待しています。 Gitは別の獣であり、いくつかの慣れ親しんだsvnユーザーは使用するのが直観的ではないことがわかります。
編集: Gitは、git-svnを使用して、svnリポジトリのインポートと作業をサポートしています。あなたはSubversionの
に "標準" レポ・レイアウトを持っているが、いくつかの作家がすることをお勧めします場合
のGit-SVNは、Gitのリポジトリに
git svn clone url://path/to/repo -s
-sをすべてSubversionの歴史(と追加のメタデータの一部)をインポート使用
git svn init -s http://example.com/svn/my_proj
git svn fetch
いくつかの追加の便利な読書:
- 7 steps to migrate a complete mirror of svn in gitほとんどの問題は、非標準の枝やタグが存在する場合に発生する
- Ruby tool for importing existing svn projects into git(ブランチやタグが有意義な方法でインポートされます)
また、git svn fetchをスクリプトのループに追加して、多数のタグと深い履歴(および時折の切断)を持つ巨大なreposをクローンします。 – prusswan
あなたの有益な答えをありがとう。 –
(覆われていない段階で「ブランチやタグをクリーンアップ」) SVNで。これは、trunk/
フォルダをtags/
またはbranches/
にコピーするのではなく、そのサブフォルダのみをコピーしたときです。これらのフォルダは、トランクを持つ共通の祖先を持たないリビジョンとして「リッピング」されて表示されます。しかし、コンテンツ自体は正しいです。
私は私がここに書いたgitリポジトリにスクリプトを使用して、分岐履歴と、SVNの履歴を移行することができました:
https://github.com/onepremise/SGMS
をあなたは両方のフォーマットをサポートすることができます。
/trunk
/Project1
/Project2
/branches
/Project1
/Project2
/tags
/Project1
/Project2
このスキーム人気があり、サポートされている:
/Project1
/trunk
/branches
/tags
/Project2
/trunk
/branches
/tags
SubversionとGitは、履歴を表現したり、メタデータを保持したり、システム特有の問題を処理する方法が大きく異なります。ファイルやディレクトリのプロパティmergeinfo:
ミッシングマージがGitリポジトリにコミット:
SubversionはSVNのように行わマージに関する情報を保持し、このような違いが落とし穴のほとんどを引き起こします。 Gitへの変換では、Gitはそれを表現する手段がないため、サブツリーマージやチェリーピックに関する情報は失われます。見た目: - :
追加@Sundae's answerへ:このツールは、実際のsvnをインポートすることができますSmartGitを見てみ
もAfter “git svn clone”, I still don't have fantastic branch-merging commit?
外観およびサブモジュールを参照してください。しかし、他のGitクライアントではサポートされていない特別なフォーマットのファイルを使用します。
空のディレクトリ:
Subversionの扱いディレクトリファーストクラスの市民として、Gitはしません - 1は、変換時にディレクトリを維持するために、いくつかのプレースホルダファイルを追加する必要があります。 git-svnは外部記憶装置「未処理のログ」でこれを処理しようとしますが、変換後にgit-svnを使用し続ける場合にのみ機能します。
のsvn:無視して、.gitignore、SVN:EOLスタイル/ MIMEタイプと.gitattributes:
のgit - SVNは自動的に対応する.gitattributesにSubversionのプロパティを変換しません。特定のコマンドを実行する必要がありますの属性を追加する変換 - とにかく、この情報は変換時に失われます。
任意のSubversionのプロパティ:SubversionリポジトリをGitのリポジトリに変換するとき
任意のカスタムファイルとリビジョンのプロパティが失われます。
SubGitをご覧ください。落とし穴のほとんどにうまく対応し、他のバージョンでは修正予定です。
SubGitは、全社的な移行ツールとして作成されています。ワンショット変換ユーティリティとして使うことができますが、一般的にSubversionとGitの連続同期ツールです。詳細はdocumentation pageで見つけることができます。
第1のルールは当然です:Gitリポジトリにインポートするにはgit-svnを使用します。**は変換しません** –
本当に良いポイントです。私はそれを反映するために私の答えを編集しています。 – Sundae
@Lazy Badger、 "import"と "convert"の違いは何ですか? svn repoをgit repoに "変換"する標準的な方法は実際にgit-svnを使用します。 – ebneter