Erstellen Sie ein Git-Repository auf der Serverseite

Lesezeit: 10 Minuten

Ich habe ein großes Problem und kann dieses Thema nicht verstehen. Ich habe einen Server mit einer Website. Ich habe dort ein Repository mit erstellt git init. Dann machte ich ein git add * um alle Dateien von meinem Server zum Repository hinzuzufügen. Dann machte ich ein commit um alle Dateien in das Repository zu übertragen.

Dann habe ich es mit geklont git clone ssh://[email protected]/wordpress/.git zu meinem lokalen Kunden.

Alles funktionierte gut und ich bekam eine Kopie von meinem Projekt. Nein, ich habe etwas an meiner lokalen Version geändert und eine commit mit einer push. Ich habe in FileZilla nachgesehen, aber der Inhalt in der Datei hat sich nicht geändert. In die andere Richtung wenn ich am Server etwas geändert habe und pulled es auf die lokale Kopie sah ich die Änderungen. Wissen Sie, warum die Änderungen, die ich an der lokalen Kopie vorgenommen habe, auf meinem Server nicht sichtbar sind?

Danke für Ihre Hilfe!

  • Hast du git add files?

    – Frank

    8. November 2016 um 4:08 Uhr


Nilpos Benutzeravatar
Nilpo

Sie müssen Änderungen an ein zentrales Repository übertragen, aus dem sowohl Ihr lokaler Computer als auch Ihr Server abrufen können (oder sie als Remotes füreinander hinzufügen können). Ein Dienst wie GitHub funktioniert dafür gut. Hier finden Sie Anweisungen für einen vollständigen Workflow, der dafür gut funktioniert. Aktualisierte Anweisungen finden Sie in dieser Kern. Dieser Workflow verwendet Hooks, um die schwere Arbeit zu erledigen, damit Aktualisierungen auf Ihrem Server automatisiert werden.

Verwenden von Git zum Verwalten einer Live-Website

Überblick

Als Freiberufler erstelle ich viele Websites. Das sind eine Menge Codeänderungen, die nachverfolgt werden müssen. Glücklicherweise macht ein Git-fähiger Workflow mit richtiger Verzweigung die Projektverfolgung zu einem Kinderspiel. Ich kann leicht Entwicklungsfunktionen in Zweigen sowie einen Schnappschuss des Produktionscodes der Sites sehen. Eine nette Ergänzung zu diesem Workflow ist die Möglichkeit, Git zu verwenden, um Updates an jede der verschiedenen Websites zu senden, an denen ich arbeite, während ich Änderungen festschreibe.

Sie müssen Git auf Ihren Entwicklungscomputern sowie auf dem Server oder den Servern installiert haben, auf denen Sie Ihre Website hosten möchten. Dieser Prozess kann sogar angepasst werden, um mit mehreren Servern wie Spiegeln hinter einem Load Balancer zu arbeiten.

Passwortlosen SSH-Zugriff einrichten

Der Prozess zum Aktualisieren eines Live-Webservers beruht auf der Verwendung von Post-Hooks innerhalb der Git-Umgebung. Da dies vollständig automatisiert ist, gibt es beim Aufbau der SSH-Verbindung zum Remote-Server keine Möglichkeit, Anmeldeinformationen einzugeben. Um dies zu umgehen, richten wir einen passwortlosen SSH-Zugriff ein. Zu Beginn müssen Sie sich mit SSH in Ihren Server einloggen.

ssh user@hostname

Als nächstes müssen Sie sicherstellen, dass Sie eine haben ~/.ssh im Home-Verzeichnis Ihres Benutzers. Wenn nicht, erstellen Sie jetzt eine.

mkdir ~/.ssh

Auf Mac und Linux können Sie die Leistung des Terminals nutzen, um beides auf einmal zu tun.

if [ ! -d ~/.ssh ]; then mkdir ~/.ssh; fi

Als nächstes müssen Sie Generieren Sie einen öffentlichen SSH-Schlüssel falls du noch keine hast. Listen Sie die Dateien in Ihrer ~/.ssh Verzeichnis zu prüfen.

ls -al ~/.ssh

Die Datei, nach der Sie suchen, hat normalerweise einen ähnlichen Namen wie id_rsa.pub. Wenn Sie sich nicht sicher sind, können Sie eine neue erstellen. Der folgende Befehl erstellt einen SSH-Schlüssel mit der bereitgestellten E-Mail-Adresse als Label.

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Wahrscheinlich möchten Sie alle Standardeinstellungen beibehalten. Dies sollte eine Datei mit dem Namen erstellen id_rsa in dem ~/.ssh zuvor erstelltes Verzeichnis.

Wenn Sie dazu aufgefordert werden, stellen Sie sicher, dass Sie dies angeben eine sichere SSH-Passphrase.

Wenn Sie einen SSH-Schlüssel erstellen mussten, müssen Sie das ssh-agent-Programm konfigurieren, um ihn zu verwenden.

ssh-add ~/.ssh/id_rsa

