Synology上的版本控管 Git Server + TortoiseGit Client

因為工作上個人的需要,針對程式碼還是得弄個版本控管,要不然開發新功能時如果發生意外,想要退回之前的版本就很頭大了。原本想說應該很簡單(但實際上真的不難),上個週末在家在Synology主機上嘗試安裝Git Server或是GitLab,弄了兩天還是搞得一塌糊塗。安裝GitLab還需要另外安裝Docker,整個跑起來蠻吃系統資源的,再加上一下跟WordPress的Tomcat port相衝,一下web無法連接,所以就放棄他了(要不然它有web管理介面似乎蠻方便的);Git Server則是在還沒弄清楚的時候就瞎試,也是白白浪費了一整天。

結果今天意外上班時試了一下,居然順利OK了,看來做事還是要心平氣和、按部就班(可能是手遊打太多,跟看到怪一樣,想要一打就死,沒打死就整個很急躁)。簡單記錄一下,今天實做的步驟。

Server端

Synology導入Git,在Server端基本上要做幾件事:

  1. 在Synology上安裝「Git Server」套件。
  2. 建立一個Git Repository的目錄,並將要建立的專案目錄建立在這個目錄下。
  3. 在電腦上,透過ssh登入Synology主機(需在「終端機&SNMP」裡開啟SSH登入功能)。進入該專案目錄下後,初始化這個專案的git repo。
Synology Git Server
# Server Step1. 在Synology上安裝「Git Server」套件。
Synology Git Server
# Server Step2. 這個步驟主要是要建立存放Git的位置
  1. 先在「共用資料夾」裡新增一個Git Repository的目錄,假設我們取名「git-repo」
  2. 再在這個目錄下建立專案的目錄,假設我們現在要建立的專案名稱是「TEST_PROJECT」
  3. 資料夾建立後,要記得修改權限。看你之後要用哪一個使用者登入,該使用者要有這個資料夾的讀寫權限。
# Server Step3. 在PC上透過SSH登入Synology主機,並cd到該專案的資料夾下,輸入
git --bare init

這樣,Server端的專案目錄就算建立完成了

Client端

Client端我是使用TortoiseGit,有需要的人可以在右邊下載 → https://tortoisegit.org/

另外,也需要安裝GitHub Desktop version(TortoiseGit會使用一些Git的指令),右邊可以下載 → https://gitforwindows.org/

Client端的動作大概可以分為兩種(以下簡稱為A情境與B情境),一個(A)是你第一次要初始化的上傳(上傳最原始的程式碼版本),一種(B)是Server上已經有程式碼版本,你要直接抓取最新的版本下來。

A情境 初始化的上傳

如果是A情境的話,要做的步驟有:

  1. 在已經有程式碼的資料夾建立Git版本庫
  2. 提交這個Git版本庫

建立Git版本庫

# Client A-Step1.1 在已經有程式碼的資料夾上,點選右鍵,選擇「Git在此建立版本庫」。
# Cleint A-Step1.2 跳出的對話窗,不要勾選「設為純版本庫」。(純版本庫就是存放各版本狀態的資料庫,在我們的情境下,純版本庫是建立在Synology上的)

提交Git版本庫

# 在右鍵點選在專案的程式碼資料夾上,選擇「Git 提交(C) -> “master”…」
# 上面的空白處可以填入一些說明;中間圈圈則是選取哪些檔案要新增進去,如果是全部要新增的話,可以點選粗體字的「全部(A)」;最後再點選下面圈圈裡的「Commit」。
# 真正要來進入推送Code到Git Server的部分,點選「Push」。
# 首先我們要來設定遠地端(Git Server)連線與路徑資訊,點選「Manage」。
# 填入識別名稱,以及URL。URL要包含遠地端的網路位址、帳號、路徑等資訊。
ssh://username@ip:port/路徑

username:登入synology時的帳號

  • ip:ip位址,也可以是domain name
  • port:看你在你的Synology「終端機與SNMP」頁面的port設定是什麼
  • 路徑:該git repo的完整路徑

我們就以剛剛server建立的範例,完整的URL就是

「ssh://username@192.168.9.9:22/volume1/git-repo/TEST_PROJECT」

點選「確定」即可新增完成連線設定。

# 接著,在 Destination的Remote中,選擇剛剛建立的連線設定,再點選「OK」。在推送過程之初,會要你輸入你建立在synology上的使用者帳號密碼(供git server使用,但使用原本既有的帳號也可,記得設定權限就好了),就可以開始推送程式囉!

B情境 Clone伺服器端的程式碼

如果是B情境的話,要做的步驟有:

  1. 複製遠端的Git版本庫
# 在空白處點選右鍵,選取「Git Clone」
# 輸入遠端Git Repository的URL與複製到本地端後的位址,再點選「確定」即可。URL的部分與上面一樣,使用以下的SSH語法格式:
ssh://username@ip:port/路徑
  • username:登入synology時的帳號
  • ip:ip位址,也可以是domain name
  • port:看你在你的Synology「終端機與SNMP」頁面的port設定是什麼
  • 路徑:該git repo的完整路徑

我們就以剛剛server建立的範例,完整的URL就是

「ssh://username@192.168.9.9:22/volume1/git-repo/TEST_PROJECT」

其他

其他的,就還在摸索中了。希望其他需要用到的功能都能不要太難上手,也祝我自己一切順利啦!

其他:

1. 如果在Commit過程出現「the submodule xxx is dirty」的錯誤訊息

→ 代表建立的repository目錄下,還有其他目錄有可能有建過repository(有其他的.git資料夾)

2. 關於Branch的操作,可以參考 這篇