“git push” löscht nicht verfolgte Remote-Dateien

Lesezeit: 3 Minuten

Ich betreibe einen Webserver, der es Benutzern ermöglicht, Bilder auf den Server hochzuladen. Allerdings verwende ich git um meinen Quellcode zu verwalten, und die git push Der Vorgang löscht alles auf dem Server, was nicht mit meiner lokalen Kasse übereinstimmt. Daher verliere ich die Bilder bei jeder Ausführung git push!

Zuerst dachte ich, dass ich das vielleicht könnte schützen den Uploads-Ordner, also habe ich all diese Dinge ausprobiert, wie in anderen Beiträgen vorgeschlagen:

  • Hinzufügen des Verzeichnisses zu .gitignore,
  • git rm --cached -r uploads
  • git update-index --assume-unchanged uploads

Keines davon löst das Problem – das Remote-Verzeichnis verschwindet immer, wenn ich es tue git push.

Als nächstes entschied ich mich, die hochgeladenen Dateien außerhalb des Arbeitsbereichs von git zu platzieren, damit git push löscht es nicht. Dann habe ich eine erstellt symbolischer Link vom öffentlichen Verzeichnis in das private Verzeichnis, damit ich die Dateien öffentlich sehen kann. So weit so gut… Allerdings immer wenn ich laufe git push es löscht den symbolischen Link!

Schließlich dachte ich, dass ich vielleicht einen gebrauchen könnte nach Erhalt Git-Hook, um den symbolischen Link jedes Mal zu erstellen, wenn ich pushe, aber mein Webserver (Openshift) verwendet diesen Hook bereits für etwas anderes und erlaubt mir nicht, ihn zu bearbeiten.

Dafür gibt es doch sicher eine einfache Möglichkeit?! Bitte helfen Sie!

  • Sie müssen sich verpflichten, bevor Sie pushen.

    – Antony D’Andrea

    5. Februar 15 um 9:11 Uhr

  • Ja, natürlich, aber die auf dem Server erstellten Dateien befinden sich niemals in meinem Arbeitsverzeichnis, um sie zu übergeben

    – Ians

    6. Februar 15 um 12:04 Uhr

Sie sollten Symlinks in OPENSHIFT_DATA_DIR erstellen, indem Sie den Aktions-Hook Deploy verwenden. Ein Beispiel dafür finden Sie im WordPress-Schnellstart hier: https://github.com/openshift/wordpress-example/blob/master/.openshift/action_hooks/deploy

Das OPENSHIFT_DATA_DIR bleibt zwischen Bereitstellungen bestehen, wird jedoch NICHT von Gears in einer skalierten Anwendung gemeinsam genutzt.

  • Ah, ich habe mir nur GIT-Hooks angesehen, ich war mir der ACTION HOOKS von Openshift nicht bewusst. Dies sollte mein Problem lösen. Danke!

    – Ians

    6. Februar 15 um 12:10 Uhr

git push loscht nicht verfolgte Remote Dateien
Chris

Wie die meisten Platform-as-a-Service-Anbieter stellt OpenShift a ganz neue Version Ihrer Bewerbung jedes Mal, wenn Sie push. Standardmäßig wird alles, was nicht von Git verfolgt wird, nicht in die neue Version aufgenommen.

Sie haben ein paar Möglichkeiten:

  1. OpenShift unterstützt persistente Datenspeicherung in einem speziellen Verzeichnis:

    Die bewährte Methode zum Speichern von Dateien, die über Bereitstellungen hinweg bestehen bleiben müssen, besteht darin, das Verzeichnis „data“ zu verwenden, das sich eine Ebene über Ihrem Git-Repository befindet. Sie können die Umgebungsvariable $OPENSHIFT_DATA_DIR verwenden, um darauf auf dem Host zu verweisen. Beispielsweise:

    Wenn Sie eine PHP-App namens “Bunny” erstellen. Die php/index.php-Datei des Repos wird bereitgestellt in:

    ~/{Kassettenname}/repo/php/index.php

    Das Datenverzeichnis wird dann bereitgestellt

    ~/{Patronenname}/app-root/data/

    Wenn Sie also aus Ihrer php/index.php-Datei eine Datei unter “../../../data/blah.txt” speichern, wird sie außerhalb Ihres Repo-Verzeichnisses in das Datenverzeichnis gestellt.

  2. Speichern Sie generierte / hochgeladene Assets an anderer Stelle.

    Dies ist der von PaaS-Anbietern favorisierte Ansatz Heroku. Anstatt Benutzer-Uploads und andere generierte Inhalte auf dem PaaS-Server zu speichern, Speichern Sie es auf etwas wie Amazon S3.

  • Danke. In meinem Beitrag erkläre ich, dass ich die Dateien ‘außerhalb des Arbeitsbereichs von git’ speichern kann. Ich verwende tatsächlich $OPENSHIFT_DATA_DIR. Mein Problem ist jedoch, dass die dort gespeicherten Bilder nicht öffentlich sind, sodass ich sie nicht auf meiner Website anzeigen kann.

    – Ians

    6. Februar 15 um 12:06 Uhr

Ja, das Git-Repository, zu dem Sie pushen, sollte kein Repository mit einem Arbeitsverzeichnis sein. Es sollte ein sein bare Repository, das mit initiiert wird

git --bare init

Wenn Sie immer noch auf dem Zielcomputer arbeiten möchten, wäre die beste Lösung, zwei Repositories zu verwenden (eines ohne und eines ohne), Sie pushen auf das Bare und ziehen dann mit einem Hook auf Normal. Ein Beispiel für dieses Setup finden Sie hier Hier.

.

692310cookie-check“git push” löscht nicht verfolgte Remote-Dateien

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

Privacy policy