コミットしなければならない中央の SVN リポジトリがありますが、私は Git に情熱を持っています (私が知っている他の開発者と同様)。このケースはよく知られています。
それから、git-svn について読んで試してみました。完全な履歴は必要ないので、2 か月程度だけあればよいので、次のようにしました。
git svn clone -r 34000 -s https://svn.ourdomain.com/svn/repos/Project/SubProject
SubProject には、いつものように、サブディレクトリtrunk
、tags
およびがありましたbranches
。すばらしい。
そして、最終改訂版を入手するために、私は
git svn rebase
いくつかダウンロードした後、素晴らしいです。最後のリビジョン、ログなど。さて、今度は機能ブランチに切り替えます。
$ git branch
* master
$ git branch -r
trunk
$ git branch -a
* master
remotes/trunk
質問は、ブランチはどこにあるのか、何か間違ったことをしたのか、ブランチを新しい Git リポジトリに取り込むにはどうすればよいのか、ということです。
git-svn については、どこで読んでもブランチとタグを賢く処理していましたが、動作は期待したものではありませんでした。ありがとうございます!
編集: それができることを今知りましたgit svn fetch
。しかし、すべてのリビジョンが取得されるため、それは好ましくありません。
ベストアンサー1
いくつかの手順が必要になります。
適切なトランク、ブランチ、タグのフォルダ名を指定して、SVN リポジトリを取得します。
git svn init -t tags -b branches -T trunk https://mysvn.com/svnrepo git svn fetch
svn のタグは実際のブランチなので、タグ ブランチから git タグを作成します。
git for-each-ref --format="%(refname:short) %(objectname)" refs/remotes/tags | cut -d / -f 3- | while read ref do echo git tag -a $ref -m 'import tag from svn' done
タグブランチを削除する
git for-each-ref --format="%(refname:short)" refs/remotes/tags | cut -d / -f 2- | while read ref do echo git branch -rd $ref done
前の手順でマークされたタグはコミット「create tag」を指しているため、「実際の」タグ、つまり「create tag」コミットの親を導出する必要があります。
git for-each-ref --format="%(refname:short)" refs/tags | while read ref do tag=`echo $ref | sed 's/_/./g'` # give tags a new name echo $ref -\> $tag git tag -a $tag `git rev-list -2 $ref | tail -1` -m "proper svn tag" done
今やるべきことは、古いタグを削除することだけです。