Wie mache ich sshfs + VPN + git zu einer tolerierbaren Arbeitsumgebung?

9

Derzeit befindet sich die Codebasis für das Projekt, an dem ich arbeite, remote auf einem Unternehmensserver. und so muss es bleiben. Auch das Remote- gitRepository kann nicht veröffentlicht werden.

Mein aktuelles Setup ist:

  • Verbinden Sie sich mit dem VPN
  • Führen Sie sshfsdiese Option aus, um eine Kopie des Codes bereitzustellen
  • Beginnen Sie mit der Arbeit am Code
  • Wenn ich fertig bin: sshzum Remote-Server und dort gitBefehle ausführen

Das Problem dabei ist, dass das VPN von Zeit zu Zeit sshfsausfällt , sodass mein Monat kaputt geht und meine IDE einfriert. Ich verbinde das VPN manuell wieder, führe es dann sshfserneut aus und mache mich wieder an die Arbeit.

Aber es wird ärgerlich, wenn die VPNFälle häufiger fallen.

Ich frage mich also, ob es Einstellungen für sshfseine Art Cache gibt, die es mir ermöglichen würden, zu arbeiten und die Änderungen erst zu synchronisieren, wenn das VPN zurückkommt.

Dies ist möglicherweise nicht sinnvoll, da nichts zu schreiben ist, wenn der Remote-Treiber nicht verfügbar ist. Was ist also mit einem anderen Setup, das etwas watchverwendet rsyncund Änderungen bidirektional verschiebt (entweder wenn ich eine Datei speichere oder wenn ich es tue git pull) ?

Ich kann nicht einfach git klonen, weil ich nicht die gesamte Umgebung reproduzieren kann, um 'lokal' zu arbeiten (DB und so)

Der Code muss sich auf ihren Servern befinden, damit ich meine Arbeit testen / sehen kann, muss ich auf eine URL zugreifen, das ist meine Sandbox. Ich kann nicht jedes Mal pushen, wenn ich meine Änderungen sehen möchte.

Asgaroth
quelle
3
Warum benutzt du nicht gitden vernünftigen Weg? Klonen Sie das Repo und arbeiten Sie remote.
Zecrazytux
Ich kann nicht einfach einen Git-Klon erstellen, da ich nicht die gesamte Umgebung reproduzieren kann, um "lokal" zu arbeiten. Der Code muss sich auf ihren Servern befinden, damit ich meine Arbeit testen / sehen kann. Ich habe Zugriff auf eine URL, die meine Sandbox ist. Ich kann nicht jedes Mal pushen, wenn ich meine Änderungen sehen möchte
Asgaroth
1
Cripes, das ist ziemlich kaputt.
EEAA
Wie ist es eine schlechte Frage? Es ist nicht so, dass ich ihre Infrastruktur ändern oder Entscheidungen darüber treffen kann. Ich brauche nur eine Möglichkeit, mit ihnen aus der Ferne zu arbeiten.
Asgaroth

Antworten:

2

zecrazytux ist richtig - Warum verwenden Sie nicht die Art und Weise, wie Sie es sollen: indem Sie das Repository klonen, remote daran arbeiten und die Änderungen an den Master zurücksenden ?git

Ich sehe keinen Grund, warum Sie git pushIhre Arbeit nicht jedes Mal "nicht" können, wenn Sie Ihre Änderungen sehen möchten (idealerweise in einen Entwicklungszweig, der dann zusammengeführt wird, wenn er getestet und nachweislich funktioniert) - viele Leute tun dies. Sie können sogar einen post-receiveHook verwenden, um Ihre Änderungen in der Umgebung bereitzustellen, wenn Sie diesen Teil der Dinge automatisieren möchten.
(Sie wollen dies offensichtlich nicht tun , aber Sie haben keinen Grund angegeben, warum, also lehne ich die Prämisse Ihres Problems ab.)


Ehrlich gesagt können Sie nichts tun, um eine unzuverlässige Netzwerkverbindung "erträglich" zu machen (INSBESONDERE, wenn Sie versuchen, Netzwerkdateisysteme zu mounten) - Sie können entweder wie oben beschrieben remote arbeiten, SSH in das System einbinden und direkt daran arbeiten ( screengehört Ihnen) Freund hier) oder untersuchen und beheben Sie die zugrunde liegende Netzwerkinstabilität.
Der Versuch, etwas anderes zu tun, um "es erträglich zu machen", ist eine sinnlose Übung (denken Sie an "Cocktailschirm in einem Hurrikan").

voretaq7
quelle
Der Grund ist, wir haben Redmine und jedes Commit sollte ein bestimmtes Format haben. Daher ist eine Reihe von Commits für eine einzelne Aufgabe nicht akzeptabel. Wenn Sie git commit + push ausführen müssen, bevor Sie zum Browser gehen und eine Aktualisierung durchführen (F5), ist dies weniger erträglich als jetzt. Stellen Sie sich vor, Sie müssen + pushen, nur weil ich ein Semikolon verpasst habe (ich übertreibe, aber Sie haben die Idee)
Asgaroth
we have redmine and each commit should have a specific format<- Wenn Sie also das Format des Entwicklungszweigs zusammenführen, wird das Commit für die Zusammenführung so ausgeführt, wie es redmine erwartet. gitist so flexibel :-)
voretaq7
Das fehlende Semikolon ist einfach: Machen Sie keine Fehler (ich übertreibe, aber Sie haben die Idee - Sie können statische Syntaxprüfungen für Ihre Inhalte durchführen, bevor Sie versuchen, solche kleinen Dinge zu beseitigen, und da Redmine dies nur tun wird siehe das Merge-Down-Commit, niemand muss die Schrecken kennen, die sowieso in Ihrem Entwicklungszweig passiert sind) - ansonsten sind wir wieder bei "Remote-Arbeit, Verwendung, screenwenn die Verbindung
unterbrochen wird
Das könnte wahr sein, aber ich muss immer noch Commit + Push ausführen, um die Änderungen zu sehen. Natürlich verwende ich Syntaxprüfer. Sie haben die Idee nicht verstanden. Aber Sie wissen, dass Sie bei der Arbeit in Web-Apps eine Menge Seitenaktualisierungen durchführen müssen, wenn Sie an etwas arbeiten. Wiederum würde Commit + Puhs es weniger erträglich machen als jetzt.
Asgaroth
Sie sollten in der Lage sein, dieses Setup zu haben: Ursprung → Remote-Klon → lokaler Klon. Ein Push vom lokalen Klon erfolgt zum Remote-Klon (und ist nicht durch Redmine-Inhalte eingeschränkt). Wenn Sie sich in einem Zustand befinden, der für Redmine geeignet erscheint, können Sie den Remote-Klon zum Ursprung verschieben.
Alfe
0

Ich verwende diese sshfs-Optionen, um die Latenz zu minimieren:

sshfs -o Ciphers=arcfour,compression=no,nonempty,auto_cache,reconnect,workaround=all [email protected]:/usr/local/gitdev/ ~/dev/code

Es verfügt über das Flag zum erneuten Verbinden, alle sshfs-Problemumgehungen, unter Verwendung von Auto-Cache und Arcfour-Chiper.

Sie können über diese Optionen im sshfs-Handbuch nachlesen. Ich fand diese Optionen zumindest für mein Setup am schnellsten.

ETA: Weitere Informationen zur Leistung von sshfs finden Sie hier: Leistung von sshfs

Diamanthund
quelle