1. 程式人生 > >Git 學習筆記——管理員篇

Git 學習筆記——管理員篇

文章目錄

關於Git

Git 介紹

Git 是什麼?傻瓜內容跟蹤器(The stupid content tracker)!Git 創始人、Linux 之父 Linus Torvalds 就是這樣介紹 Git 的。

Git 是用於 Linux 核心開發的版本控制工具。與常用的版本控制工具 CVS, Subversion 等不同,它採用了分散式版本庫的方式,伺服器端軟體支援不再是必需項,這使得原始碼的釋出和交流極其方便。 Git 的速度很快,這對於諸如 Linux kernel 這樣的大專案來說自然很重要。 Git 最為出色的是它的合併跟蹤(merge tracing)能力。

實際上核心開發團隊決定開始開發和使用 Git 來作為核心開發的版本控制系統的時候,世界開源社群的反對聲音不少,最大的理由是 Git 太艱澀難懂,從 Git 的內部工作機制來說,的確是這樣。但是隨著開發的深入,Git 的正常使用都由一些友好的指令碼命令來執行,使 Git 變得非常好用,即使是用來管理我們自己的開發專案,Git 都是一個友好,有力的工具。現在,越來越多的著名專案採用 Git 來管理專案開發。

作為開源自由原教旨主義專案,Git 沒有對版本庫的瀏覽和修改做任何的許可權限制。作為管理員,選擇 Git 前一定要明白這句話意味著什麼。

目前 Git 已經可以在 windows 下使用,主要方法有二:msysgit 和 Cygwin。Cygwin 和 Linux 使用方法類似,Windows 版本的 Git 提供了友好的 GUI(圖形介面),安裝後很快可以上手。

Git VS SVN

  1. Git 是分散式的。這是 Git 和其它非分散式的版本控制系統(例如 SVN,CVS 等)最核心的區別;

  2. Git 把內容按元資料方式儲存,而 SVN 是按檔案儲存,所有的資源控制系統都是把檔案的元資訊隱藏在一個類似 .svn 或 .cvs 等的資料夾裡;

  3. Git 分支和 SVN 的分支不同。分支在 SVN 中沒有特別含義,僅是版本庫中的另外的一個目錄;

  4. Git 沒有一個全域性的版本號,而 SVN 有。目前為止這是跟 SVN 相比 Git 缺少的最顯著的特徵;

  5. Git 的內容完整性要優於 SVN。Gti 的內容儲存使用的是SHA-1雜湊演算法,這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。

為什麼選擇Git?

  1. Git 是分散式的版本控制系統,不必依賴於服務端即可工作;
  2. Git 為開發者提供了更多的獨立於團隊之外的空間;
  3. Git 展現了不同於大多數人的軟體開發管理理念,有助於拓展開發者視野。

在Ubuntu上搭建Git伺服器

安裝環境

作業系統:Ubuntu 1404
硬體配置:阿里雲主機,雙核CPU,4G記憶體

安裝 Git

Git 的安裝非常簡單,一般不會出現問題。為了保險起見,安裝之前,先update一下。

[email protected]:~# sudo apt-get update
[email protected]:~# sudo apt-get install git

建立 Git 管理員

如前所述,Git 沒有對版本庫的瀏覽和修改做任何的許可權限制。既然合法的使用者都擁有最高許可權,那麼服務端區別哪一位使用者的服務請求就沒有價值了,因此所有的客戶端訪問伺服器時,使用的是同一個使用者賬號。假定該使用者名稱為git,git同時也是Git伺服器的管理員。

[email protected]:~# sudo adduser git

請務必牢記並妥善保管git使用者的密碼。

禁止 git 使用者從 shell 登入

使用Git伺服器的程式設計師需要知道Git使用者密碼,出於安全考慮,Git伺服器通常會禁止git使用者從shell登入。此舉會導致程式設計師無法從客戶端向伺服器提交SSH證書公鑰,必須通過管理員才能新增SSH證書公鑰,繼而成為合法的Git服務使用者。

編輯/etc/passwd檔案,將

git:x:1000:1001:,,,:/home/git:/usr/bin/git-shell

改為

git:x:1000:1001:,,,:/home/git:/bin/bash

建立 Git 服務路徑

在規劃的路徑下建立git資料夾,並將所有者設定為git使用者。

[email protected]:~# cd /sdyouth
[email protected]:~# mkdir git
[email protected]:~# chown -R git:git git

啟用 RSA 認證

進入 /etc/ssh 目錄,編輯 sshd_config,開啟以下三個配置的註釋:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile	%h/.ssh/authorized_keys

儲存並重啟 sshd 服務:

[email protected]:~# /etc/init.d/ssh restart

建立證書管理 檔案

在 /home/git/ 下建立目錄 .ssh 資料夾,進入該資料夾建立 authorized_keys 證書檔案:

[email protected]:~# cd /home/git
[email protected]:~# mkdir .ssh
[email protected]:~# chown -R git:git .ssh
[email protected]:~# cd .ssh
[email protected]:~# cat > authorized_keys

按 Ctr + d 結束 cat 命令,建立空的authorized_keys 證書檔案。

至此,Git伺服器已經配置完成。不過,要想測試的話,至少還需要兩步:

  1. 建立版本庫(詳見版本庫管理)
  2. 新增使用者(詳見使用者許可權管理)

版本庫管理

建立版本庫

執行以下命令,即可建立專案名稱為 xufive 的版本庫:

[email protected]:~# cd /sdyouth/git
[email protected]:~# sudo git init --bare xufive.git
[email protected]:~# chown -R git:git xufive

刪除版本庫

危險行為,謹慎操作!

[email protected]:~# cd /sdyouth/git
[email protected]:~# sudo rm -rf xufive

使用者許可權管理

增加使用者

正如前文所說,Git 伺服器並不在意你是誰,而更在意你是否合法。管理員只要將合法使用者提供的數字證書公鑰新增到 authorized_keys 證書檔案中,該使用者就可以使用 Git 服務了。使用者如何生成自己的數字證書,在我的另一篇博文《Git學習筆記——程式設計師篇》中有詳細說明。

[email protected]:~# cd /home/git/.ssh
[email protected]:~# cat >> authorized_keys

貼上使用者提供的公鑰檔案內容後,按 Ctr + d 結束 cat 命令。

特別提示:

cat >> authorized_keys 以追加方式寫入從標準輸入裝置輸入的內容
cat > authorized_keys 以覆蓋方式寫入從標準輸入裝置輸入的內容

刪除使用者

只要從 authorized_keys 檔案中刪除使用者的證書,該使用者就不再是合法使用者了。問題的關鍵是如何從 authorized_keys 檔案中找到欲刪除使用者的數字證書。事實上,這不是問題,因為使用者在生成數字證書時,需要輸入一些資訊,這些資訊在數字證書中以明文顯示。