Github und Webentwicklung


#1

Im Zuge der Weiterentwicklung von podflow habe ich mir jetzt Github ein wenig näher angeschaut. Ich fahre folgendes Setup:

Ich habe einen eigenen kleinen Webserver in meiner Wohnung, auf dem ich mein Arbeitsverzeichnis für podflow und dessen Entwicklung habe. Auf diesen Webserver kann ich auch per Domain von außer zugreifen, um somit auch Remote zu arbeiten und vor allem: zu testen. So spare ich mir auf jeder potenziellen Arbeitsmaschine die Installation von XAMPP und der Synchronisierung der Datenbank, da alles zentral läuft.

Ich habe Github Dekstop auf meinem PC installiert und das Arbeitsverzeichnis auf meinem server (Netzwerkpfad) gelegt.

So kann ich folgendes sicherstellen: wenn ich am PC arbeite und das Repo auf z.B. einen alten Branch zum Hotfixen wechsle, dann ändern sich somit auch automatisch die Dateien im Arbeitsverzeichnis und das Ergebnis im Browser, da die Dateien ja im Serververzeichnis entsprechend geladen werden.

Soweit so gut!

Jetzt kann es durchaus vorkommen, dass ich auch mal an PCs arbeite, auf denen ich keinen direkten Zugriff auf meinen Server habe und nur per FTP die bearbeiteten Dateien auf das Serververzeichnis bekomme.

Sobald ich also auf einem fremden PC das Arbeitsverzeichnis lokal und NICHT auf meinen Server lege (z.B. auf dem Dekstop), dann dort Änderung an Dateien vornehme, diese per FTP wiederum in das Arbeitsverzeichnis auf den Server lege (mein git-repo des Dekstop PCs) bekomme ich am PC beim Öffnen von Github Desktop eine Meldung, dass die Datei geändert wurde und sie noch commited werden muss.

Das habe aber ja aber schon auf dem Fremdrechner (vor dem FTP-Upload) und die Datei im Repo am Webserver ist bereits aktuell. Er will quasi nochmal die gleiche Datei mit dem gleichen Versionsstand auf github schieben.

Ich habe also das Problem, dass ich auf einem fremden Rechner ohne direkten Zugriff auf meinen Server z.B Hotfixes in alten Branches nicht testen kann, da ja auf dem Server grundsätzlich die aktuelle Entwicklungsumgebung geladen sein sollte, dass ich weiter entwickeln kann

Wenn ich jetzt auf einem fremden Rechner einen alten Versionsstand lokal ziehe und die Datei bearbeite, dann würde ich (normalerweise) die alte, gefixte Datei per FTP auf meinen Server ziehen. Das haut aber nicht hin, da ja hier die neue, weiterentwickelte Struktur geladen und somit nicht funktionieren würde.

Alternative wäre, dass ich mir einen eigenen Git-Server aufsetze, weil ich dann in jedem Fall mein Repo in meiner Git-Anwendung entsprechend von meinem Server laden kann. Bringt mir aber auch nix, da ich den Code gerne auch auf Github stellen würde.

Ich bräuchte daher ein bisschen Input von euch, wie man dieses Problem am besten lösen könnte oder wie andere Webentwickler den Workflow mit Github und verschiedenen Arbeitsrechnern in den Griff kriegen.


#2

Heterogenes Umfeld? Windows & Unix? Wenn ja => https://help.github.com/articles/dealing-with-line-endings/


#3

Nein, ich bin komplett auf windows unterwegs. Dem Webserver betreib ich mit IIS.


#4

Du verwendest allen Ernstes FTP. Im Jahr 2018? Echt jetzt? Das ist so, als würde man in T-Shirt, kurzen Hosen und Flipflops einen Hochofenanstich machen.

Die richtige™ Lösung wäre, auf dem Server mit Shellzugriff/Remote Desktop die entsprechenden Branches auszuchecken. Aber wenn auf den fremden PCs wirklich nur FTP geht, dann würde ich tunlichst davon absehen, auf diesen fremden PCs zu arbeiten. Warum geht denn da nur FTP und nicht auch ssh oder sowas?


#5

Ich nutze den FTP ausschließlich um die Dateien von meinem Server auf den Rechner zu bekommen um die Dateien zu bearbeiten, wieder zurückzuschieben und das Ergebnis zu testen. Ist nichts anderes, als wenn ich eine Wordpress installation auf einen (meinen eigenen) Webserver schiebe. Ich kann selbstverständlich auch mit Filezilla per SSH verbinden.
Ich bisher keine Version-Control benötigt von daher muss ich mich dem Thema jetzt wohl oder über beschäftigen.

