Git 是分散式版控,在任何資料夾下個 git init 指令就能開始管理版本,不管是 Side-Project、小程式,企劃案、設計草稿、專題作業還是碩士論文,Git 就能幫你保留版本回到從前,不用擔心改壞沒法重來。不過,只存在自己電腦風險太高,要是硬碟壞了心血結晶便付之東流,將資料定期推送到伺服器保存才是王道。另外,集體創作或多人專案也一定得靠 Git 伺服器讓團隊成員共享,進行協作開發。

講到 Git 伺服器,Github 自然是當今首選。微軟收購 Github 後送給開發者一份禮物 - 開放三名以下參與者的私有儲存庫 (Private Repository) 免費使用,2020 年 4 月再進一步大放送,取消免費私有儲存庫的協作人數限制。因此,若無其他考量,用 Github 就對了!

對企業用戶而言,受限網路存取政策或禁止內部資料上傳外網,Github 等雲端服務可能不是選項,此時就得考量架設內部 Git 版控伺服器。對 Visual Studio 開發來說,TFS (Team Foundation Server) 除了版控外還提供專案管理、報表、自動建置/測試/部署等功能,絕對是 Git 私服首選。(補充:TFS 自 2019 年起更名為 Azure DevOps Server,不過我每次聽到 Azure DevOps Server 要想一下才能意會,大部分時侯我還是叫它 TFS 比較順口易懂,大家就把它想成某位算命剛改名的朋友,叫新舊名字都通,我猜 TFS 本人不會介意的 XD)

我有個特殊需求,一些上不了檯面的零散小工具,為它們在部門 TFS 伺服器開新專案還另外設權限太隆重,全部丟進某個「庶務二課專案」又太龐雜。尤其是小工具性質偏小團隊或個人專用,丟上全部門的版本伺服器說起來怪怪的,這種情境下,自己架台 Git 小私服供團隊成員共用甚至個人自用,似乎是不錯的例子。

講到「Git 私服」,先介紹最簡單的玩法:完全不用裝軟體,直接用 Windows 的共享資料夾功能就行。

其實,先前在作者(Auhtor)與提交者(Commmitter)差異實驗文章我就有示範過類似技巧了。當時要展示兩個開發者對上游做 pull、push 動作,整個過程卻完全沒用到 Github 或 TFS,而是另開一個 upstream 資料夾,用 git init --bare 建了一個 Bare Repository,這個 upstream 資料夾可當成同步來源。Bare Repository 是一種特殊的儲存庫模式,裡面是平常放在 .git 子資料夾下的內容,它無法 git add、git commit,但可當成其他儲存庫 pull 或 push 的來源。依此原理,我們只需找一台 Windows 主機,建立儲存庫資料夾並 git init --bare,再設定網路分享(記得設定權限,要 pull 它的使用者需有讀取權限,如要 push 則需有寫入權限),Windows 主機就搖身一變成為「Git 私服」了。

以下是我的實地練演:

  1. 在 Hyper-V Windows Server 建立 C:\GitRepos\git-priv-svr-demo,並執行 git init --bare 建立同步專用的 Git Bare Repository:
  2. 將 C:\GitRepos\git-priv-svr-demo 開成網路分享資料夾,先只設定 user1 Read 權限:
  3. 在 Windows 10 客戶端使用 git clone \ip-address\git-priv-svr-demo 即可複製本地端儲存庫並建立遠端關聯。完成 git add、git commit,但 git push 時出現錯誤,原因是剛才故意只開讀取權限,clone、pull 沒問題,push 要寫入時存取會被拒。
  4. 回到 Windows Server 將 user1 權限改成 Read/Write:
  5. 再試一次 git push,成功!

是不是超簡單?

同理,你也可在 Linux 主機建立目錄跑 git init --bare,客戶端可透過 ssh 協定存取 Linux 上的資料夾,原理跟 Windows 分享目錄沒什麼兩樣,這部分教學不少(在 Linux 中架設 Git 伺服器教學(使用 SSH 加密傳輸)by G.T. WangDebian Linux 架設使用 SSH 存取 的 Git Server by Tsung),有需要的同學自己爬文。

以上介紹的做法不需要安裝軟體,但缺點是少了統一的管理介面、每個儲存庫的權限要個別設定,管理工作太瑣碎。要想做到 Github、TFS 等級的管理設定,就要考慮安裝 Git 伺服器,例如:GitLab Server 或較輕巧的 Gogs,前題是需要一台 Linux Server (或跑 Docker);至於 Windows 平台,則有個 Bonobo Git Server,是個用 ASP.NET MVC 寫的「開源專案」,嘿,大家用膝蓋想也知道我會選哪個。下一篇,我們就來玩玩矮黑猩猩 - Bonobo。

This article introduce how to convert Windows to as private Git server with shared folders.


Comments

# by YanagiSiki

黑大倒數第二行的Gogs打成Cogs 另外Gogs有個fork出來的版本叫做Gitea,也很香der,可以試試看:D

# by Jeffrey

to YanagiSiki,謝謝指正,已修改。Gitea 在 FB 也被大家稱讚到爆,我不試用看看估計會引起公憤 XD

# by ByTIM

請問有TFS跟GIT,這兩個版控的優缺點文章嗎?

# by Jeffrey

to ByTIM, 我猜你想問的是這個 https://blog.darkthread.net/blog/tfvc-vs-git/

# by ByTIM

To Jeffrey:感謝回覆,目前在公司待了快三年,也用了快三年的TFVC,曾發生一些程式碼衝突,有時沒很仔細的人工比對,導致漏一些程式碼,再想要不要推薦公司換GIT看看,先研究看看。

# by Jackson281

一些不了檯面的零散小工具 "上"

# by Jeffrey

to Jackson281, 己修正,謝謝。

Post a comment


60 + 30 =