2012-01-26 5 views
8

現在、gitが提供するすべてのメリットをsvnからgitに移行することを検討しています。私たちは現在、歴史を失い、問題を調査することを心配しています。 svnからgitに移行したときに誰かが他の問題を抱えていたかどうかを知りたい。落とし穴svn - > git migration

答えて

6

履歴の消失に関してsvnからgitへの変換に問題はありません。とにかく、改訂管理ソフトウェアの主な目的は、履歴を追跡することです。

第1のルールは当然です。それらを変換する前に常にリポジトリをバックアップし、運用環境で十分に自信が持てるまで数回のテストを実行してください。

主な相違点は、gitサブモジュールと比較してSubversionの外観がどのように動作するかです。 参照:

また、ユーザーをサポートする上でいくつかの時間を費やすことを期待しています。 Gitは別の獣であり、いくつかの慣れ親しんだsvnユーザーは使用するのが直観的ではないことがわかります。

編集: Gitは、git-svnを使用して、svnリポジトリのインポートと作業をサポートしています。あなたはSubversionの

に "標準" レポ・レイアウトを持っているが、いくつかの作家がすることをお勧めします場合

+3

第1のルールは当然です:Gitリポジトリにインポートするにはgit-svnを使用します。**は変換しません** –

+0

本当に良いポイントです。私はそれを反映するために私の答えを編集しています。 – Sundae

+0

@Lazy Badger、 "import"と "convert"の違いは何ですか? svn repoをgit repoに "変換"する標準的な方法は実際にgit-svnを使用します。 – ebneter

4

の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 

いくつかの追加の便利な読書:

+0

また、git svn fetchをスクリプトのループに追加して、多数のタグと深い履歴(および時折の切断)を持つ巨大なreposをクローンします。 – prusswan

+0

あなたの有益な答えをありがとう。 –

4

(覆われていない段階で「ブランチやタグをクリーンアップ」) SVNで。これは、trunk/フォルダをtags/またはbranches/にコピーするのではなく、そのサブフォルダのみをコピーしたときです。これらのフォルダは、トランクを持つ共通の祖先を持たないリビジョンとして「リッピング」されて表示されます。しかし、コンテンツ自体は正しいです。

1

私は私がここに書いたgitリポジトリにスクリプトを使用して、分岐履歴と、SVNの履歴を移行することができました:

https://github.com/onepremise/SGMS

をあなたは両方のフォーマットをサポートすることができます。

/trunk 
    /Project1 
    /Project2 
/branches 
    /Project1 
    /Project2 
/tags 
/Project1 
/Project2 

このスキーム人気があり、サポートされている:

/Project1 
    /trunk 
    /branches 
    /tags 
/Project2 
    /trunk 
    /branches 
    /tags 
1

SubversionとGitは、履歴を表現したり、メタデータを保持したり、システム特有の問題を処理する方法が大きく異なります。ファイルやディレクトリのプロパティmergeinfo:

  1. ミッシングマージがGitリポジトリにコミット:

    SubversionはSVNのように行わマージに関する情報を保持し、このような違いが落とし穴のほとんどを引き起こします。 Gitへの変換では、Gitはそれを表現する手段がないため、サブツリーマージやチェリーピックに関する情報は失われます。見た目: - :

    追加@Sundae's answerへ:このツールは、実際のsvnをインポートすることができますSmartGitを見てみ

    After “git svn clone”, I still don't have fantastic branch-merging commit?

  2. 外観およびサブモジュールを参照してください。しかし、他のGitクライアントではサポートされていない特別なフォーマットのファイルを使用します。

  3. 空のディレクトリ:

    Subversionの扱いディレクトリファーストクラスの市民として、Gitはしません - 1は、変換時にディレクトリを維持するために、いくつかのプレースホルダファイルを追加する必要があります。 git-svnは外部記憶装置「未処理のログ」でこれを処理しようとしますが、変換後にgit-svnを使用し続ける場合にのみ機能します。

  4. のsvn:無視して、.gitignore、SVN:EOLスタイル/ MIMEタイプと.gitattributes:

    のgit - SVNは自動的に対応する.gitattributesにSubversionのプロパティを変換しません。特定のコマンドを実行する必要がありますの属性を追加する変換 - とにかく、この情報は変換時に失われます。

  5. 任意のSubversionのプロパティ:SubversionリポジトリをGitのリポジトリに変換するとき

    任意のカスタムファイルとリビジョンのプロパティが失われます。

SubGitをご覧ください。落とし穴のほとんどにうまく対応し、他のバージョンでは修正予定です。

SubGitは、全社的な移行ツールとして作成されています。ワンショット変換ユーティリティとして使うことができますが、一般的にSubversionとGitの連続同期ツールです。詳細はdocumentation pageで見つけることができます。

関連する問題