![Stellen Sie eine Verbindung zu einer anderen Repository-URL her, je nachdem, ob Sie sich im Heimnetzwerk befinden oder nicht.](https://rvso.com/image/1303081/Stellen%20Sie%20eine%20Verbindung%20zu%20einer%20anderen%20Repository-URL%20her%2C%20je%20nachdem%2C%20ob%20Sie%20sich%20im%20Heimnetzwerk%20befinden%20oder%20nicht..png)
Ich habe eine Subversion-Arbeitskopie auf meinem Laptop und das entsprechende Repository auf meinem NAS. Wenn ich nicht zu Hause bin, aktualisiere und übertrage ich die Dateien über eine verschlüsselte Verbindung zu einem Domänennamen, der meine externe IP-Adresse auflöst. Wenn ich zu Hause bin und über mein Heimnetzwerk verbunden bin, möchte ich die Aktualisierung und den Datenaustausch über eine unverschlüsselte Verbindung zu meiner internen (Heimnetzwerk-)IP-Adresse durchführen.
Zu Hause möchte ich weder die Verschlüsselung noch meine externe IP-Adresse verwenden, da beides die Verbindungsgeschwindigkeit verlangsamt (10 MB/s ohne Verschlüsselung und mit interner IP, 1 MB/s mit Verschlüsselung und interner IP und 0,5 MB/s mit oder ohne Verschlüsselung und mit externer IP).
Gibt es eine Möglichkeit, meine Arbeitskopie auf eine andere URL verweisen zu lassen, je nachdem, ob ich mit meinem Heimnetzwerk verbunden bin oder nicht? Oder gibt es eine andere Möglichkeit, das Geschwindigkeitsproblem zu lösen?
Antwort1
Einige Optionen:
- Wenn dies über ssh (
svn+ssh://...
) erfolgt, können Sie Ihre Datei bearbeiten,.ssh/config
um Aliase für Hosts anzugeben. Sie könnten dann ein Skript schreiben, das diese Konfigurationsdatei bei Netzwerkänderungen bearbeitet, sodass der Alias auf den richtigen Hostnamen verweist. - Wenn dies nicht der Fall ist (durch
http
oder so), können Sie einen lokalen DNS-Server ausführen, der einen speziellen Domänennamen auflöst, den Sie je nach Netzwerk, in dem sich der Computer befindet, in die IP des richtigen Domänennamens umwandeln können. - (Wahrscheinlich weniger verrückt als das vorherige) Führen Sie auf Ihrem lokalen Computer an einem Port ein TCP-Relay aus und lassen Sie es auf einen der Server zeigen, je nachdem, in welchem Netzwerk Sie sich befinden. Sie könnten es beispielsweise an Netzwerk 1 binden
localhost:8080
und es an Netzwerk 2 weiterleiten lassen . Dann müssen Sie möglicherweise einen Checkout von dieser Adresse aus durchführen ( ).myserver:80
publicserver:80
svn checkout http://localhost:8080/...
Nur ein paar zufällige Ideen, die sich aber alle wie Workarounds anfühlen. Vielleicht gibt es einen einfacheren Weg.
Oder Sie möchten vielleicht zu einem verteilten Versionskontrollsystem wie Git wechseln, das Ihnen das Pushen auf die gewünschte Remote-Instanz ermöglicht ( git push -u someremote branchname
, wobei someremote
sich auf einen der Server bezieht).
Antwort2
Ich habe gestern ein ähnliches Problem gelöst, sodass Git-Repos auf meinem Laptop mit einer Remote auf meinem Desktop-Computer synchronisiert werden können, ohne dass ich je nachdem, ob ich im LAN oder unterwegs bin, eine andere Remote verwenden muss.
Ich habe es dnsmasq
auf meinem Desktop mit dieser Konfiguration ausgeführt:
domain-needed
bogus-priv
no-poll
local=/localdomain/
addn-hosts=/etc/extra_hosts
/etc/extra_hosts
enthält einen einzelnen Eintrag mit der IP meines Desktops im LAN und dem Domänennamen, der zu meiner externen IP aufgelöst wird, z. B.
192.168.0.72 jwakely.example.com
Bearbeiten Sie dann auf meinem Laptop die NetworkManager-Konfiguration für meine LAN-WLAN-Verbindung auf „Nur DHCP-Adressen“ und legen Sie 192.168.0.72 als primären DNS-Server und meinen Router als sekundären fest (um dies ohne die NetworkManager-GUI zu tun, legen Sie einfach DNS1 und DNS2 und PEERDNS=no fest oder geben Sie die Nameserver /etc/resolv.conf
manuell ein).
Es funktionierte perfekt, nachdem ich daran gedacht hatte, DNS-Abfragen (Port 53) durch die Firewall meines Desktops zuzulassen.
Wenn ich in meinem Heim-LAN bin, verwendet der Laptop den Desktop für DNS-Abfragen und erhält daher die interne IP für jwakely.example.com
, und alle anderen DNS-Abfragen werden an den üblichen DNS-Server meines Desktops weitergeleitet (der zufällig mein ADSL-Router ist). Nur der Laptop verwendet die dnsmasq
Instanz, alle anderen Hosts im LAN verwenden weiterhin wie gewohnt den Router für DNS. Wenn mein Laptop im LAN ist, mein Desktop aber nicht läuft, verwendet der Laptop seinen sekundären DNS-Server und kann die interne IP für nicht abrufen, jwakely.example.com
aber das ist OK, weil die Maschine sowieso nicht läuft.
Antwort3
Ich hoffe, Sie kennen den Befehl von Subversion relocate
. Sie können ihn manuell verwenden. Wenn Sie Hostnamen für den internen und externen Zugriff verwenden, die jeweils nur einen an einem Ort auflösen, erinnert Sie ein SVN-Fehler bei jeder repobezogenen Operation daran, den Hostnamen zu verschieben.
Eine weitere (schmutzige) Idee ist die Verwendung von VPN-Verbindungen in externen Netzen zur AbsicherungZugangzum Server und zur Nutzunggemeinsame unsicherProtokoll für den Repository-Zugriff - im Heimnetz muss man nicht einfach eine VPN-Verbindung aufbauen. Vorteile dieser Methode sind: einzelne URL, Sicherheit auf Anfrage, fehlerfreie Einfachheit