it-swarm.com.de

Wie kann ich Sperren in Subversion rekursiv freigeben?

Ich habe ein Problem mit der Versionskontrolle in Subversion. Ich habe eine Arbeitskopie von Respository ausgecheckt und für alle Dateien Sperren erhalten. Dann habe ich, ohne die Sperren zu lösen, den Ordner von der Festplatte gelöscht.

  • Ich kann den Ordner nicht aus dem Repository löschen, da er eine Sperre hat
  • Wenn Sie und ich versuchen, die Sperren rekursiv zu lösen, heißt es, dass keine Sperren aufzuheben sind.
  • In der Ansicht "Repository durchsuchen" kann ich die Sperren nur für bestimmte Ordner aufheben, nicht jedoch für Ordner rekursiv.

Wie kann ich die im Repository befindlichen Sperren aufheben? Ich verwende TortoiseSVN unter Windows. Gibt es einen Befehl, um Sperren für einen Ordner rekursiv zu brechen?

48
vikmalhotra

OK ich habe es. Hier ist was für mich gearbeitet hat.

  • Checke eine Arbeitskopie aus
  • Gehen Sie dann im Windows Explorer-Menü auf TortoiseSVN -> Check for Änderungen ...
  • Klicken Sie auf die Schaltfläche Repository prüfen
  • Wählen Sie Alle Dateien aus, klicken Sie mit der rechten Maustaste und wählen Sie die Unterbrechungssperre aus
  • Löschen Sie die Arbeitskopie und das Repository onein. Voila! :)
56
vikmalhotra

Bei einer SVN-Bereinigung wird auch die Sperre aufgehoben:

$ svn cleanup
31
rgubby

Vom Vorschub-Verriegelungsbereich

$ svn status -u
M              23   bar.c
M    O         32   raisin.jpg
       *       72   foo.h
Status against revision:     105
$ svn unlock raisin.jpg
svn: 'raisin.jpg' is not locked in this working copy

Das bedeutet einfach, dass die Datei nicht in Ihrem aktuellen Arbeitsverzeichnis gesperrt ist Wenn sie jedoch noch auf Repository-Ebene gesperrt ist, können Sie das Entsperren erzwingen ("Aufheben der Sperre").

$ svn unlock http://svn.example.com/repos/project/raisin.jpg
svn: Unlock request failed: 403 Forbidden (http://svn.example.com)
$ svn unlock --force http://svn.example.com/repos/project/raisin.jpg
'raisin.jpg' unlocked.

(was Sie über die TortoiseSVN-Benutzeroberfläche getan haben)

17
VonC

Wenn jemand anderes die Dateien aus der Ferne gesperrt hat, habe ich festgestellt, dass TortoiseSVN 1.7.11 zum Ausführen der folgenden Schritte erfolgreich in meiner Arbeitskopie entsperrt wurde. (ähnlich der Antwort von vikkun)

  • Klicken Sie mit der rechten Maustaste auf die Arbeitskopie> Auf Änderungen prüfen
  • Klicken Sie auf die Schaltfläche Repository prüfen
  • Wählen Sie die Dateien aus, die Sie entsperren möchten
  • Rechtsklick> Sperre abrufen
  • Aktivieren Sie das Kontrollkästchen "Diebstahl sperren"
  • Nachdem die Sperre gestohlen wurde, wählen Sie sie erneut aus
  • Rechtsklick> Sperre aufheben

Dateien in Arbeitskopie sollten jetzt entsperrt sein.

6
Dan

Wenn Sie nicht über Administratorzugriff auf den svn-Computer verfügen und das Tool 'svnadmin' verwenden können, scheint dies die beste Option zu sein:

  1. Überprüfen Sie das problematische Verzeichnis mit svn checkout --ignore-externals *your_repo*.
  2. Verwenden Sie svn status --show-updates im ausgecheckten Repository, um herauszufinden, welche Dateien möglicherweise gesperrt sind (wenn jemand die Dokumentation zur Bedeutung der Statuscodes gefunden hat, kommentieren Sie dies bitte).
  3. Verwenden Sie svn unlock --force *some_file* für die unter 2 gefundenen Dateien.

Ich habe den folgenden Einzeiler verwendet, um 2. und 3 zu automatisieren:

svn status -u | head -n -1 | awk '{ print $3 }' | xargs svn unlock --force
3
Apteryx

Der Repository-Administrator kann die Sperren (rekursiv) entfernen, indem er Hunderte von Dateien in einem problematischen Verzeichnis verarbeitet. Dies kann jedoch nur durch Skripten erfolgen, da für svnadmin rmlocks keine Option --recursive vorhanden ist.

$repopath=/var/svn/repos/myproject/;
$problemdirectory=trunk/bikeshed/
IFS=$'\n'; for f in $(Sudo svnadmin lslocks $repopath $problemdirectory \
| grep 'Path: ' \
| sed "s/Path: \///") ; \
do Sudo svnadmin rmlocks $repopath "$f" ; done

Diese Lösung funktioniert mit Dateinamen, die Leerzeichen enthalten.

2
Greg Rundlett

Wenn Sie Zugriff auf das Tool svnadmin auf dem Repo-Server haben, können Sie mit dieser Alternative alle Sperren entfernen (basierend auf dem von VonC bereitgestellten Skript).

svnadmin lslocks <path_to_repo> |grep -B2 Owner |grep Path |sed "s/Path: \///" | xargs svnadmin rmlocks <path_to_repo>
2

Bei dem Versuch, das Skript von oben auszuführen, wie ursprünglich bereitgestellt, erhielt ich eine Fehlermeldung, als versucht wurde, die Variablen festzulegen: ./scriptname: line1: =/svn/repo/path /: Keine solche Datei oder Verzeichnis./Skriptname: Zeile2: = Verzeichnis /: Keine solche Datei oder Verzeichnis

Ich entfernte das '$' aus den ersten beiden Zeilen und das funktionierte danach perfekt.

repopath=/var/svn/repos/myproject/;
problemdirectory=trunk/bikeshed/
IFS=$'\n'; for f in $(Sudo svnadmin lslocks $repopath $problemdirectory \
| grep 'Path: ' \
| sed "s/Path: \///") ; \
do Sudo svnadmin rmlocks $repopath "$f" ; done
0
EricMG

Das Löschen der Sperrdatei in .svn hat für mich nicht funktioniert, da ich nach dem Versuch, die Datei zu aktualisieren, eine fehlerhafte Prüfsumme erhalten hat.

Ich habe nach dem Ausführen von svn-Bereinigung im Verzeichnis die folgende Nachricht erhalten:

svn: Im Verzeichnis '' svn: '.svn/tmp/text-base/Dateiname.svn-base' kann nicht nach 'Dateiname.3.tmp' kopiert werden: Keine solche Datei oder Verzeichnis

Also habe ich meine Datei nach .svn/tmp/text-base kopiert und den Namen in file_name.svn-base geändert. Dann haben Bereinigung und Update gut funktioniert.

0
Greg