私のSVNの構造は、このようなものです:すべてのブランチがルートにあるSVNリポジトリをクローンするには?
/
|-- Branch1
|-- Branch2
|-- Branch3
...
にはどうすれば枝を維持gitリポジトリ(すなわちないフラット歴史)にこれを複製することができますか?
ボーナスに関する質問:SVNブランチのサブセットのみを新しいgitリポジトリにクローンする方法は?
私のSVNの構造は、このようなものです:すべてのブランチがルートにあるSVNリポジトリをクローンするには?
/
|-- Branch1
|-- Branch2
|-- Branch3
...
にはどうすれば枝を維持gitリポジトリ(すなわちないフラット歴史)にこれを複製することができますか?
ボーナスに関する質問:SVNブランチのサブセットのみを新しいgitリポジトリにクローンする方法は?
私は、SVNブランチは単にフォルダであると信じています。 Gitは実際にブランチで動作します。これにより、アプローチがより簡単になります。
SVNリポジトリからデータを取得する必要があるので、リモートを作成する必要があります。構造から、あなたのgitリポジトリにBranch 1〜3を作成する必要があることがわかります。
Gitリポジトリを作成します。
git init
git config --local --add user.name <Username>
git config --local --add user.email <email>
echo "MASTER" > master
git add master
git commit -m "Dummy commit"
SVNブランチのリモートを作成します。
支社用git config --add svn-remote.<BranchName>.url <SVN URL>
git config --add svn-remote.<BranchName>.fetch :refs/remotes/<RemoteName>
:
git config --add svn-remote.branch1.url https://svnhost/svn/MyRepo/Branch1
git config --add svn-remote.branch1.fetch :refs/remotes/branch1_remote
は、支社のSVNのデータを取得:
git svn fetch branch1
を繰り返し、この他の二つの枝支社とBranch3ため。
クローンを作成しようとしている場合は、ここで停止することができます.Gitリポジトリを使用したい場合を除いて、先に進む必要はありません。 gitサブツリー上のGoogleが、なぜこれがあなたのケースで正しい解決策になるのかを知ってください。あなたのためのボーナス質問
Find last commit id:
git checkout remotes/branch1_remote
git svn log -n 1 --show-commit --oneline
Output: 734713bc047d87bf7eac9674765ae793478c50d3 (This is yout LastCommitId value)
Create subtree in mainline master branch:
git checkout master
git subtree add --prefix=Branch1 <LastCommitId>
:この1つは簡単です。この
git svn clone https://svnhost/svn/MyRepo/Branch2
を試してみて、他の方法は、上記の手順に従うことで、代わりに3つのリモコンを作成するのにサブツリーを作成する
同じリポジトリが毎回新しいリポジトリを作成し、ブランチのリモートを追加します。あなたの要件に基づいて、異なる方法でGoogleを行うことができます。
ブランチが作成される前に、トランクのみの最初のいくつかのリビジョンを複製します。私はあなたのブランチがリビジョン5より前に作られていないと仮定しています。私はまたあなたのトランクフォルダがtrunk
という名前であると仮定しています。それに従って調整してください。うまくいけば、既に著者ファイルを作成していることを望みます。これにより、ローカルリポジトリが設定されます。
$ git svn clone https://svn.example.com/myrepo --authors-file=authors.txt -T trunk -r 1:5 myrepo
次は、これに似myrepo/.git/config
でbranches
の行を追加:
[svn-remote "svn"]
url = https://svn.example.com/myrepo
fetch = trunk:refs/remotes/origin/trunk
branches = branches/Branch1:refs/remotes/origin/*
branches = branches/Branch2:refs/remotes/origin/*
branches = branches/Branch3:refs/remotes/origin/*
を
[svn-remote "svn"]
url = https://svn.example.com/myrepo
fetch = trunk:refs/remotes/origin/trunk
branches = branches/Branch*:refs/remotes/origin/*
編集後にmyrepo/.git/svn/.metadata
を削除することをおすすめの人もいます。それが必要かどうかわかりません。
残りのリビジョンをフェッチするだけです。 Git svnはブランチ構造を整えて正しいことを行います。 branches
のいずれかに一致しないブランチは無視されます。
$ cd myrepo
$ git svn fetch
完了したら、このコマンドでブランチが作成されたことを確認できます。
$ git branch -r
origin/Branch1
origin/Branch2
origin/Branch3
origin/trunk
これは、SVNからGitへのワンタイム変換についてのことですが、Gitのみを使用していますか、GitからSVNにコミットしたいですか? – Vampire
これは一回の変換ですが、私は新しいSVNコミットを私のgitリポジトリに転送できるようにしたいと思います。 – user1709708