Ich führe das zentrale Quecksilber-Repository aus und verstehe, dass der normale "Push" -Befehl beendet wird, wenn der Remote-Benutzer versucht, mehrere "Köpfe" in mein zentrales Repository zu zwingen. Die Absicht ist, dass der Remote-Benutzer zuerst zieht und zusammenführt, bevor er erneut versucht, zu pushen.
Die Verwendung hg push --force
überschreibt dies jedoch. Ich möchte dieses Verhalten blockieren.
Ich verwende derzeit das hgwebdir.cgi
Plus einige Apache-Auth-Sachen, um die Fähigkeit der Benutzer zum Ziehen und Schieben einzuschränken.
BEARBEITEN: Ein pretxnchangegroup-Hook hat das Problem gelöst. Haken funktionierte:
#!/bin/bash
# force-one-head
# add the following to <repository>/.hg/hgrc :
# [hooks]
# pretxnchangegroup.forceonehead = /path/to/force-one-head
if [[ `hg heads -q | wc -l` -gt 1 ]]; then
echo "There are multiple heads."
echo "Please 'hg pull' and get your repository up to date first."
echo "Also, don't 'hg push --force' because that won't work either."
exit 1
fi
hg push
, wird Mercurial abgebrochen, bevor etwas gepusht wird und Ihr Skript nicht ausgeführt wird. Wenn dies hg push --force
der Fall ist, wird Ihr Skript ausgeführt, die Zeile ist jedoch redundant.
hg heads -q
im obigen Skript durch hg heads -q default
.