Frage

Ich möchte git verwenden, um einige Daten auf einem entfernten Server zu verwalten, so richte ich eine nicht-bare Repository gibt. Ich kann ohne Probleme schieben, und das Repository selbst Updates, aber die eigentlichen Dateien werden nicht verändert / hinzugefügt / gelöscht werden. Ich habe in den Server ssh und tun a

git reset --hard HEAD

die Dateistruktur zu erhalten, um tatsächlich zu aktualisieren.

Was ist zu tun?

War es hilfreich?

Lösung

Sie sollten dies nicht tun. Es wird empfohlen, nackte Repositorys zu haben. Mit anderen Worten, überprüften keine Dateien aus, nur das .git Verzeichnis selbst. Anschließend können Sie das Repository an einen anderen Ort auf dem Server Kasse - sagen, Ihren Web-Root. Auf diese Weise erhalten Sie:

  • git best practice. Nach der Git-Dokumentation können Sie „unerwartete Ergebnisse“ erhalten, wenn Sie es nicht folgen. Jeder, der ein gutes Stück Programmierung getan hat, weiß, dass „unerwartete Ergebnisse“ Code ist für „wahrscheinlich Ihre Kinder essen und sollte unter allen Umständen vermieden werden.“

  • bessere Sicherheit, wenn Sie planen, die ausgecheckt Dateien auf dem Server auch von einem Webserver zu haben.

  • Lokale Änderungen auf dem ausgelagerte Code, und die Fähigkeit, schnell Änderungen vorzunehmen, auf der Live-Code ausgecheckt. Sie könnten versuchen, diese auf dem Repository direkt zu tun, aber es würde Fehler chaotisch und anfälliger sein.

  • Die Möglichkeit, Ihre Server-Repository zu aktualisieren, unabhängig Ihren Live-Service-Code zu aktualisieren. Das ist ziemlich entscheidend, wenn Sie remote arbeiten und brauchen etwas an den Server zu senden und dann die weitere Arbeit zu tun, bevor es für Ihren Live-Dienst bereit sein wird, oder wenn Sie Änderungen in Ihrem Live-Service-Code (zum Beispiel verschiedene Konfigurationseinstellungen ) und müssen diese Änderungen mit den Änderungen in der Repo verschmelzen, kann es aber nicht nur jetzt tun.

Ich würde die folgenden Schritte empfehlen:

  • Folgen Sie den git docs über die Einrichtung eines nackten Repository up
  • Überprüfen Sie heraus Code aus Ihrem Repo zu Ihrem Live-Dienst Ziel dir
  • Setup ein git Haken (post-commit sollte die richtige IIRC sein) Ihren Live-Dienst zu aktualisieren, wenn das Repository aktualisiert wird. Es soll wohl cd zu dem Live-Dienst dir, und eine Git-Pull---rebase tun, und vielleicht einige Dateiberechtigungen festgelegt.
  • Drücken Sie einfach Ihren Code zu dem Repo von Ihrer Dev-Box von jetzt an.

Andere Tipps

Dies, glücklich, wird nun direkt in git selbst unterstützt! Sie können die Details in dieser Antwort finden, die ich gerade upvoted haben:

https://stackoverflow.com/a/38363683/85360

Es empfiehlt die Konfiguration der Fernbedienung mit

git config receive.denyCurrentBranch updateInstead

, so dass drückt in einer aktualisierten Arbeitskopie zur Folge haben!

Verwenden Sie einen Post-Update Haken:

Haken

Dort können Sie ausführen, was Sie bei jeder Aktualisierung werden sollen.

Git Version 1.9.1
Ubuntu Server 14.04 LTS
LAMP Server

ich meine LAMP-Server mein Arbeitsverzeichnis meiner Git-Repo zu aktualisieren, wenn einer meiner Web-Entwickler eine Änderung an den Server schiebt. Ich habe bemerkt, dass das Protokoll würde die neuen Commits beachten, würde aber das Arbeitsverzeichnis nicht aktualisieren. Statt dem (git checkout -f) manuell zu tun, für jedes Update, kann dies automatisch eingestellt werden, um so zu tun, nachdem ein Stoß empfangen wurde.

  1. In Ihrem ".git" Verzeichnis, gehen Sie in den "Haken" -Ordner.
  2. Erstellen Sie eine Datei mit dem Namen "post-empfangen" innerhalb der "Haken" Ordner mit folgendem Inhalt:

    #! / Bin / sh

    # Update Arbeitsverzeichnis nach einem Stoß von Remote-Clients zu empfangen.
     # Dies sollte im git Arbeitsverzeichnis gerichtet werden.
    GIT_WORK_TREE = / var / www / dev_site git checkout -f

  3. Berechtigungen Aktivieren Sie die Datei auszuführen, indem "chmod + x Post erhalten" in der "Haken" Ordner eingeben.

Es wird nun das Arbeitsverzeichnis aktualisieren, wenn Commits zur Git-Repo geschoben werden. Meine Website zeigt nun die Änderungen, wenn ich es in einem Browser besuchen.

Ihr Arbeitsverzeichnis / var / www / dev_site

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top