ubuntuusers.de

git Deployment auf Webserver möglich?

Status: Ungelöst | Ubuntu-Version: Ubuntu 18.10 (Cosmic Cuttlefish)
Antworten |

jl4jsjsjyjw8sl

Avatar von jl4jsjsjyjw8sl

Anmeldungsdatum:
28. Mai 2010

Beiträge: 394

Habe mich zuletzt mit git beschäftigt. Leider finde ich keine Möglichkeit, ein aktuelles git Repository auf meinem Webserver zu kopieren / zu deployen / zu veröffentlichen. Irgendwie verstehe ich nicht den Hype um git, wenn es keine Möglichkeit gibt, den aktuellen PHP - Code auf meinen Webserver hochzuladen. Alles, was ich finden konnte, dreht sich um GitHub. Aber ich möchte auf keinen Fall meinen Code öffentlich stellen.

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

Wenn du auf deinem Webserver keine Shell und kein Git hast dann sind die Möglichkeiten eben sehr, sehr, äh... begrenzt.

Da musst du dann auf Krücken wie ftpfs o.ä. ausweichen, nicht schön.

Aber vielleicht meinst du ja was anderes... Webhoster die einen ordentlichen SSH Zugang anbieten gibts wie Sand am Meer und vServer kosten auch nix... da kannst du dann machen was du willst.

GitHub ist jedenfalls nicht notwendig, gibt ja auch GitLab oder Gitea oder wenn kein Webinterface gewünscht ist auch einfach nur blankes git. Aber wenns nur ftp Zugang gibt, machst git eben rein lokal und schubbst das dann mit lftp mirror o.ä. hoch. Ganz altmodisch...

(Dabei beachten was mit dem .git Verzeichnis passiert, sonst ists am Ende eben doch öffentlich, auf dem eigenen Webserver)

jl4jsjsjyjw8sl

(Themenstarter)
Avatar von jl4jsjsjyjw8sl

Anmeldungsdatum:
28. Mai 2010

Beiträge: 394

frostschutz schrieb:

Wenn du auf deinem Webserver keine Shell und kein Git hast dann sind die Möglichkeiten eben sehr, sehr, äh... begrenzt.

Habe zwar SSH Zugang zum Webserver, möchte aber da nicht rumpfuschen. Habe mir mehrere Anleitungen für Installation auf Server angeschaut. Das Ganze erscheint mir mehr als umständlich, zumal - wenn ich das richtig verstanden habe - zunächst "nur" ein entferntes Repository angelegt wird. Weitere Schritte sind dann noch notwendig, um den Code dahin zu bekommen, wo er hin soll. Was ist das für eine umständliche Handhabung? - Da kann ich ja gleich beim traditionellen FileZilla bleiben. ☹ Mir erscheint git wie ein Auto ohne Räder, damit kann man gar kein Webprojekt umsetzen.

Aber wenns nur ftp Zugang gibt, machst git eben rein lokal und schubbst das dann mit lftp mirror o.ä. hoch. Ganz altmodisch...

Wäre zumindest eine Möglichkeit, aber git kann ja nur das Repository exportieren und nicht den aktuellen Checkout. Damit scheitert diese Möglichkeit.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

jl4jsjsjyjw8sl schrieb:

Habe zwar SSH Zugang zum Webserver, möchte aber da nicht rumpfuschen.

Dann lern doch wie man es richtig macht statt zu pfuschen 😛

Git ist in erste Linie ein Versionsverwaltungssystem, wenn du auf einen Push hin Daten auf dem Server verteilen willst, kannst du Git Hooks nutzen - schau dir z.B. mal https://medium.com/@francoisromain/vps-deploy-with-git-fea605f1303b an.

jl4jsjsjyjw8sl

(Themenstarter)
Avatar von jl4jsjsjyjw8sl

Anmeldungsdatum:
28. Mai 2010

Beiträge: 394

seahawk1986 schrieb:

Dann lern doch wie man es richtig macht statt zu pfuschen 😛 Git ist in erste Linie ein Versionsverwaltungssystem, wenn du auf einen Push hin Daten auf dem Server verteilen willst, kannst du Git Hooks nutzen - schau dir z.B. mal https://medium.com/@francoisromain/vps-deploy-with-git-fea605f1303b an.

