Git學習筆記(10)——搭建Git服務器


本文主要記錄了Git服務器的搭建,以及一些其他的配置,和最后的小總結。


Git遠程倉庫服務器

其實遠程倉庫和本地倉庫沒啥不同,遠程倉庫只是每天24小時開機為大家服務,所以叫做服務器。我們完全可以把自己的某台多余的機器設置成不關機狀態。

但是對於某些視源代碼如生命的商業公司來說,既不想公開源代碼,又舍不得給GitHub交保護費,那就只能自己搭建一台Git服務器作為私有倉庫使用。

搭建Git服務器需要准備一台運行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的apt命令就可以完成安裝。


Git的安裝

現在的Ubuntu已經非常的人性化了,你想要什么,就敲打什么。敲個git,如果安裝了,就會顯示幫助信息,如果沒有,就會把安裝命令顯示出來。如下

$ sudo apt-get install git

詳細的內容,可以參見Git學習筆記開始的部分。


Git服務的搭建

//添加用戶git,(注意這里使用的是adduser,而不是useradd。)
root@myUbuntu:/# adduser git
正在添加用戶"git"...
正在添加新組"git" (1002)...
正在添加新用戶"git" (1002) 到組"git"...
創建主目錄"/home/git"...
正在從"/etc/skel"復制文件...
輸入新的 UNIX 密碼:    //為git設置密碼 
重新輸入新的 UNIX 密碼: 
passwd:已成功更新密碼
正在改變 git 的用戶信息
請輸入新值,或直接敲回車鍵以使用默認值//以下信息隨意填寫,也可以不填寫
    全名 []: gitserver
    房間號碼 []: 100
    工作電話 []: 120
    家庭電話 []: 110
    其它 []: 000
這些信息是否正確? [Y/n] y
root@myUbuntu:/# 
su git
//切換git用戶,查看是否成功
git@myUbuntu:/$
exit
//退出重新登錄,驗證密碼

//git用戶創建成功后,會在home目錄下自動生成git的用戶目錄
//收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰復制粘貼到/home/git/.ssh/authorized_keys文件里,一行一個。
//我的git目錄里沒有這個文件,所以需要手動創建
root@myUbuntu:/home/git# 
mkdir .ssh

root@myUbuntu:/home/git# 
cd .ssh/

root@myUbuntu:/home/git/.ssh# touch authorized_keys
root@myUbuntu:/home/git/.ssh# 
vi authorized_keys
//將公鑰添加進去
//進入根目錄下的srv目錄(本目錄是Linux為了server而建立的,一般里面是空的)
root@myUbuntu:/srv# mkdir sample.git
root@myUbuntu:/srv# ls
sample.git
root@myUbuntu:/srv# 
git init --bare sample.git/
    //注意,在srv目錄下進行git的初始化
初始化空的 Git 版本庫於 /srv/sample.git/
//Git就會創建一個裸倉庫,裸倉庫沒有工作區,因為服務器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到服務器上去改工作區,並且服務器上的Git倉庫通常都以.git結尾。所以,修改sample.git的用戶和用戶組的歸屬
root@myUbuntu:/srv# 
chown -R git:git sample.git/

root@myUbuntu:/srv# ll
總用量 12
drwxr-xr-x  3 root root 4096  5月 13 19:22 ./
drwxr-xr-x 22 root root 4096  4月 29 20:40 ../
drwxr-xr-x  7 
git git
  4096  5月 13 19:22 sample.git/

//OK,到此git服務以基本完成了

shell安全設置

出於安全考慮,我們創建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。

git:x:1001:1001:,,,:/home/git:/bin/bash
改為:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

這樣,git用戶可以正常通過ssh使用git,但無法登錄shell,因為我們為git用戶指定的git-shell每次一登錄就自動退出。(這個我沒有測試。)


Windows端實現庫的克隆

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

C:\Users\joe> cd .\work
C:\Users\joe\work> 
mkdir ubuntugit
    //新建一個工作區

C:\Users\joe\work> cd .\ubuntugit
C:\Users\joe\work\ubuntugit> 
git remote
    //此時沒有連接
fatal: Not a git repository (or any of the parent directories): .git

C:\Users\joe\work\ubuntugit> 
git clone git@10.6.17.30:/srv/sample.git
//直接克隆
Cloning into 'sample'...
Warning: Permanently added '10.6.17.30' (ECDSA) to the list of known hosts.
warning: You appear to have cloned an empty repository.
Checking connectivity... done.    //克隆完成
C:\Users\joe\work\ubuntugit> ls
    Directory: C:\Users\joe\work\ubuntugit
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         5/13/2015   7:31 PM            sample    //已經出現了默認的sample

C:\Users\joe\work\ubuntugit> cd .\sample
C:\Users\joe\work\ubuntugit\sample [master]> 
git remote
//查看連接,OK。
origin
C:\Users\joe\work\ubuntugit\sample [master]>

公鑰管理

如果團隊很小,把每個人的公鑰收集起來放到服務器的/home/git/.ssh/authorized_keys文件里就是可行的。如果團隊有幾百號人,這時,可以用Gitosis來管理公鑰。(這里就不詳細記錄了,我也不會。)


權限管理

有些不但視源代碼如生命,而且視員工為竊賊的公司,會在版本控制系統里設置一套完善的權限控制,每個人是否有讀寫權限會精確到每個分支甚至每個目錄下。因為Git是為Linux源代碼托管而開發的,所以Git也繼承了開源社區的精神,不支持權限控制。不過,因為Git支持鈎子(hook),所以,可以在服務器端編寫一系列腳本來控制提交等操作,達到權限控制的目的。Gitolite就是這個工具。(這個我也不會,就不記錄了。)


小總結

這幾天的學習,還算順利,學習的內容都很基礎,Git的學習暫時告一段落,后期有時間了,還會繼續深入學習的。

    下面是本人收集的一些Git的網站。
  1. 廖雪峰的官方網站:適合初學者,就像我一樣的。
  2. Git的官方網站:可以提高英語水平。
  3. Git中文參考手冊:適合查詢使用。
  4. Git簡明手冊:適合回顧使用。
  5. Git圖解:適合理解Git的原理。(多種語言)
  6. Git簡明指南:一樣的簡單入門級內容。
  7. 國外網友制作的Git Cheat Sheet:這一個是pdf的內容,你點擊,就會跳到我的QQ群,如果需要,請進群。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM