Ich möchte einen Pre-Commit-Hook verwenden, der verhindert, dass Entwickler svn: mergeinfo auf Nicht-Root-Verzeichnisse setzen. Das heißt, ich möchte das svn erzwingen: mergeinfo kann nur auf Verzeichnisse wie "Trunk" oder "Zweigniederlassungen/BranchName" festgelegt werden. Entwickler müssen manchmal daran erinnert werden, dass es nicht ratsam ist, ein Unterverzeichnis des Stammverzeichnisses als Zusammenführungsziel zu verwenden (gemäß den Best Practices here). Hat jemand ein solches Hook Script oder weiß wo ich es finden kann? Ich bin in einer Windows-Umgebung, so dass Batch oder Powershell vorzuziehen wäre, aber alles wäre sicherlich hilfreich.Svn pre-commit-Hook, um svn: mergeinfo in Nicht-Root-Verzeichnissen zu sperren
Antwort
Zunächst würde ich empfehlen, Perl oder Python zu verwenden, um die Aufgabe zu erledigen, Windows Batch lässt viel zu wünschen übrig.
Sie können ein Beispielskript von http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ verwenden. Beispiel: verify-po.py Skript überprüft Dateicodierungen und commit-access-control.pl.in überprüft, ob Autor Berechtigungen zum Festschreiben hat. Sie würden wahrscheinlich svnlook diff in Ihrem Skript verwenden (wie in der letzteren), um die Eigenschaften für Verzeichnisse zu erhalten und die entsprechenden Pfade zu durchlaufen, unabhängig davon, ob es sich um Zweige oder Tags mit regulärem Ausdruck handelt.
aktualisieren
enforcer pre-commit hook script gefunden, das, was Sie suchen zu sein scheint.
Was dieses Skript tut, ist es svnlook nutzt in die Transaktion zu spähen Fortschritt ist. Wie es durch die Transaktion durchgeht, ruft es zu einer Reihe von Hooks, die dem Repository Administrator ermöglichen, zu untersuchen, was auf geht und entscheiden, ob es akzeptabel ist.
Es enthält mehrere Methoden und verify_property_line_added() unter ihnen, da sie für jede Zeile aufgerufen ist, die auf eine Eigenschaft auf eine Datei hinzugefügt wird.
Sieht so aus, als ob dies die wahrscheinlichste Lösung und somit der Kopfgeld-Gewinner sein wird, es sei denn jemand anders kann sich etwas einfallen lassen. – Charles
Übrigens, nach Ihrer Frage fing ich an, sich für svn hooks zu interessieren, und ich werde einige implementieren (beginnend mit dem Verbieten von Commits ohne Log-Nachricht) und wahrscheinlich die Checking-Eigenschaften beim Commit erreichen - dann wird hier ein weiteres Update eingefügt . – pmod
Wenn Sie CPAN auf dem Server:
https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl
Wenn nicht (basierend auf http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969):
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q '\[override] ';) then
# Get list of paths which have changed
TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS")
# Filter those which are allowed: /trunk, /branches/*,...
TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$")
# Iterate over all paths, which are not allowed to have mergeinfo
while IFS= read -r TXN_PATH; do
ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-)
MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null)
if [ ! "$MERGEINFO" = "" ]; then
echo " Cannot merge into directory that is not trunk or a branch:" >&2;
echo " $ELEM_PATH" >&2;
echo " Override by using [override]." >&2;
exit 1;
fi
done <<< "$TXN_PATHS"
# echo "Merge info check: OK"
fi
- 1. SVN post-commit - Erlaubnis .svn verweigert/sperren
- 2. SVN Mergeinfo Eigenschaften auf anderen Pfaden als der Arbeitskopie Wurzel
- 3. svn: mergeinfo Einträge von vor dem Zweig wurde erstellt
- 4. Fehler: Abruf von Mergeinfo wird von 'svn: //IP.Address' nicht unterstützt?
- 5. svn: Abfrage von Mergeinfo erfordert Version 3 des FSFS-Dateisystemschemas;
- 6. Konvertiere einen SVN-Checkout, um git (git-svn) zu verwenden
- 7. SVN - Zugang zu '!/SVN/[Repo-name]/svn/me' verboten
- 8. ein in Svn 1.7.4
- 9. migrieren svn zu git mit svn external
- 10. svn: vim verwenden, um Konflikte zu verschmelzen
- 11. Speichert Git-Svn Svn Passwörter?
- 12. svn Frage zu Stamm
- 13. SVN Checkout mit dem Protokoll svn + ssh
- 14. Import SVN Repo in Visual SVN importiert
- 15. Nicht anzeigen svn: externals in svn status
- 16. SVN checkout mit SVN-Protokoll
- 17. Tortoise SVN automatische Sperre
- 18. brauchen ein Shell-Skript zu tun Svn Update, Svn löschen und SVN-Import
- 19. Kann ich Svn Rebase zu einer bestimmten SVN-Revision git? (Ähnlich wie svn up -r ...)
- 20. SVN zu HG: Jetzt Ausgabe SVN Revisionsnummer von HG changeset
- 21. Svn log - svn: '.' ist keine Arbeitskopie
- 22. git-svn display svn repository url
- 23. Failing svn gesteuerte Verzeichnis zu ignorieren, wenn svn update
- 24. Git-svn fusionieren zwei SVN-Filialen
- 25. von VSS zu SVN bewegen
- 26. git-svn Merge 2 Svn Filialen
- 27. Svn Kasse und Update ohne .svn-Verzeichnis
- 28. Eclipse (Kepler) Was ist erforderlich, um SVN Connector zu aktivieren: Unter "Team-> SVN"?
- 29. Wann nicht "svn commit && svn update"?
- 30. Hudson: Wie benutze ich einen parametrisierten Build, um Svn Checkout und Svn-Tag zu tun?
Streng Neugier - verwenden Sie Subversion 1.5 oder 1.6? (Ich habe auch in den Händen von svn: mergeninfos auf alle Arten von Verzeichnissen/Dateien aufgrund von Zusammenführungen zu/von Nicht-Root-Verzeichnissen, aber auf 1.5) –
Wir sind auf 1,6 leiden. Die Probleme, die ich habe, sind nicht auf die alten 1.5 Bugs zurückzuführen, bei denen der SVN-Client Mergeinfo auf alles in Sichtweite gesetzt hat. Die Probleme sind eher auf einen "Benutzerfehler" zurückzuführen, bei dem ein Benutzer eine Zusammenführung unter Verwendung eines Nicht-Stammverzeichnisses wie "trunk/mySubProject" als Zusammenführungsziel durchführt und daher Zusammenführungsinformationen für dieses Verzeichnis einstellt. Dies führt zu einer Verschmelzung der nachfolgenden Zusammenführungen, wie Sie sicher wissen. –
In der Tat - danke für die Info. Wir sind erst seit kurzem auf 1.6, also hatte ich keine Zeit zu beobachten, wie sich die Dinge veränderten. Ich muss jedoch das gleiche Problem angehen. + Favoriten –