Bin gerne bereit, etwas dazuzulernen. Mir geht aber nicht ein, weshalb ich zusätzlich zu meinem lokalen Repository ein entferntes Repository einrichten muss (= Aufwand Einrichtung + Aufwand Pflege), und dann nochmals Aufwand zu haben, um den Code dahin zu bekommen, wo er hingehört. Das ist nicht gerade wirtschaftlich. Nachdem ich mich über die Weihnachtsfeiertage mit GIT beschäftigt habe, kann ich heute nur ernüchternd feststellen, dass es für meine Belange völlig unbrauchbar ist. Bin ehrlich gesagt ziemlich perplex, dass mit GIT ein simples Deployment gar nicht möglich ist. Warum kann man nicht einfach von einem lokalen Repository aus den Code per SFTP/SSH auf den Webserver senden?

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

Kannst du - musst dir das entsprechende Script dazu eben schreiben.

Ich mache das auch nicht mit Hooks sondern mit einem Script (serverseitig). Altmodisch aber transparent. Und manchmal will man ja doch nicht, daß das gepushte sofort "live" ist. Wenn man den Push von Hand anstoßen kann dann eben auch die nachträgliche Liveschaltung.

Ich glaube wir reden hier ein wenig aneinander vorbei, denn das was die Versionsverwaltung unter Push versteht, ist das Übertragen des gesamten Reposity incl. History und dazu muss die Gegenseite einfach auch die Versionsverwaltung verstehen. Das kann ja auch mal in die umgekehrte Richtung gehen, wenn du nicht am PC zuhause sondern von unterwegs was am Code bastelst, das am Repo vom Server eincheckst, und der PC zuhause sich das wieder zieht.

Du willst am Server aber gar nicht das Repo / die Versionsverwaltung haben sondern nur den aktuellen Status Quo. Das Problem dabei ist daß das dann mit der Versionsverwaltung an sich - schlicht nix mehr zu tun hat. Die Kopie die du da deployen willst ist dann explizit nicht versionsverwaltet. Den Upload / Deploy kannst du mit jedem FTP/SCP/Client deiner Wahl als einfaches Shellscript selber lostreten, da brauchst du dich nicht in die Wirren des Git-Hooks-Systems reinzufuchsen.

jl4jsjsjyjw8sl

(Themenstarter)
Avatar von jl4jsjsjyjw8sl

Anmeldungsdatum:
28. Mai 2010

Beiträge: 394

frostschutz schrieb:

Ich glaube wir reden hier ein wenig aneinander vorbei, denn das was die Versionsverwaltung unter Push versteht, ist das Übertragen des gesamten Reposity incl. History und dazu muss die Gegenseite einfach auch die Versionsverwaltung verstehen. Das kann ja auch mal in die umgekehrte Richtung gehen, wenn du nicht am PC zuhause sondern von unterwegs was am Code bastelst, das am Repo vom Server eincheckst, und der PC zuhause sich das wieder zieht.

Du willst am Server aber gar nicht das Repo / die Versionsverwaltung haben sondern nur den aktuellen Status Quo. Das Problem dabei ist daß das dann mit der Versionsverwaltung an sich - schlicht nix mehr zu tun hat. Die Kopie die du da deployen willst ist dann explizit nicht versionsverwaltet.

Danke für die Erläuterung. Es stimmt, ich will die Versionsverwaltung ausschließlich lokal verwalten und nur den Code von der gewünschten Version auf den Server hochladen.

Den Upload / Deploy kannst du mit jedem FTP/SCP/Client deiner Wahl als einfaches Shellscript selber lostreten, da brauchst du dich nicht in die Wirren des Git-Hooks-Systems reinzufuchsen.

Genau daran hakt es aber bei mir. Ein Beispiel:

cd Webseite
git init
git add index.html
git commit -m "Erste Version"

Diesen Stand lade ich auf den Webserver einfach mit FileZilla hoch - soweit OK, kein Problem. Nun bearbeite ich die index.html weiter, füge darin ein paar Zeilen ein. Wenn ich nun diese Datei mit FileZilla hochlade, also bevor ich einen add und den commit durchgeführt habe, dann wird der aktuelle Stand mit den Änderungen hochgeladen. Und genau hier fehlt mir ein entsprechender git-Befehl, der mir die index.html vom ersten Commit auf den Server hochlädt. Wenn ich nun die Änderungen mit add und commit ins Respository übernehme,

git add index.html
git commit -m "Ergänzungen eingefügt"

dann fehlt mir in git ein entsprechender git-Befehl, der mir die zweite Version auf den Server hochlädt. Stelle ich dann fest, dass die index.html nach den vorgenommenen Änderungen einen Fehler enthält, oder nicht das gewünschte Ergebnis liefert, dann fehlt mir ein entsprechender git-Befehl, der mir die erste Version der index.html auf den Server hochlädt. Ich habe schon intensiv gesucht, aber in der Doku von GIT konnte ich keinen Befehl dazu finden.