Ich möchte es auch nochmal in aller Deutlichkeit sagen: Ich bin kein professioneller Entwickler und mache das als Hobby. Ich habe keine Vorerfahrung mit Software-Entwicklung und habe das Tool vor ca. einem halben Jahr aus dem Boden gestampft, in erster Linie um meine eigenen Podcast damit zu vereinfachen. Nachdem wir das Potenzial dahinter gesehen haben, habe ich mich darauf konzentriert, das Teil zu entwickeln und vorzeigbar zu machen.

Ich arbeite derzeit noch gar nicht mit SVN, Github oder ähnlichen Tools, warum ich auch diesen Thread eröffnet habe. Ich habe keine Vorerfahrungen mit diesen Tools und hoffe daher auf konstruktive Vorschläge, wie ich meinen Workflow für die weitere Entwicklung verbessern kann. Dass FTP nicht auf der Höhe der Zeit ist, weiß ich auch, aber für meine Zwecke hat’s gereicht.


#6

Das hat sich der mit Flipflops im Stahlwerk auch gesagt, als er noch beide Füße hatte.

Ich versuche mal zusammenzufassen: Auf dem Server läuft ein Webserver und eine Datenbank. Die stellen zusammen die Webapplikation dar, klassisch Webserver + Serverspache (PHP, Rails, Elixir, …) + Datenbank. Normalerweise ist dein Arbeitsverzeichnis auf dem Server selbst, außer du arbeitest auf fremden Rechnern.

Ich kann dir sagen, wie ich das mache (bin auch kein Profi). Ich habe auf allen Rechnern, auf denen ich arbeite lokal, einen Webserver mit ggf. Wegwerf-Test-Datenbank. Da entwickle und teste ich, komplett lokal. Die Commits pushe ich auf irgendein Remote, meistens mein Heimserver (könnte auch Github sein). Wenn ich einen Entwicklungsstand auf dem Produktionsserver einspielen möchte, logge ich mich dort ein und sage git pull.


#7

Du hast also mehrere Rechner auf denen Du entwickelst und zwischen denen Du Versionen austauschen willst - da ist git auf jeden Fall schonmal eine super Wahl. Und auch den Gedanken das Open Source auf Github zu machen finde ich super. Ebenso, dass Du Branches verwendest: Super!

Wenn ich dich Richtig verstanden habe, hast du mehrere Rechner auf denen Du entwickelst und einen Server, auf dem Du den Code ausprobieren kannst.

Vorschlag 1 - Ordentliches Porzellan:

Benutze git weiterhin auf deinem Rechnern, aber auf deinem Server legst Du auch ein Git-Verzeichnis an, welches aber von deinem Computer aus erreichbar ist.
Nun kommt der “Trick”: Git kann ja zu beliebigen Rechner Daten pushen (z.B. wie Du es bisher zu GitHub tust). Du könntest also auf deinem Rechner sowohl Github als Ziel als auch deinen Server einstellen.
Dann pusht dein lokales git-tool die Daten sowohl zu GitHub als auch auf deinen Server. Nun musst Du lediglich auf dem Server eine Einstellung vornehmen (z.B. mit der Anleitung hier ), dass bei neu empfangenen Dateien diese auch im Verzeichnis einspielt (und nicht nur in der git-datenbank hinterlegt).

Fallst Du auf FTP immer direkt draufkommst, könnte auch git-ftp eine gute Option sein (via Kommandozeile)

Vorschlag 2: Der goldene Thron:

Du installierst Dir ein einfaches Buildmanagement-System, welches vorher sogar Kram wie “automatisierte Tests” etc. ausführt und dann deine neueste Version automatisch auf dem Server ausrollt. Aber das ist dann eine andere Größenordnung :slight_smile:
Eventuell kann man in dem Umfeld auch einen kostenfreien Online-Dienst wie travis-ci o.ä. nutzen - hier muss man allerdings dem Dienst irgendwie Zugang zu deinem Server erlauben…

Vorschlag 3 - Das Plumpsklo:

Du lässt auf dem Server ein kleines Skript laufen, was alle paar Minuten nach Updates von GitHub pullt. Langfristig furchtbare Idee, funktioniert aber zwischendurch als Notlösung.

Alle drei Varianten haben den charmanten Vorteil, dass Du gar nicht zwischen lokaler Version (abgegeben) und Serverversion auseinanderlaufen kannst: Ein “Oh, huch, die Änderung auf dem Server hab ich ja direkt gemacht und vergessen wieder hier einzuspielen” passiert nicht mehr so einfach;

PS: Versionsmanagement und Co ist mein Steckenpferd, frag mich alles :slight_smile:


#8

Sowieso… :wink:

Für Windows würde ich bei https://dev.azure.com/ oder https://www.appveyor.com/ gucken.


#9

Super :grin: vielen dank schonmal für den input. Ich werd mich in die Richtung des Porzellans begeben :joy: