私は多数のファイルを含むgitトレースストアを開発しました。このコードはリモートシステムで実行する必要があります。したがって、ローカルで変更を適用するたびに、それをリモートデバイスと同期させ、リモートコンピュータで新しいコードを実行する必要があります。
手動同期ステップを取り除きたいです。私が試したこと:
- 単に
git push
(ローカル)とgit pull
(リモート)の操作を実行すると、うまくいきますが、役に立たないコミットがたくさんあります。また、時には実装したくない小さな変更を試してください。 - リモートディレクトリをローカルにマウントすると
sshfs
機能しますが、ファイルアクセスに多少の遅延があります。構いませんが、PyCharmがこれに依存しており、多くの機能が破損しています。
これを達成するより良い方法はありますか?
ベストアンサー1
結局、私は2つの解決策を見つけました。
- 使用
unison
。これは、リモートサーバーのローカルディレクトリをミラーリングするためのコマンドラインユーティリティです。多くのファイルを扱うのと似ていますrsync
が、より複雑で人間工学的です。彼らgithubリポジトリ非常にアクティブですが、Webページにはほとんど開発が中断されていますが、主な欠点はunison
バックグラウンドで実行されるユーティリティではなく、一度だけ実行されるユーティリティです。cron
定期的に実行するのと同じ機能を使用できますが、unison
これにより長い同期遅延(1分以上)が発生し、手動の競合解決がどのように機能するのかわかりません。 - 使用
lsyncd
。このプログラムは私のユースケースに合わせて設計されています。特定のディレクトリを継続的に監視し、すべての変更をわずか1秒ですぐに同期します。しかし、最後のコミットは2年前なので、長期的にどれだけ実行可能かは分かりません。
lsyncd
引き続き実行されるので結局使用するようになりました。場合は、どのディレクトリをどこでどのように同期するか(たとえば、特定のファイルを無視するかどうか)をlsyncd
示すLuaファイルである「設定ファイル」を提供する必要があります。lsyncd
次の設定ファイルを使用しました。
settings {
nodaemon = true,
statusInterval = 1
}
sync {
default.rsync,
source = "/home/donentolon/github/my-awesome-codebase",
target = "remote-machine:/home/remote-user/my-awesome-codebase",
delay = 1,
exclude = { '/.git', '/.idea' }
}
これはlsyncd
私たちに次のことを伝えます。
- SSHを使用してリモートシステムに接続します(接続する
config
ようにSSHを設定しました)。ssh remote-machine
- 実際の同期に rsync を使用する
- 少なくとも1秒間に1回、ファイルの変更を確認してください(
delay
)。 - トップレベルのgitファイルとPyCharmファイルを同期しない
コンピュータの電源を入れたときに端末を開いて実行すると、実行が開始され、lsyncd my-lsyncd-profile.lua
現在実行中のタスクのリアルタイム更新が印刷されます。私は端末を開いたままにして、lsyncd
一日の終わりに仕事を開発して完了します。
私はリモートディレクトリの変更を追跡するためにgitを使用しません。 gitに変更をコミットするには、git commit
ローカルコンピュータでlsyncd
同期する別のコマンドを実行します。~から。ローカルディレクトリは実際にはローカルディレクトリであり、ローカルにインストールされたリモートディレクトリではないため、インデックス作成などのPyCharm機能は正常に機能します。
バックグラウンドモードがありますが、ステータスチェックが好きなので使用しませんlsyncd
。標準のLinuxメソッドを使用して自動的に起動するように設定できますが、私は手動の方法を好みます。
lsyncd
このページには同様のユースケースのいくつかの選択肢がリストされているため、このソリューションが気に入らない場合は、そのソリューションを確認できます。