10

はい、知っています。なぜ Git から SVN に移行したいのですか?

たまたま、巨大な Git リポジトリを Subversion に移行する必要がある状況に陥っています。Edwin のコメントに従って試した 1 つのワークフローを次に示します。

最初にローカル SVN リポジトリを作成します。 svnadmin create svn_repo

次に、Git リポジトリをチェックアウトします。 git clone git:myNameSpace/myProject

cdに入ってmyProject実行します:

git svn init -s --prefix=svn/ file:///home/myHome/svn_repo/myProject

git svn fetch

git rev-list --parents master | grep '^.\{40\}$'ルートコミットのハッシュを検索し、必要に応じてコミットを1つだけ提供します。

次に、空のトランク コミットのハッシュを取得します。 git rev-parse svn/trunk

残念ながら、これは次のように失敗します。

fatal: ambiguous argument 'svn/trunk': unknown revision or path not in the working tree. Use '--' to separate paths from revisions

うーん、この後なかなか行けないな……。

4

2 に答える 2

8

いくつかの簡単な手順で SubGit を使用して移行することをお勧めします。

$ svnadmin create svn.repo
$ subgit configure svn.repo
$ nano svn.repo/conf/subgit.conf #edit path to your (bare!) Git repository (you may use "git clone --bare <URL> bare.git.repo" if you don't have it locally)
$ subgit install

それで全部です。翻訳 SubGit は、すべてのコミット (一時的なものも含む)、ブランチ、マージ、無視、日付、EOL 設定、タグなどを可能な限り保持しようとします。

変換後、リポジトリは同期されます (Git への各プッシュは SVN リビジョンに変換され、その逆も同様です)。同期を解除するには (必要がない場合)、次を実行します。

$ subgit uninstall svn.repo
于 2012-05-12T15:03:10.307 に答える
3

--- 詳細追記後編集 ---

に対して空の初期コミットを行いましたsvn/trunkか? そうでない場合は、履歴に見つからないというエラーが発生する理由を説明します。

コメント(組み合わせて)

The --prefix gives you remote tracking branches like "svn/trunk" which
is nice because you don't get ambiguous names if you call your local
branch just "trunk" then. 

Then get the hash of the empty trunk commit:

svn/trunk既存のtrunkディレクトリとの svn の競合を防ぐためにコミットしたことを暗示する傾向があります。もしそうなら、おそらくあなたの唯一の過ちは、svn/trunk後で発見されることをコミットしていないことですか?

--- 元の投稿に続く ---

これを試しましたか?トランク (またはブランチ) の履歴を線形化するまで、dcommit は正しく機能しません。

試みた移行の詳細を投稿してください。あなたが投稿したものは有用なエラー メッセージですが、そのエラーに到達するために使用した手順のリストを使用すると、10 倍有用になります。

于 2012-04-04T15:24:40.463 に答える