2011-01-09 25 views
5

次の問題で苦労しています。私はgit-svnでSVN分岐に従うブランチを作成できません

git svn fetch 

でSVNからリビジョンを取り出す続けるとき、私は次のエラーを取得しています:

[svn-remote "svn"] 
    url = https://somecompany.com/someproduct 
    fetch = trunk:refs/remotes/trunk 
    branches = branches/*:refs/remotes/* 
    tags = tags/*:refs/remotes/tags/* 
:私はSVNの枝のデフォルトのフィルタを使用してリビジョンを取得したため

Found possible branch point: https://somecompany.com/product/trunk 
=> https://somecompany.com/product/branches/deep/branches/product-001, 72666 
Found branch parent: (refs/remotes/deep/branches/product-001) b685b7b92813885fdf 6b8e2663daf884bf504b14 
Following parent with do_switch 
Successfully followed parent 
error: 'refs/remotes/deep' exists; cannot create 'refs/remotes/deep/branches/product-001' 
fatal: Cannot lock the ref 'refs/remotes/deep/branches/product-001'. 
update-ref -m r72667 refs/remotes/deep/branches/product-001 df51920e8f0a53f26507 c2679eb6a9dbad91e0d6: command returned error: 128 

はこれが起こりました

今、以下の行が追加されていますが、遅すぎます。

branches = branches/deep/branches/*:refs/remotes/deep/branches/* 

git svn resetを使用してすべてのコミットを削除することでこれを解決しようとしました。実際に私はgitが正しいことをしようとしているエラーメッセージから見ることができますが、分岐リモート/深い存在のためにすることはできません。

私は2つの解決策を探しました: 1.そのブランチ(リモート/ディープ)を削除しますが、リモートとしてgitによって追跡されているため、その解決策を見つけることができませんでした。 2.そのブランチに関連するすべての履歴を削除します。あまりにも成功しないん:(

誰が私の問題に対処する方法を知ってい

答えて

4

私は最終的に以下の2つの手順を行うことで問題を解決することができました:?

  1. レフリー/リモコンを削除します/深い

しかし、まだフェッチの問題を持っている深い満載のレフリー

  • 削除.git /ログ/レフリー/リモコン/から。私は

    を使用する必要があります通常の枝のための
    branches = branches/*:refs/remotes/* 
    

    と深い枝のため

    branches = branches/deep/branches/*:refs/remotes/deep/branches/* 
    

    。残念なことに、前者の仕様には後者が含まれているので、git-svnが最初の仕様に従って深いブランチを作成しようとすると、「致命的:refをロックできません。

    これまでのところ、最初の「ブランチ」を手動でコメントし、特定のリビジョンを深いブランチでフェッチすることで行いましたが、両方の場合にフェッチするリビジョンが多すぎるため、これは適していません。

    UPD:残りの問題についてはシンプルではなくエレガントな解決策を見つけました。深いブランチへのパスを指定するブランチと、最初のレベルのすべてのブランチを指定するフェッチを使用しています。

  • +0

    1. refs/remotes/deepをpacked-refsから削除する 2. .git/logs/refs/remotes/deepを削除すると、その方法を教えてください。 – ryenus

    +0

    rmまたはdelで使用しているOSに応じて –

    1

    私は非常に似た問題を抱えていて、 "git svn reset"ではなく、 "git reset"で解決しています。あらかじめブランチ設定を更新していない場合は、ブランチポイントを通過するコミットを取得した後、それらを再度取得するためにバックアップする必要があります。それ以外の場合は、親なしでぶら下がっています。

    だから、その後、前と同じように、あなたの枝を更新

    git svn reset -r<revisionnum> 
    

    を実行し、通常通りフェッチあなたのgitのsvnに従ってください。これは私にSVNから全体を再構築するのに何時間も費やしてくれました。

    おそらく、埋め込みブランチをトレースしないようにするには、「無視」機能を調べる必要があります。

    +0

    実際、私はgit svn resetを意味するときに実際にgit resetを書きました –

    関連する問題