2

SVN-repository に変換したい -repository がありますgit。私はsvn2gitこれを達成するために使用しています。残念ながら、ツールがタグを正しく取得するのに問題があるようです。私のSVNリポジトリは次のようになります。

.../branches
.../tags
        project-version-5.2.5/
        project-version-5.3.0/
        project-version-5.3.1/
        project-version-5.4.0/
        project-version-5.5.0/
        project-version-5.5.1/
        project-version-5.5.2/
        project-version-5.5.3/
        project-version-5.5.4/
        project-version-5.6.0/
        project-version-5.6.1/
        project-version-5.6.2/
        project-version-5.6.3/
        project-version-5.6.4/
        project-version-5.6.5/
        project-version-5.6.6/
        project-version-6.0.0/
        project-version-6.0.1/
        project-version-6.0.2/
        project-version-6.1.0/
        project-version-6.1.1/
        project-version-6.1.2/
        project-version-6.2.0/
        project-version-6.2.1/
.../trunk

しかし、git リポジトリはこれを表していません。タグは次のようになります。

bash:~$ git tag
project-version-5.2.5
project-version-5.3.0
project-version-5.3.1
project-version-5.3.1@3812 <-- I have no idea, where that is coming from...
project-version-5.4.0
project-version-5.5.0
project-version-5.5.1
project-version-5.5.2
project-version-5.5.3
project-version-5.5.4
project-version-5.6.0
project-version-5.6.1
project-version-5.6.2
project-version-5.6.3
project-version-5.6.4
project-version-5.6.5

タグの欠落に注意してください。それらは何らかの理由でリモートブランチとして保存されています:

bash:~$ git branch -r
  svn/tags/project-version-5.6.5@4990 <-- Yay, random numbers!
  svn/tags/project-version-5.6.6
  svn/tags/project-version-5.6.6@5620 <-- And another one. 
  svn/tags/project-version-6.0.0
  svn/tags/project-version-6.0.1
  svn/tags/project-version-6.0.2
  svn/tags/project-version-6.1.0
  svn/tags/project-version-6.1.1
  svn/tags/project-version-6.1.2
  svn/tags/project-version-6.2.0
  svn/tags/project-version-6.2.1
  svn/trunk

ここで何が起きてるの?

編集:コマンドを追加するのを忘れました:svn2git http://path/to/repository --no-minimize-url --verbose --username='username' --trunk trunk --nobranches --tags tags

Edit2:一見ランダムな数字は、実際にSVNはタグが作成されたリポジトリのリビジョンであることがわかりました。奇妙なことに、20 個のタグのうち 3 個だけがリビジョンを追加されます...

Edit3: 明らかに、問題は を含む 1 つのタグのコメントと関係があります"。それ以降のすべてのタグは、svn2gitエスケープせず"、次のようなことをしようとするため、ブランチとして保存されます

git tag -a -m "blablabla "blablabla"." "project-version-5.6.5@4990" "svn/tags/project-version-5.6.5@4990"

明らかな理由で失敗します。一部のタグでリビジョン番号が追加される理由はまだわかりません。この問題を解決する方法について何か提案があれば、とても感謝しています。

Edit4:エスケープの問題の解決策を見つけました。-sourceのエスケープ関数svn2gitはちょっと変です...単一引用符 ( ') を に置き換えるだけ'\''です。私はこれで終わりです...

4

2 に答える 2

1

@nnnこれらのタグについても疑問に思ったときに、この質問を見つけました。したがって、他の誰かが同じものを探している場合は、git svn マニュアルに記載されています。

git svn がブランチを取得するように構成されている場合 (および --follow-branches が有効な場合)、1 つの SVN ブランチに対して複数の Git ブランチが作成されることがあります。追加のブランチには、branchname@nnn という形式の名前が付けられます (nnn は SVN リビジョン番号) )。これらの追加のブランチは、git svn が SVN ブランチの最初のコミットの親コミットを見つけられない場合に作成され、ブランチを他のブランチの履歴に接続します。

于 2016-01-12T08:15:59.037 に答える
1

二重引用符のエスケープを追加して問題を修正しました。この変更はすでに提案されているgithubため、別のプルリクエストを開始しませんでした。同じ問題を抱えた次のものについては、私がしたことは次のとおりです。

  1. locate migration.rb- 私の場合、これは/var/lib/gems/1.9.1/gems/svn2git-2.2.2/lib/svn2git/migration.rb
  2. の定義を見つけますescape_quotes()(現在、行で見つかります335-337)
  3. .gsub("\"", "\\\"")本体に追加

これがいつか同じ問題を抱えている人に役立つことを願っています:)

于 2013-11-22T13:01:57.817 に答える