2015/08/21

將程式加入版本控制

之前開發這 RPi 300 烘豆機外掛,寫了一些 Python 的程式還有 Script,
但卻都沒有做到版本控制,後續在維護上會有問題,
趁著這機會,裝個 git server 來維護。


這邊的命令,大部份都是從 Tsung's Blog 上找來的,
只是根據我的需求,改成我要的參數。

Raspberry Pi 設定:

安裝 git

  sudo apt-get install git-core

建立 local repository:

之前我已將我的控制程式都放在 /home/pi/roaster 下,
因此先將 roaster 目錄加入 git 版控中:
  cd /home/pi/roaster
  git init

接著應該用 git add 來將需要的檔案加入 git
但因為 python 執行會產生 compile 過的 .pyc 檔案,這我不需要加入,
因此在此目錄中加入一個 .gitignore 檔案,裡面就只放一行:
*.pyc

來忽略所有的 pyc 檔,接著才將我要的檔案加入 git(包括 .gitignore):
  git add .

最後將檔案 commit 至 git repository
  git commit

這時 local 端的 repository 已經建立完成
可用 git status 來看目前 git 的狀態
  git status
  # On branch master
  nothing to commit (working directory clean)

可以看到已經存至 git 中,目前的 branch 為 master

建立 Raspberry pi 的 ssh key

建立 RSA key:
  ssh-keygen -t rsa

過程會問檔案儲存位置,就用預設路徑(/home/pi/.ssh/id_rsa)即可。
這命令會產生 id_rsa 和 id_rsa.pub 兩個 Key,接著把 public key 傳到 git server 上:
scp id_rsa.pub user@gitserver.name:/tmp/id_rsa_my.pub

過程需要 user 的密碼,稍後則是要把這 public key 加到 git server 中。

P.S:
  1. gitserver.name 是要作為 git server 的電腦 IP
  2. user 則是在該 server 上的使用者名稱
  3. 要執行上述命令,server 上要先設定好 SSH
  4. 這文章是 git over ssh 的設定方式

Server 設定:

安裝 git

  sudo apt-get install git-core

設定 git 使用者

新增使用者
  sudo adduser git --disabled-password

將 Raspberry Pi 上的使用者 key 加入
  sudo su git
  cd; mkdir .ssh
  cat /tmp/id_rsa_my.pub >> .ssh/authorized_keys

設定 Git repository

在 /usr/local 建立 git repository
  sudo mkdir -p /usr/local/git/roaster.git

設定目錄的權限,設定 owner 為 git
  cd /usr/local
  sudo chown -R git.git git

初始化該目錄
  sudo su git
  cd /usr/local/git/roaster.git
  git init --bare --shared

此時 server 端的 git repository 已建立完成,
下一步則是將 local (Raspberry Pi )上的 repository push 到 server 上

Push 資料到 server 上

在 Raspberry Pi 上,切到之前建立好的 local repository
  cd /home/pi/roaster

建立一個好記名稱,對應到遠端的 git repository,
以下建立一個名為 origin 的名稱:
  git remote add origin git@gitserver.name:/usr/local/git/roaster.git

最後,將 local branch master push 到 origin 這 remote repository 中:
  git push origin master

大功告成
後續就用
  git push origin master

將 local change merge 進 Server

或是用
  git pull origin master

將 remote 的 change merge 進 local 端

沒有留言:

張貼留言