本文主要記錄了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 7git 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的網站。
- 廖雪峰的官方網站:適合初學者,就像我一樣的。
- Git的官方網站:可以提高英語水平。
- Git中文參考手冊:適合查詢使用。
- Git簡明手冊:適合回顧使用。
- Git圖解:適合理解Git的原理。(多種語言)
- Git簡明指南:一樣的簡單入門級內容。
- 國外網友制作的Git Cheat Sheet:這一個是pdf的內容,你點擊,就會跳到我的QQ群,如果需要,請進群。