2017-04-18 16 views
1

git svn cloneを使用して、SVNリポジトリをBitbucketに移行しています。それは、それが影響を受けたブランチがもはやSubversionに存在しないため、複製しようとしているリビジョンが存在しないときにクローンが失敗するようです。git svnクローンが削除されたブランチのために失敗する

私は

git svn clone -authors-file=authors.txt https://my.svn.com/project001 project001 

ログをやっSVNを探る

{...}  
    r12 = f16b3d1014109ccd1c7e24dd70bfa9df45362e48 (refs/remotes/git-svn) 
      M  trunk/xx.java 
      M  trunk/xx.java 
    r13 = 9e61cda58fb2f5afa0a97277a10fd92365f3d1e3 (refs/remotes/git-svn) 
      M  trunk/xx.java 
      M  trunk/xx.java 
    r14 = f9964ce0a8081cf0bf22ee8a5ba32afe725323c3 (refs/remotes/git-svn) 
      M  trunk/xx.java 
    r15 = ac1f5c4a61346601dd85fbca55bd585ce5fc358d (refs/remotes/git-svn) 
    fatal: .git\svn\refs\remotes\origin\https;C:\Program Files\Git\index: index file open failed: Invalid argument 
      (in cleanup) update-index -z --index-info: command returned error: 128 
    W: +empty_dir: branches/https:/my.svn.com/project001/branches 

はそうでないこと(誤ってhttps:/my.svn.com/project001/branchesという名前の)リビジョン#16は、ブランチの作成を参照しているようだレポを示しますもうそれは存在しません(リビジョン#18を削除しました)。

私はこの問題が原因だと思いますが、ドキュメントを読んだ後には、私はgit svnクローンでこれを無視する方法を見つけることができませんでした。可能であれば私は自動化の方法を探しています。なぜなら、数GBのSVN reposを移行するためのスクリプトを書く必要があるからです。

+0

これはワンタイムマイグレーションで、Gitだけが使用されているのですか、GitクローンからSVNリポジトリにコミットしたいのですか? – Vampire

+0

@ヴァンパイアこれは一回の移行です。 – Averroes

答えて

2

ワンタイム移行の場合git-svnではありませんレポジトリまたはリポジトリのコンバージョンに適したツールです。 Gitを既存のSVNサーバーのフロントエンドとして使用する場合は便利ですが、一度の変換ではではなくを使用してください。git-svnを使用してください。svn2gitこれはこのケースにはるかに適しています。

svn2gitというツールがたくさんありますが、おそらく最も良いのはhttps://github.com/svn-all-fast-export/svn2gitのKDEです。そのsvn2gitツールを使用することを強くお勧めします。それは私がそこで利用できると知っている最高です、そして、それはあなたがそのルールファイルでできることに非常に柔軟です。

svn2gitのルールファイルを、現在のSVNレイアウトから必要な結果を得るように簡単に設定できます。

svnevereverからhttp://blog.hartwork.org/?p=763までは、SVNリポジトリの履歴をGitに移行する際の履歴を調べるのに最適なツールです。

  • 歴史ははるかに良いとクリーンな再構築されます。


    にもかかわらずgit-svnは、ここでは、優れている、その柔軟性のほかに代わりgit-svnのKDE svn2gitを使用して、なぜいくつかの更なる理由がありで開始することが容易ですsvn2git(正しいものが使用されている場合)これは、特に分岐やマージなどの複雑な履歴の場合に当てはまります

  • タグは実際のタグであり、Gitのブランチではありません
  • git-svnタグには余分な空きコミットが含まれているため、ブランチには含まれないため、fetchはデフォルトでコマンドに--tagsを渡してから取り込まれます。彼らは
  • に属しどこ適切svn2gitタグを使用すると、SVNでレイアウトを変更した場合、あなたが簡単にあなたはまた、簡単に複数のGitリポジトリに1つのSVNリポジトリを分割することができsvn2gitと歴史最終的に
  • を失うことになるgit-svnで、svn2gitでこれを設定することができます
  • 又は容易1つのGitのリポジトリに同じSVNルートにおける複数のSVNリポジトリを組み合わせる
  • 変換が速く正確svn2gitgit-svn
0123よりも無数倍であります

git-svnが悪く、KDE ​​svn2gitが優れている理由はたくさんあります。 :-)

+0

ありがとうございます。私はsvn2git(kdeのものではなく、nirvdrum/svn2gitはWindows上にあるため)を使用しようとしましたが、再発した "問題" 'Runningコマンドで固まってしまったようです:git checkout -f master error:pathspec 'master'は' – Averroes

+1

nirvdrum' svn2git'は、 'git-svn'クローンの後にいくつかのものを修正するだけで、ほとんどの同じ欠点に苦しんでいます。私もWindows上でKDE 'svn2git'を使用しますが、ここでは問題ありません。 – Vampire

+0

ありがとう!私はKDE svn2gitを試してみるつもりです。 – Averroes

関連する問題