Wenn Sie wissen, was Sie tun, können Sie einen vorhandenen SSH-Schlüssel in Ihrem verwenden ~/.ssh Verzeichnis, indem Sie die Datei mit dem privaten Schlüssel an ssh-agent übergeben.

Wenn Sie immer noch nicht sicher sind, was los ist, sollten Sie zwei Dateien in Ihrer ~/.ssh Verzeichnis, das den privaten und öffentlichen Schlüsseldateien entspricht. Normalerweise ist der öffentliche Schlüssel eine gleichnamige Datei mit der Erweiterung .pub. Ein Beispiel wäre eine private Schlüsseldatei mit dem Namen id_rsa und eine öffentliche Schlüsseldatei mit dem Namen id_rsa.pub.

Sobald Sie einen SSH-Schlüssel auf Ihrem lokalen Computer generiert haben, ist es an der Zeit, die passende gemeinsam genutzte Schlüsseldatei auf dem Server abzulegen.

ssh user@hostname 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub

Dadurch wird Ihr öffentlicher Schlüssel zu den autorisierten Schlüsseln auf dem Remote-Server hinzugefügt. Dieser Vorgang kann von jedem Entwicklungscomputer aus wiederholt werden, um dem Server so viele autorisierte Schlüssel wie nötig hinzuzufügen. Sie wissen, dass Sie es richtig gemacht haben, wenn Sie Ihre Verbindung schließen und erneut verbinden, ohne zur Eingabe eines Passworts aufgefordert zu werden.


Konfigurieren des Remote-Server-Repositorys

Der Computer, den Sie als Live-Produktionsserver verwenden möchten, muss über ein Git-Repository verfügen, das in ein geeignetes, über das Internet zugängliches Verzeichnis schreiben kann. Die Git-Metadaten (das .git-Verzeichnis) müssen sich nicht an einem über das Web zugänglichen Ort befinden. Stattdessen kann es sich an einem beliebigen Ort befinden, der von Ihrem SSH-Benutzer beschreibbar ist.

Ein Bare-Repository einrichten

Um Dateien auf Ihren Webserver zu übertragen, benötigen Sie eine Kopie Ihres Repositorys auf Ihrem Webserver. Sie sollten damit beginnen, ein leeres Repository zu erstellen, um Ihre Website zu beherbergen. Das Repository sollte irgendwo außerhalb Ihres Webstammverzeichnisses eingerichtet werden. Wir werden Git später anweisen, wo die eigentlichen Dateien abgelegt werden sollen. Sobald Sie sich für einen Speicherort für Ihr Repository entschieden haben, erstellen die folgenden Befehle das Bare-Repository.

mkdir mywebsite.git
cd mywebsite.git
git init --bare

Ein reines Repository enthält alle Git-Metadaten ohne HEAD. Im Wesentlichen bedeutet dies, dass Ihr Repository über eine .git Verzeichnis, aber es sind keine Arbeitsdateien ausgecheckt. Der nächste Schritt besteht darin, einen Git-Hook zu erstellen, der diese Dateien jederzeit auscheckt, wenn Sie ihn dazu anweisen.

Wenn Sie Git-Befehle aus dem getrennten Arbeitsbaum ausführen möchten, müssen Sie die Umgebungsvariable festlegen GIT_DIR zum Weg von mywebsite.git bevor Sie irgendwelche Befehle ausführen.

Fügen Sie einen Post-Receive-Hook hinzu

Erstellen Sie eine Datei mit dem Namen post-receive im Hooks-Verzeichnis Ihres Repositorys mit folgendem Inhalt.

#!/bin/sh
GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f

Sobald Sie Ihren Hook erstellt haben, markieren Sie ihn als ausführbar.

chmod +x hooks/post-receive

GIT_WORK_TREE ermöglicht es Ihnen, Git anzuweisen, wo das Arbeitsverzeichnis für ein Repository liegen soll. Auf diese Weise können Sie das Repository außerhalb des Webstammverzeichnisses mit einem getrennten Arbeitsbaum an einem über das Internet zugänglichen Ort aufbewahren. Stellen Sie sicher, dass der von Ihnen angegebene Pfad existiert, Git wird ihn nicht für Sie erstellen.


Konfigurieren der lokalen Entwicklungsmaschine

Die lokale Entwicklungsmaschine beherbergt das Website-Repository. Relevante Dateien werden auf den Live-Server kopiert, wenn Sie diese Änderungen übertragen möchten. Das bedeutet, dass Sie eine Arbeitskopie des Repositorys auf Ihrem Entwicklungscomputer aufbewahren sollten. Sie können auch jedes zentralisierte Repository verwenden, einschließlich Cloud-basierter wie GitHub oder BitBucket. Ihr Arbeitsablauf liegt ganz bei Ihnen. Da alle Änderungen aus dem lokalen Repository übertragen werden, wird dieser Prozess nicht davon beeinflusst, wie Sie Ihr Projekt behandeln.

Einrichten des Arbeitsrepositorys

