![ホームネットワーク内にあるかどうかに応じて異なるリポジトリ URL に接続します](https://rvso.com/image/1303081/%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E5%86%85%E3%81%AB%E3%81%82%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E7%95%B0%E3%81%AA%E3%82%8B%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%20URL%20%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%97%E3%81%BE%E3%81%99.png)
ラップトップに Subversion の作業コピーがあり、NAS に対応するリポジトリがあります。外出中は、外部 IP に解決されるドメイン名への暗号化された接続を介してインターネット経由で更新およびコミットします。自宅にいてホーム ネットワーク経由で接続している場合は、内部 (ホーム ネットワーク) IP への暗号化されていない接続を介して更新およびコミットしたいと思います。
自宅にいるときは、暗号化や外部 IP アドレスを使用しないようにしています。どちらも接続速度を遅くするからです (暗号化なしで内部 IP を使用する場合は 10 MB/秒、暗号化と内部 IP を使用する場合は 1 MB/秒、暗号化の有無にかかわらず外部 IP を使用する場合は 0.5 MB/秒)。
自宅のネットワークに接続しているかどうかに応じて、作業コピーが異なる URL を参照するようにする方法はありますか? または、速度の問題を解決する別の方法はありますか?
答え1
いくつかのオプション:
svn+ssh://...
これが ssh ( )経由の場合、.ssh/config
を編集してホストのエイリアスを指定できます。その後、ネットワークの変更時にこの構成ファイルを編集して、エイリアスが正しいホスト名を指すようにするスクリプトを作成できます。- そうでない場合は(
http
または何かを介して)、コンピュータがどのネットワーク上にあるかに応じて正しいドメイン名のIPまで作成できる特別なドメイン名を解決するローカルDNSサーバーを実行することができます。 - (おそらく前のものよりはマシでしょう) ローカル コンピューターのポートで TCP リレーを実行し、接続しているネットワークに応じてどちらかのサーバーを指すようにします。たとえば、ネットワーク 1 のときはにバインドして転送し
localhost:8080
、ネットワーク 2 のときは にバインドして転送するようにできます。その後、そのアドレス ( ) からチェックアウトを実行する必要があります。myserver:80
publicserver:80
svn checkout http://localhost:8080/...
これらは単なるランダムなアイデアですが、どれも回避策のように思えます。もっと簡単な方法があるかもしれません。
git push -u someremote branchname
または、git のような分散バージョン管理システムに切り替えると、必要なリモート ( 、ここで はsomeremote
サーバーの 1 つを指します)にプッシュできるようになります。
答え2
昨日、同様の問題を解決したので、LAN 上にいるか自宅から離れているかに応じて別のリモートを使用する必要がなく、ラップトップ上の Git リポジトリをデスクトップ マシンのリモートと同期できるようになりました。
私は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
。手動で使用できます。内部アクセスと外部アクセスにホスト名を使用する場合、それぞれ1つの場所でのみ解決されるため、リポジトリ関連の操作でsvnエラーが発生し、再配置するように通知されます。
もう一つの(汚い)アイデアは、外部ネットワークでVPN接続を使用してセキュリティを確保することです。アクセスサーバーに接続して使用する一般的な不安リポジトリアクセス用のプロトコル - 自宅のネットではVPNリンクをアップする必要はありません。この方法の利点は、単一のURL、オンデマンドのセキュリティ、エラーのないシンプルさです。