Wie stelle ich git so ein, dass es nach jedem Commit für das lokale Repo automatisch auf ein Remote-Repo pusht (einschließlich der automatischen Bereitstellung meiner Passphrase)?
84
Wie stelle ich git so ein, dass es nach jedem Commit für das lokale Repo automatisch auf ein Remote-Repo pusht (einschließlich der automatischen Bereitstellung meiner Passphrase)?
Antworten:
Stellen Sie zunächst sicher, dass Sie manuell pushen können, ohne Ihr Kennwort anzugeben. Wenn Sie über HTTP oder HTTPS pushen, müssen Sie entweder eine
.netrc
Datei mit den Anmeldedaten erstellen oder Ihren Benutzernamen und Ihr Kennwort zur URL für die Fernbedienung hinzufügen . Wenn Sie SSH verwenden, können Sie entweder ein Schlüsselpaar erstellen , in dem der private Schlüssel nicht ein Passwort, oder hat die Verwendungssh-agent
auf Ihren privaten Schlüssel zwischenspeichern .Dann sollten Sie eine ausführbare (
chmod +x
) Datei erstellen.git/hooks/post-commit
, die Folgendes enthält:... diese Zeile anpassen, wenn Sie auf eine andere Fernbedienung als
origin
oder einen anderen Zweig als verschieben möchtenmaster
. Stellen Sie sicher, dass Sie diese Datei ausführbar machen.quelle
.git/config
mit dem Präfix angegeben istfeature/xy/
.Wenn Sie mehr als den Hauptzweig verwenden, möchten Sie möglicherweise den aktuellen Zweig automatisch verschieben. Mein hook (
.git/hooks/post-commit
) sieht so aus:Es schiebt den aktuellen Zweig, wenn es den Zweignamen mit git symbolic-ref bestimmen kann.
" Wie erhalte ich den aktuellen Filialnamen in Git? " Behandelt diese und andere Möglichkeiten, um den aktuellen Filialnamen zu erhalten.
Ein automatischer Push für jeden Zweig kann störend sein, wenn Sie in Task-Zweigen arbeiten, in denen eine Wurstherstellung erwartet wird (Sie können nach dem Drücken nicht einfach die Basis wiederherstellen). Der Hook schiebt also keine Zweige, die mit einem definierten Suffix enden (im Beispiel "_local").
quelle
#!/bin/sh
, damit es funktioniert. Ansonsten hieß es immer wieder :error: cannot run .git/hooks/post-commit: No such file or directory
. Vielen Dank, ich mag Ihre Lösung am besten.Erstellen Sie im Verzeichnis .git / hooks eine Datei mit dem Namen "post-commit" mit dem Inhalt "git push". Wenn Sie jedoch automatisch ein Kennwort angeben möchten, sind Änderungen erforderlich.
quelle
Mit diesem Git-Autopush- Skript können Sie einen Post-Commit-Hook einrichten, ähnlich dem, was unter " Wie konfiguriere ich das automatische Pushing? " Empfohlen wurde .
Für die Passphrase müssen Sie jedoch a ausführen
ssh-agent
.quelle
ssh-agent
, verwenden Sie einfach eine andere Passphrase-wenigergit
-nur-ssh
Schlüssel :ssh-keygen -t ed25519 -f ~/.ssh/id_pushonly
.echo $'\nHost pushonly\nHostname DESTINATION\nIdentityFile ~/.ssh/id_pushonly\n' >> ~/.ssh/config
. AufDESTINATION
configuregit-shell
wie in gezeigt superuser.com/a/444899/72223 mit pubkey aus~/.ssh/id_pushonly.pub
. Die benötigtegit
-URL ist so etwas wiegit@pushonly:path/to/repo.git
. Um Debug:ssh git@pushonly COMMAND
laufen mussgit-shell -c COMMAND
aufDESTINATION
. ZuCOMMAND
sehenman git-shell
-t ed25519
? Ich benutze im Allgemeinen-t rsa
, obwohl vor kurzem ich hinzufügen müssen ,-m PEM
umssh-keygen
( stackoverflow.com/a/53645530/6309 , stackoverflow.com/a/53729009/6309 ).ed25519
weil es kurze und handliche Zeilen für gibt~/.ssh/authorized_keys
. Es ist auch sehr interessant, was DJB über ed255519 schreibt : Sicher gegen Seitenkanäle (Spectre), weniger CPU usw. Übrigens, wennsshd
ich mit alten s zu tun habe , erstelle ich normalerweise einen speziellen Schlüssel für sie und konfiguriere diesen dann in~/.ssh/config
.Hier finden Sie eine einfache Anleitung zum Drücken / Ziehen ohne Passphrase über ssh für Benutzer von Linux und Windows (git bash).
Auf Ihrem Kunden:
Überprüfen Sie, ob Sie SSH-Schlüssel generiert haben:
Wenn Sie keinen Schlüssel haben (zwei Zeilen "ls: kann nicht auf ... zugreifen"), generieren Sie einen neuen. Wenn Sie eine der Tasten haben, überspringen Sie diesen Schritt.
Kopieren Sie Ihren Schlüssel mit git auf einen Remote-Server, von dem Sie ihn ziehen oder drücken möchten:
Hinweis: Während dieses Vorgangs müssen Sie ein Kennwort eingeben. Danach werden Ihre Pull / Push-Vorgänge kein Passwort mehr anfordern.
Hinweis 2: Sie müssen sich mindestens einmal mit Benutzername beim Server anmelden, bevor Sie dieses Verfahren anwenden können (das Ausgangsverzeichnis, in das SSH-Schlüssel kopiert werden, wird bei der ersten Anmeldung erstellt).
quelle
Hier ist ein Bash-Skript, mit dem Git automatisch
push
zu einem Remote-Repo wechselt$ cd /path/to/your/repository
dann$ push
Fügen Sie dieses Skript beispielsweise in eine Datei ein
$HOME/.ssh/push
Verknüpfen Sie es mit dem
/bin
Verzeichnis, damit es mit nur einem$ push
Befehl aufgerufen werden kannquelle
Wenn Sie Husky verwenden, wird Ihre
post-commit
Hooks-Datei standardmäßig überschrieben .Wir verwenden diesen Befehl in package.json, um Commits automatisch neu zu starten und an den Master zu senden. (Erster Lauf
yarn add --dev git-branch-is
.)quelle