Auf Ihrem Entwicklungscomputer sollten Sie über ein funktionierendes Git-Repository verfügen. Wenn nicht, können Sie mit den folgenden Befehlen in einem vorhandenen Projektverzeichnis erstellen.

git init
git add -A
git commit -m "Initial Commit"

Fügen Sie ein Remote-Repository hinzu, das auf den Webserver verweist

Sobald Sie ein funktionierendes Repository haben, müssen Sie ein Remote hinzufügen, das auf das Repository verweist, das Sie auf Ihrem Server eingerichtet haben.

git remote add live ssh://server1.example.com/home/user/mywebsite.git

Stellen Sie sicher, dass der von Ihnen bereitgestellte Hostname und Pfad auf den Server und das Repository verweisen, die Sie zuvor eingerichtet haben. Schließlich ist es an der Zeit, Ihre aktuelle Website zum ersten Mal auf den Live-Server zu pushen.

git push live +master:refs/head/main

Dieser Befehl weist Git an, den aktuellen Hauptzweig in die live Fernbedienung. (Es ist nicht nötig, andere Zweige zu senden.) In Zukunft checkt der Server nur vom Hauptzweig aus, sodass Sie dies nicht jedes Mal explizit angeben müssen.


Etwas Schönes bauen

Alles ist bereit zu gehen. Es ist Zeit, der Kreativität freien Lauf zu lassen! Ihr Workflow muss sich überhaupt nicht ändern. Wann immer Sie bereit sind, ist das Pushen von Änderungen an den Live-Webserver so einfach wie das Ausführen des folgenden Befehls.

git push live

Einstellung receive.denycurrentbranch auf dem Server zu „ignorieren“ eliminiert eine Warnung, die von neueren Git-Versionen ausgegeben wird, wenn Sie ein Update an einen ausgecheckten Zweig auf dem Server pushen.


Zusätzliche Tipps

Hier sind ein paar weitere Tipps und Tricks, die Sie bei der Verwendung dieses Workflow-Stils nützlich finden können.

Pushen von Änderungen auf mehrere Server

Möglicherweise müssen Sie auf mehrere Server pushen. Vielleicht haben Sie mehrere Testserver oder Ihre Live-Site wird über mehrere Server hinter einem Load Balancer gespiegelt. In jedem Fall ist das Pushen auf mehrere Server so einfach wie das Hinzufügen weiterer URLs zur [remote "live"] Abschnitt ein .git/config.

[remote "live"]
    url = ssh://server1.example.com/home/user/mywebsite.git
    url = ssh://server2.example.com/home/user/mywebsite.git

Geben Sie nun den Befehl aus git push live aktualisiert alle URLs, die Sie hinzugefügt haben, auf einmal. Einfach!

Ignorieren lokaler Änderungen an nachverfolgten Dateien

Von Zeit zu Zeit werden Sie feststellen, dass es Dateien in Ihrem Repository gibt, die Sie nachverfolgen möchten, die aber nicht bei jeder Aktualisierung Ihrer Website geändert werden sollen. Ein gutes Beispiel wären Konfigurationsdateien auf Ihrer Website, die spezifische Einstellungen für den Server haben, auf dem sich die Website befindet. Das Übertragen von Updates auf Ihre Website würde diese Dateien normalerweise mit der Version der Datei überschreiben, die sich auf Ihrem Entwicklungscomputer befindet. Dies zu verhindern ist einfach. Verbinden Sie sich per SSH mit dem Remote-Server und navigieren Sie zum Git-Repository. Geben Sie den folgenden Befehl ein und listen Sie jede Datei auf, die Sie ignorieren möchten.

git update-index --assume-unchanged <file...>

Dies weist Git an, alle Änderungen an den angegebenen Dateien bei zukünftigen Checkouts zu ignorieren. Sie können diesen Effekt jederzeit für eine oder mehrere Dateien rückgängig machen.

git update-index --no-assume-unchanged <file...>

Wenn Sie eine Liste der ignorierten Dateien sehen möchten, ist das auch ganz einfach.

git ls-files -v | grep ^[a-z]

Verweise

pushDas Durchführen des Codes aktualisiert lediglich die Referenzen des entfernten Repositorys.

Die ausgecheckte Arbeitskopie wird nicht geändert.

Bedenken Sie, dass Sie das Repository eines Kollegen als Remote hinzufügen könnten. Wenn Sie gepusht haben und das Verhalten darin bestand, dass dieser neue Code automatisch ausgecheckt würde, würde sich dies auf das auswirken, woran sie arbeiten.

Es hört sich so an, als ob Sie wirklich ein kontinuierliches Integrationstool wollen, sei es etwas mit vollem Funktionsumfang oder nur ein rsync, das von a ausgelöst wird git haken.

Sie sollten immer nur auf a drücken bare Repository (es sei denn, Sie wissen genau, was Sie tun; und selbst dann sollten Sie immer nur auf ein bare Repository).

Sie sollten keine Arbeitskopie klonen .git/ Verzeichnis.

1396070cookie-checkErstellen Sie ein Git-Repository auf der Serverseite

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy