長い歴史を持つ既存の git リポジトリがあります。ビジネス上の理由から、そのリポジトリを svn サーバーにミラーリングする必要があります。私はいくつかの方法を試しましたが、これまでのところ常に失敗しました。
2 に答える
しばらく前にそれを行うのに苦労したので、さまざまなソースからいくつかの手順を収集しました。この手順により、完全な git 履歴が保持されます。開始する前に、必ずリポジトリのバックアップ コピーを用意してください。
最初に行うことは、空のsvn
リポジトリを作成することです。作業が完了したら、git-svn
yout をインストールして編集.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-branch
がmaster
祖先であることをグラフィカルな git ラッパーで確認してください。
これでほぼ完了です。トランクの上に履歴をリベースします。
git svn rebase
svn
これで、次を使用してリポジトリにコミットする準備が整いました
git svn dcommit
こことここで見つけた情報を組み合わせてこの手順を作成しました。それぞれの作成者に感謝します。提案された手順がうまくいかなかったため、最初の部分を変更しました。
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 に変換したら。それが役立つことを願っています。