Ich möchte wissen, ob es eine Möglichkeit gibt, den Standard-Push zu deaktivieren, aber den Standard-Pull beibehalten, wenn Sie Mercurial verwenden. Ich möchte das Master-Repository nicht unbeabsichtigt verschmutzen, indem ich unabsichtlich aus einem experimentellen Repository schiebe.Kannst du Standard-Push verhindern, aber Pull zulassen?
Antwort
Ihre Lösung ist wahrscheinlich die schnellste und ist sicherlich effektiv. Wenn es irgendeine offizielle Art und Weise wäre es ein preoutgoing
Haken werden:
[hooks]
preoutgoing = bash -c 'read -p "Really push to $HG_URL? " -n 1 RESP ; [ "$RESP" == "y" ]'
, die Sie fragt, ob Sie schieben wollen und die URL zur Verfügung stellen, auf die sie als Erinnerung gehen würde.
Ich konnte das lösen, indem ich folgendes in meine .hg/hgrc
Datei setzte, aber ich fragte mich, ob es einen besseren/offiziellen Weg gibt.
[paths]
default = http://server/hg/repo
default-push = .
nie Abwärts Stimme gemeint, klickte aus Versehen. :( – sojin
Diese Antwort funktioniert fast, oder funktioniert meistens, aber kann brechen, wenn "." Ein Repo enthält - zB wenn Sie Ihr Home-Verzeichnis haben. Ich habe es etwas weiter unten ausgearbeitet, um ein solches Problem zu vermeiden. –
@KrazyGlew Ich glaube nicht, dass das notwendig ist. Er sagte, er mache das in '.hg/hrc', also ist es in Repo und damit relativ zur Repo-Wurzel, also würde das immer" zu sich selbst drücken ", was nie etwas tun sollte. –
Ich mag Ihre eigene Antwort paths.default-push = .
der Einstellung - es ist einfach und es ist klar, dass es funktionieren wird.
Eine andere Möglichkeit wäre ein Pre-Push-Haken sein: (. Hier bin ich die Vorteile, wie Sie einen langen Wert über mehrere Zeilen aufteilen, indem sie in einem Mercurial Konfigurationsdatei Einrücken)
[hooks]
pre-push = if [ $HG_PATS == "[]" -o $HG_PATS == "['default']" ]; then
read -p "Really push to default? " -n 1; echo
[ "$REPLY" == "y" ]
fi
Eine Push-to-Standard sieht diese
% hg push
Really push to default? n
warning: pre-push hook exited with status 1
, wo ich die n
getippt. Der Hooks prüft auf keine Argumente ($HG_PATS == "[]"
) und einen Standardwert als Argument ($HG_PATS == "['default']"
) und wird Sie nur in diesen Fällen auffordern. Die Variable $HG_PATS
wurde in Mercurial 1.6 eingeführt.
PS: Ich habe gesehen, dass Sie die Frage aktualisiert und nach einer Lösung in PowerShell gefragt haben, aber ich fürchte, ich weiß nichts über diese Sprache. Sie sollten jedoch in der Lage sein, die wichtigen Konzepte aus dieser Antwort selbst herauszuheben.
This ist ziemlich gut, aber beseitigt es nicht vollständig die Push-Fähigkeit?Ich möchte pushen können; Ich möchte nur sicher gehen, dass ich nicht versehentlich auf den Standard schiebe. – moswald
mos: Du hast Recht ... Ich habe die Antwort aktualisiert, damit du wieder pushen kannst und ich habe auch das Beste aus Ry4ans Antwort eingebaut. –
Danke für das Update. Ich denke, es ist Zeit für mich, eine neue Frage zu stellen: Wie bekomme ich einen Powershell-Befehl, um in einem hg-Hook zu arbeiten? – moswald
Die Antwort zuvor geschrieben, in hgrc
ist fast, aber nicht ganz richtig zu setzen. Es kann z.B. wenn Sie Ihr Home-Verzeichnis hg.
Hier ist die meine aktuelle BKM Standard-Push zu deaktivieren:
ich die Idee der Einstellung paths.default-push verschönert haben in ~/.hgrc, so dass es ein bisschen mehr Selbst Dokumentieren und weniger Fehler -prone - da, wie ich unten anführe, die Standardeinstellung push = ist. Deaktiviert nicht immer das Drücken.
in ~/.hgrc
[paths]
# my main project master repo
project-master = ...
#DISABLING IMPLICIT PUSH
# to prevent embarassment from accidentally pushing to the project master repo
# instead of, in my case, a repo that has fine grain commits
# that the rest of the team does not want to see in the project master repo
#default-push = .
# this works mostly, but NOT if you use hg on your home directory
# since '.' in ~/.hgrc seems to be interpreted as -R ~
#default-push = /NONEXISTENT_default-push_--_must_specify_push_target_explicity
# this works ok, but I can clean up the error message using blanks
# keeping this around because blanks in pathnames confuses many UNIX tools
default-push = /'NONEXISTENT default-push -- must specify push target explicitly'
# this amounts to disabling implicit push targets.
Sie sind wahrscheinlich besser dran, das in '.hg/hgrc' (die pro-Repo-hgrc) für Ihre experimentellen Repos anstatt in' ~ .hgrc' (die pro Benutzer hgrc). Das ist sicherlich das, was MG oben angedeutet hat. Wenn das der Fall ist, ist "." Vollkommen sicher. –
~/.hrc ist genau das, was * ich * will. Ich kloniere Repos sehr, und in diesen Klonen mit frisch gemachten Voreinstellungen möchte ich verhindern, dass ich versehentlich an den falschen Ort zurückschiebe. Das Problem bei der Ausführung in
Übrigens bin ich sehr glücklich mit der Einstellung Standard-Push in ~/.hgrc. Es hat einige Verlegenheit verhindert. Allerdings möchte ich den Standard immer noch vollständig überschreiben - weil ich mir angewöhnt habe, "hg push default" einzugeben. Was NICHT ist, was Sie tun möchten, wenn Ihr Workflow in einen Bereitstellungsbereich verschoben werden soll. Eine andere Frage, vielleicht ... –
Hey, ich mag dieses hier, es ist ähnlich wie bei Martin, aber gibt mir die Option, fortzufahren, wenn ich die URL manuell in die Befehlszeile eintippe. Wenn Sie mir sagen können, wie man das in Powershell macht, sind wir im Geschäft. – moswald
Ich denke, der Befehl für komplexe Skripts in Powershell ist wubi.exe. Worüber ich meine, Entschuldigung, ich weiß Powershell nicht. ;) –
Ich habe ziemlich viel experimentiert, konnte es aber nicht ganz zum Laufen bringen. Ich werde weiter wegstecken und hier updaten, wenn ich es löse. – moswald