2011-01-09 6 views
5

Ich habe Probleme mit dem folgenden Problem. Wenn ich weiterhin Revisionen von SVN mitgit-svn kann keine Verzweigung erstellen, um SVN-Verzweigungen zu folgen

git svn fetch 

Holen Ich erhalte den folgenden Fehler:

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 

Dies geschah, weil ich Revisionen wurde Holen mit dem Standardfilter für SVN-Zweige:

[svn-remote "svn"] 
    url = https://somecompany.com/someproduct 
    fetch = trunk:refs/remotes/trunk 
    branches = branches/*:refs/remotes/* 
    tags = tags/*:refs/remotes/tags/* 

Jetzt habe ich die folgende Zeile hinzugefügt, aber es ist zu spät:

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

Ich habe versucht, dies zu beheben, indem Sie git svn reset verwenden, um alle Commits zu entfernen. Eigentlich kann ich anhand der Fehlermeldung sehen, dass git das Richtige versucht, aber nicht wegen der Nebenstellenfernbedienung/tiefes existieren kann.

Ich habe versucht, nach 2 möglichen Lösungen zu suchen: 1. Entfernen Sie diesen Zweig (remotes/deep), aber da es von Git als Remote verfolgt wird, konnte ich keine Lösung dafür finden. 2. Entfernen Sie den gesamten Verlauf für diesen Zweig. Kein Erfolg zu :(

Weiß jemand, wie man mit meiner Frage befassen

Antwort

4

Ich habe endlich in der Lage gewesen, das Problem zu beheben, indem Sie die folgenden zwei Schritte ausführen:?

  1. Entfernen refs/remotes/tief aus gepacktem refs
  2. Entfernen .git/logs/refs/remotes/tief

aber immer noch das Problem mit zu holen. ich brauche zu verwenden

branches = branches/*:refs/remotes/* 

für normale Filialen und

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

für tiefe Äste. Leider enthält die frühere Spezifikation das spätere, daher bekomme ich den Fehler "fatal: Kann Ref nicht sperren" refs/remotes/deep '", da git-svn versucht, tiefe Verzweigungen gemäß der ersten Spezifikation zu erstellen.

Bisher mache ich das manuell, indem ich die ersten "Zweige" manuell kommentiere und bestimmte Revisionen mit tiefen Zweigen abrufe, aber das ist keine gute Option, da es zu viele Revisionen für beide Fälle gibt.

UPD: Ich habe die einfache, aber nicht elegante Lösung für das verbleibende Problem gefunden. Ich verwende Zweige, um Pfade zu tiefen Verzweigungen zu spezifizieren und fetch, um jeden Zweig der ersten Ebene zu spezifizieren.

+0

bezüglich 1. Entfernen refs/remotes/tief aus gepackten-Refs 2. Entfernen .git/logs/refs/remotes/tief könnten Sie bitte erklären, wie das zu tun? – ryenus

+0

von rm oder del abhängig von der OS, die Sie verwenden –

1

Ich hatte ein sehr ähnliches Problem, und festgestellt, dass "Git svn zurückgesetzt", nicht "git reset" behoben. Wenn Sie Ihre Zweigstellenkonfiguration nicht zuvor aktualisieren, müssen Sie nach dem Abrufen eines Commits, das einen Verzweigungspunkt passiert, eine Sicherung durchführen, um sie erneut abzurufen. Sonst baumeln sie ohne Eltern.

So aktualisieren Sie Ihre Zweige wie zuvor, dann laufen

git svn reset -r<revisionnum> 

und folgen Sie mit Ihrem git svn holen als normal. Das hat mir viele Stunden des Wiederaufbaus der ganzen Sache von SVN erspart.

In Ihrem Fall müssen Sie wahrscheinlich auch die "Ignorieren" -Funktionen untersuchen, um den eingebetteten Zweig nicht zu verfolgen.

+0

Eigentlich habe ich versehentlich git reset geschrieben, wenn ich git svn reset meinte –

Verwandte Themen