/ / Checkout automatisch nach Push - Git

Kasse automatisch nach Push - Git

Grundsätzlich möchte ich git nur als eine Art versioniertes Einweg-FTP verwenden.

Ich habe ein lokales Git Repo local/. Ich möchte es schieben server:remote/, und ich möchte, dass danach alle Dateien ausgecheckt werden remote auf dem Server (identisch mit dem, was er lokal sieht, vorausgesetzt ich git-added alles)

Mit anderen Worten, ich möchte dieses Verhalten von Mercurial reproduzieren:

[hooks]
changegroup.update = hg update && echo updated successfully.

Ich habe Tonnen von Tutorials gefunden, die dies mit zwei machenseparate Verzeichnisse auf der Serverseite, aber ich w√ľrde es vorziehen, ein einziges zu verwenden. Ist das m√∂glich? Wenn ich es versuche, erhalte ich die Nachricht, unter der ich nicht wirklich verstehe.

Was wäre die beste Vorgehensweise, um dies zu tun? (Wenn nötig, können Sie davon ausgehen, dass ich auf dem Server nie etwas ändere --forceetwas zu tun, wäre kein Problem.)

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require "git reset --hard" to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set "receive.denyCurrentBranch" configuration variable to
remote: error: "ignore" or "warn" in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: "receive.denyCurrentBranch" configuration variable to "refuse".

Antworten:

2 f√ľr Antwort ‚ĄĖ 1

Ich möchte dieses Verhalten von Mercurial reproduzieren:

Mit k√ľrzlich Git-Versionen unterst√ľtzt die in der Fehlermeldung erw√§hnte Einstellung jetzt einen neuen Wert:

[receive]
denyCurrentBranch = updateInstead

Dies sollte Ihnen genau das Verhalten geben, das Sie wollen.


Ich habe Unmengen von Tutorials gefunden, die dies mit zwei separaten Verzeichnissen auf der Serverseite tun

Alternativ können Sie immer noch Verwenden Sie die meisten dieser Tutorials, indem Sie zu einem anderen wechseln Ast (d. h. nicht zu dem gerade ausgecheckten, sondern zu etwas ähnlichem deploy).

git push origin master:deploy

Jetzt k√∂nnen Sie √§hnliche (oder sogar die gleichen) verwenden post-receive oder post-update Hooks, als w√ľrden Sie in ein nacktes Repository pushen. Zum Beispiel k√∂nnte der Haken laufen git merge --ff-only deploy oder auch git reset --hard deploy.