Vielleicht lässt sich dieser Workflow mit GIT gar nicht realisieren? - Falls nicht, gibt es ein anders Versionsverwaltungsprogramm für meinen Workflow?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Normalerweise arbeitetet man mit mehreren Branches, d.h. du hast einen Basis-Zweig, in dem alles landet, was dir gefällt und daneben Entwicklungszweige, in denen du neue Dinge ausprobieren kannst.

Damit kannst du jederzeit zu einem funktionierenden Stand zurückkehren, Änderungen, die an anderer Stelle an der Stabilen Version erfolgen sollen vorziehen usw.

jl4jsjsjyjw8sl

(Themenstarter)
Avatar von jl4jsjsjyjw8sl

Anmeldungsdatum:
28. Mai 2010

Beiträge: 394

Schon klar, aber das beantwortet nicht meine Frage.

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

git clone geht auch lokal. Du kannst also von deinem Projekt lokal zwei Kopien haben, das eine in dem du bastelst, das andere das nur den Commit-Zustand darstellt.

Alternativ gibts mit git stash die Möglichkeit, Arbeitsversionen mal kurz wegzuschaufeln und danach wieder hervorzuholen.

jl4jsjsjyjw8sl

(Themenstarter)
Avatar von jl4jsjsjyjw8sl

Anmeldungsdatum:
28. Mai 2010

Beiträge: 394

git clone geht auch lokal? - Wie denn? In der Anleitung konnte ich dazu nichts finden.

git clone --local ../export
fatal: Repository '../export' existiert nicht.

auch dies geht nicht:

git clone -branch master ../export/
fatal: Repository 'master' existiert nicht.

Dabei habe ich doch ein "master"-Repository:

git status
Auf Branch master
nichts zu committen, Arbeitsverzeichnis unverändert

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

jl4jsjsjyjw8sl schrieb:

git clone geht auch lokal? - Wie denn?

Die generelle Syntax wäre:

git clone /pfad/zum/repository /pfad/zum/clone 

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

jl4jsjsjyjw8sl schrieb:

Schon klar, aber das beantwortet nicht meine Frage.

Dann muss ich das mal weiter Ausführen, wenn du die Kapitel zum Arbeiten mit Branches nicht selber liest:

Man hat normalerweise einen "stabilen" Branch, in dem alles landet, was den Anforderungen entspricht (z.B. master) und nutzt für neue Features, Änderungen und Fixes jeweils einen neuen Brach, in dem man sich mit Änderungen am Code und Commits austoben kann. Mit git checkout kann man zwischen verschiedenen Branches (bzw. generell zu bestimmten Commits) wechseln und so and die damit verbunden Versionen der Dateien kommen. Zwischenversionen und Releases kann man zusätzlich taggen, damit man sie später leichter wiederfinden kann als sich den Hash des Commits zu merken.

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

Weil du eine HTML Datei als Beispiel nennst, hast du auch Code oder nur Text in deinem Projekt?

Bei einer reinen Textanwendung wirst du vielleicht mit einer Wikisoftware glücklicher?

Da gibts dann Versionierung aber keine Branches und oft auch kein Gesamtprojekt (sondern jede Datei ein Projekt für sich und jeder Commit immer nur auf eine Datei) aber dafür kann man sehr visuell im Browser editieren/arbeiten... und meist reicht das dann auch schon, auch für Großprojekte a la Wikipedia.

Bei Code hast du halt (fast) immer auch die Querabhängigkeiten zwischen den einzelnen Dateien. Vielleicht ist es in deinem Fall, einfach das falsche Werkzeug?

jl4jsjsjyjw8sl

(Themenstarter)
Avatar von jl4jsjsjyjw8sl

Anmeldungsdatum:
28. Mai 2010

Beiträge: 394

seahawk1986 schrieb:

Normalerweise arbeitetet man mit mehreren Branches, d.h. du hast einen Basis-Zweig, in dem alles landet, was dir gefällt und daneben Entwicklungszweige, in denen du neue Dinge ausprobieren kannst.

Damit kannst du jederzeit zu einem funktionierenden Stand zurückkehren, Änderungen, die an anderer Stelle an der Stabilen Version erfolgen sollen vorziehen usw.

Ach, jetzt kapier ich! ☺ Habe mir zwischenzeitlich ein YouTube Video angeschaut, in dem das mit den Branches klarer erklärt wird. In dem Moment, wo ich den Branch wechsle, hat die lokale index.html entweder den Stand vom master-Branch oder vom anderen Branch. Das ist natürlich genial. Und das habe ich vorher nicht gesehen. Klar, jetzt kann ich einfach die index.html einfach über ein Shell Skript oder FileZilla auf den Server hochladen und habe dort dann den gewünschten Stand.

Danke!

Antworten |