Wir haben eine Website, auf der alle PHP/HTML/JS/CSS/etc-Dateien in einem Git-Repository gespeichert sind.
Derzeit haben wir drei Arten von Computern (oder Anwendungsfällen) für das Repository.
So sind wir momentan:
local: git Push Origin master
local: password: ********
local: ssh [email protected]
webserver: password: ********
webserver: cd ~/domain.com/
webserver: git pull Origin master
Meine Frage ist also: Gibt es eine Möglichkeit, dass ich von meinem lokalen Computer aus direkt auf den Webserver schieben kann?
dh.
local: git Push Origin master
local: password: ********
local: git Push webserver master
local: password: ********
Ja, Sie können direkt auf Ihren Webserver pushen, aber ich würde es nicht empfehlen, da Sie nur auf Repositorys pushen sollten, die mit dem Argument --bare geklont wurden. Ich würde das Git Hook System verwenden, um das Repository auf dem Webserver automatisch vom Haupt-Repository aktualisieren zu lassen. Schauen Sie sich den Haken für post-update an:
http://git-scm.com/docs/githooks
Dieses Skript könnte sich wiederum über ssh und do beim Webserver anmelden
cd ~/domain.com/
git checkout master
git pull Origin master
Auf diese Weise müssen Sie sich nur auf den zentralen Server konzentrieren und müssen sich nicht um den Webserver kümmern. Er wird immer aktualisiert, sobald ein Push durchgeführt wurde. Wenn Sie etwas automatisieren können, dann automatisieren Sie es :)
Ich habe sogar einen schönen Artikel über das Einloggen über ssh in einem Skript für Sie gefunden (wenn Sie ein Passwort verwenden müssen, ist dies trivial, wenn ein ssh-Schlüssel eingerichtet wurde):
http://bash.cyberciti.biz/security/expect-ssh-login-script/
Hoffe das hilft!
Ich hatte die gleiche Frage und war nicht zufrieden mit der aktuell am besten bewerteten Antwort hier, endete mit git-website-howto , was den Prozess ziemlich gut umreißt und IMO eine viel sauberere und schnellere Vorgehensweise darstellt.
TL; DR, git init --bare
zum Erstellen eines neuen Repos auf Ihrem Webserver, auf dem Sie Ihre Änderungen von Ihrem Dev-Rechner aus übertragen können. Wenn das Web-Repo Ihre Änderungen empfängt, wird der Post-Receive-Hook ausgelöst, der die Dateien in Ihr Web-Stammverzeichnis kopiert.
Dieser Ansatz gefällt mir, weil der Post-Receive-Hook die Arbeit auf Ihrem Server erledigt, so dass Ihr lokaler Computer viel schneller pushen und sich frei machen kann. Dies macht es auch sehr einfach, die Fernverfolgung für einen bestimmten Zweig einzurichten. Sie könnten einen Zweig namens production
haben, um Ihren Webserver zu aktualisieren, während Ihr Master weiterhin für die Entwicklung und die Verknüpfung mit Ihrem Git-Repo an anderer Stelle zuständig ist.
Hinweis: Sie müssen git config receive.denycurrentbranch ignore
auf Ihrem Webserver-Repo ausführen, um beim Push eine Warnung in Ihrer lokalen DevBox zu unterdrücken.
Schauen Sie sich die git-URLs von http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-Push.html an.
also würdest du versuchen:
git Push ssh://[email protected]/~admin/domain.com/ master
ADDED: Ich denke, ein Teil Ihrer Frage ist, wie Sie mehrere Remote-Repositories haben.
git remote add webserver ssh://[email protected]/~admin/domain.com/
das erlaubt dir zu laufen:
git Push Origin master
git Push webserver master
Ich denke, das von Ihnen gesuchte Feature wird hier beschrieben: http://debuggable.com/posts/git-tip-auto-update-working-ree-via-post-receive-hook:49551efe-6414-4e86- aec6-544f4834cda3
Von local
aus können Sie den Webserver wie einen anderen als Remote-Server hinzufügen:
git remote add webserver [email protected]:/path/to/repo.git/
# Push only master branch by default
git config remote.webserver.Push master
Wenn Sie jetzt bereit sind zu schieben, können Sie einfach Folgendes tun:
git Push webserver
$ git remote add server ssh://server_hostname:/path/to/git/repo
hinzufügen$ git checkout -b temp
$ git Push server
$ git checkout - # shorthand for previous branch, git checkout @{-1}
$ git branch -d temp
Ich habe hier weitere Hintergrundinformationen: https://medium.com/@2upmedia/git-Push-to-live-server-5100406a26
Überprüfen Sie vor der Bereitstellung der lokalen Änderungen, ob sich auf dem Zielserver etwas geändert hat.
Fügen Sie dem Bereitstellungsskript hinzu, um sicherzustellen, dass sich auf dem Server nichts geändert hat:
$ git ls-files -dmo --exclude-standard
Wird leer sein, wenn unveränderte Dateien vorhanden sind, einfacher als das Analysieren des Git-Status