![根據是否在家庭網路中連接到不同的儲存庫 URL](https://rvso.com/image/1303081/%E6%A0%B9%E6%93%9A%E6%98%AF%E5%90%A6%E5%9C%A8%E5%AE%B6%E5%BA%AD%E7%B6%B2%E8%B7%AF%E4%B8%AD%E9%80%A3%E6%8E%A5%E5%88%B0%E4%B8%8D%E5%90%8C%E7%9A%84%E5%84%B2%E5%AD%98%E5%BA%AB%20URL.png)
我的筆記型電腦上有一個 Subversion 工作副本,並且我的 NAS 上有相應的存儲庫。當我出門在外時,我會透過加密連線在網路上更新並提交到解析為我的外部 IP 的網域。當我在家並透過家庭網路連線時,我想透過未加密的連線更新並提交到我的內部(家庭網路)IP。
當我在家時,我不想使用加密或外部IP 位址,因為兩者都會降低連線速度(不加密且使用內部IP 為10 MB/s,使用加密和內部IP 為1 MB/s,以及0.5 MB/s )。
有什麼方法可以讓我的工作副本根據我是否連接到家庭網路來引用不同的 URL?或者有其他方法可以解決速度問題嗎?
答案1
一些選項:
- 如果這是透過 ssh (
svn+ssh://...
) 進行的,那麼您可以編輯.ssh/config
為主機指定別名。然後,您可以編寫腳本,在網路變更時編輯此設定文件,以便別名指向正確的主機名稱。 - 如果不是(透過
http
或其他方式),您可以運行本機 DNS 伺服器來解析特殊域名,您可以根據電腦所在的網路將其組成正確域名的 IP - (可能沒有前一個那麼瘋狂)在本機電腦上的某個連接埠上執行 TCP 中繼,並根據您所在的網路將其指向任一伺服器。例如,您可以將其綁定到網路 1
localhost:8080
並轉送至網路 2 上。myserver:80
publicserver:80
svn checkout http://localhost:8080/...
只是一些隨機的想法,但所有這些都感覺像是解決方法。也許有更簡單的方法。
或者您可能想要切換到分散式版本控制系統,例如 git,它允許您推送到您想要的遠端(git push -u someremote branchname
,其中someremote
指的是其中一台伺服器)。
答案2
我昨天解決了類似的問題,因此我的筆記型電腦上的 git repos 可以與我的桌上型電腦上的遠端同步,而不必使用不同的遠端,具體取決於我是在 LAN 上還是離開家。
我dnsmasq
在桌面上運行,配置如下:
domain-needed
bogus-priv
no-poll
local=/localdomain/
addn-hosts=/etc/extra_hosts
/etc/extra_hosts
包含一個條目,其中包含 LAN 上我的桌面的 IP 以及解析為我的外部 IP 的域名,例如
192.168.0.72 jwakely.example.com
然後在我的筆記型電腦上將LAN wifi 連接的NetworkManager 配置編輯為“僅限DHCP 位址”,並將192.168.0.72 設定為主DNS 伺服器,將路由器設定為輔助伺服器(要在沒有NetworkManager GUI 的情況下執行此操作,只需設定DNS1 和DNS2 並PEERDNS=no,或手動放置名稱伺服器/etc/resolv.conf
)
當我記得允許 DNS 查詢(連接埠 53)通過我的桌面防火牆時,它就完美地工作了。
當我在家庭 LAN 上時,筆記型電腦使用桌上型電腦進行 DNS 查詢,因此取得 的內部 IP jwakely.example.com
,並且所有其他 DNS 查詢都會轉送到我的桌上型電腦常用的 DNS 伺服器(恰好是我的 ADSL 路由器)。dnsmasq
實例時,LAN 上的所有其他主機仍照常使用路由器進行DNS。如果我的筆記型電腦位於 LAN 上,但我的桌上型電腦未運行,則筆記型電腦將使用其輔助 DNS 伺服器,並且無法取得內部 IP,jwakely.example.com
但這沒關係,因為電腦無論如何都未運行。
答案3
我希望您了解 Subversion 的relocate
命令。您可以手動使用它。如果您將使用主機名稱進行內部和外部訪問,這些主機名稱分別只能解析一個位置中的一個,則任何與儲存庫相關的操作都會出現 svn 錯誤,提醒您重新定位
另一個(骯髒的)想法是在外部網路中使用 VPN 連接來確保安全使用權伺服器並使用普遍缺乏安全感用於儲存庫存取的協定 - 在家庭網路中,您只是不使用 VPN 連結。這種方式的優點是:單一URL、按需安全、防錯簡單