2

長い歴史を持つ既存の git リポジトリがあります。ビジネス上の理由から、そのリポジトリを svn サーバーにミラーリングする必要があります。私はいくつかの方法を試しましたが、これまでのところ常に失敗しました。

4

2 に答える 2

2

しばらく前にそれを行うのに苦労したので、さまざまなソースからいくつかの手順を収集しました。この手順により、完全な git 履歴が保持されます。開始する前に、必ずリポジトリのバックアップ コピーを用意してください。

最初に行うことは、空のsvnリポジトリを作成することです。作業が完了したら、git-svnyout をインストールして編集.git/configし、新しく作成したsvnリポジトリを追跡してください。

[svn-remote "svn"]
url = https://your.svn.repo
fetch = :refs/remotes/git-svn

svnこれで、レポをフェッチできます。

git svn fetch

リポジトリに続くリモート ブランチが表示されるはずです。以下svnで確認できます。

git branch -a

root commit次に、svnブランチのハッシュを取得します。

git rev-list --parents master | grep '^.\{40\}$'
git rev-parse remotes/git-svn

移植片を作成します。

echo <hash-of-root-commit> <hash-of-svn-branch-commit> >> .git/info/grafts

git(私は を使用tigします)のグラフィカルラッパーを使用root commitすると、svn-branch.

この時点graftで、永続化を伝播する必要があります。

git filter-branch -- remotes/git-svn --all

もう必要ないので、削除できます

rm .git/info/grafts

svn-branchmaster祖先であることをグラフィカルな git ラッパーで確認してください。

これでほぼ完了です。トランクの上に履歴をリベースします。

git svn rebase

svnこれで、次を使用してリポジトリにコミットする準備が整いました

git svn dcommit

ここここで見つけた情報を組み合わせてこの手順を作成しました。それぞれの作成者に感謝します。提案された手順がうまくいかなかったため、最初の部分を変更しました。

于 2013-03-31T13:10:46.363 に答える
2

git-svnアプローチは部分的な履歴の損失につながることに注意してください。代わりにSubGitの使用を検討してください。Gitリポジトリを SVN に変換して、すべてのブランチの履歴を保持できます。

以下に、SubGit をローカル モードで使用する例を示します。つまり、Subversion と Git の両方のリポジトリが同じホストに存在する場合です。

$ subgit configure SVN_REPO
# adjust SVN_REPO/conf/subgit.conf, so git.default.repository points to GIT_REPO
# adjust SVN_REPO/conf/authors.txt to map SVN usernames to Git identities
$ subgit install SVN_REPO
$ subgit uninstall --purge SVN_REPO

この方法で Linux カーネル Git リポジトリを SVN に変換したら。それが役立つことを願っています。

于 2013-05-06T16:01:36.863 に答える