-1

svn から git に移行しようとしています。以下のツールを使ってやってみました

git-svn
svn2git

ただし、両方のツールは、.gitファイルとフォルダーをチェックアウトせずに、フォルダーのみを作成しました (作業コピーを話します)。

git-svn私は以下を実行しようとしました

git svn clone REMOTE_SVN_REPO
svn2git REMOTE_SVN_REPO

私は正確に何を間違っていますか?

ps グーグルを試してみましたが、すべてのブログで、これらのコマンドの両方がすべてのファイルとフォルダーを含むローカル リポジトリを作成する必要があると主張しています。また、hg convert を使用して svn プロジェクトを mercurial プロジェクトに変換したこともあります。svn プロジェクトを mercurial プロジェクトに変換した後、hg up などを実行して、プロジェクトのすべてのファイルとフォルダーを取得し、そのプロジェクトを mercurial サーバーに簡単にプッシュできました。ここにあるのは .git フォルダーだけです。どのステップが欠落しているか、正確に何が間違っていますか?

4

1 に答える 1

1

まあ、リモートSVN リポジトリgit svnの git バックエンドです。双方向のプロキシと見なすことができます。内部的に SVN コマンドをエミュレートし、ユーザーが特定の SVN リポジトリを GIT リポジトリであるかのように使用できるようにします。世界の他の地域では、ユーザーはまだ SVN を使用しています。この場合、GIT は SVN の便利なラッパーとして使用されます。

したがって、SVN リポジトリからのすべてのコミットの個人用ミラー (オプションでいくつかのコミットを選択した場合、またはいくつかのブランチを選択した場合は、その一部) をフォルダーgit-svnに取得します。コマンドを使用してインポートされたコミットのセット全体を検査し、選択したコミットをチェックアウトするか、gitk でコミットを RMB クリックして適切なメニュー項目を選択します。.git-rgitk --allgit checkout

ここで、最初に変更をローカルにコミットし (通常の GIT リポジトリで行うのと同じように)、変更を SVN リポジトリにプッシュして戻す必要がありますgit svn dcommit。SVN リポジトリへのプッシュ中に、コミットは通常の SVN クライアントによって行われたかのように「再生」されます。通常の SVN コミットと同様に、競合やその他の問題が発生する可能性があります。およびこのページで説明されているその他のコマンドを使用してgit svn fetch、変更を更新されたツリーにリベースし、競合を解決します。git svn rebasegit svn --help

一方svn2git、既存のローカル SVN リポジトリ (つまり、SVN コミット データベースのコンテンツ) をローカル GIT リポジトリに変換する方法があります。通常、このステップは、チームまたは会社全体が SVN から GIT に完全に移行することを決定したときに 1 回実行されます。変換後は、実際に GIT のすべての利点を得ることができます (複雑な分岐とマージ、コード レビュー用の GIT 固有のシステムの拡張* など)。

  • 確かに、コード レビュー用の SVN ベースまたは SCM ニュートラル システムがあります。ただし、このようなシステムは通常、順序付けられた一連の変更ではなく、一度に 1 つの特定のパッチで動作します。どちらのアプローチにも長所と短所がありますが、私は個人的には変更シーケンスを使用する方法を好みます。
于 2015-03-09T06:09:48.943 に答える