標籤:

High Flexibility Remote Development

本文介紹一種 language independent, editor/IDE independent, high flexibility 遠程開發方式。

大部分時候工程師編寫的代碼並不在本機上運行,使用 SublimeText 或是 IDE 編寫 C/C++、shell、Python 等語言代碼,[make, make check], git add, git commit, git push 到 repo,然後在伺服器上 git pull,編譯、運行代碼。如此有以下兩個痛點:

1. C/C++ 這些靜態語言,雖然可在本機上編譯,在 clang 下編譯通過在 gcc 下也可能一堆warning,這個時候需要再修改,git log 就不是很乾凈。

2. Shell Python 等腳本語言不做語法檢查,大多為處理數據而寫,這些數據通常在本機上訪問不到(不方便掛載伺服器磁碟,或者處理數據腳本大多是相對路徑),錯誤通常在運行的時候才會顯現,較難測試。

如果本地(通常是Darwin/Linux 系統)編輯的代碼可以實時同步到目的機器(通常為Linux) 上,那麼便可以避免以上不便。某些 IDE 附帶了這樣的功能[1],今天我們介紹一種 language independent, editor/IDE independent, high flexibility 避免以上兩點尷尬的同步代碼方式。

實時同步腳本 sync.sh,主要使用 fswatch 監測文件變化,rsync 同步目錄

#!/bin/bashnnLOCAL_REPO=`pwd`/test # 設置本地項目地址n# mkdir -p $LOCAL_REPO/{dir1,dir2}n# touch $LOCAL_REPO/tmp1.txtn# touch $LOCAL_REPO/tmp2.txtnnREMOTE_REPO_DIR="[remote username here]@[remote Ip here]:/home/username/xx/" # 設置遠程項目parent目錄nPORT=22 # 設置機器portnnecho "==== LocalRepo [$LOCAL_REPO] -> RemoteRepo [$REMOTE_REPO_DIR/`basename $LOCAL_REPO`]"nnrsync --delete -azvP -e "ssh -p $PORT" --exclude={.DS_Store,dir1} $LOCAL_REPO $REMOTE_REPO_DIRnfswatch -or $LOCAL_REPO | while read f; dontrsync --delete -azvP -e "ssh -p $PORT" --exclude={.DS_Store,dir1} $LOCAL_REPO $REMOTE_REPO_DIRndonen

步驟1.安裝 fswatch

mac 上可使用 brew 快捷安裝

brew install fswatchn

步驟2. 設置ssh免密碼登錄

ssh-keygen -t rsanssh-copy-id [remote username here]@[remote Ip here] # 首次需要輸入密碼n

步驟3. 後台運行 同步腳本 sync.sh (使用tmux screen nohup等)

步驟4. 在 LOCAL_REPO 下開發、編譯,在server下編譯、運行

sync.sh LOG 大致如下:

==== LocalRepo [/Users/xx/test] -> RemoteRepo [user@IP:/home/xx/test]nbuilding file list ...n5 files to considerntest/tmp1.txtn 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=3/5)ntest/tmp2.txtn 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=2/5)ntest/dir2/ntest/dir2/xxn 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=0/5)nnsent 299 bytes received 92 bytes 782.00 bytes/secntotal size is 0 speedup is 0.00n

本地新建空文件xxxx

touch test/dir2/xxxxn

sync.sh LOG

building file list ...n6 files to considerntest/dir2/ntest/dir2/xxxxn 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/6)nnsent 233 bytes received 48 bytes 187.33 bytes/secntotal size is 0 speedup is 0.00n

sync.sh 源於@TonyOuyang 做些許修正、潤飾。

1. 教程 | 一步步從零開始:使用PyCharm和SSH搭建遠程TensorFlow開發環境

推薦閱讀:

為什麼說「函數式語言是沒有調用棧」的,所謂「函數式語言的思維」又是指什麼呢?
「過分」地追求 OOP 有意義嗎?
Golang + Docker = Rikka - 極簡圖床

TAG:编程 |