在我的VPS上安裝git服務。 本文的全部內容都是在阿里雲ECS的ubuntu 14.04的系統下進行的。前端
公司本部的開發項目可不能放在Github的開源倉庫上,放私有倉庫又須要必定的花費,崇尚自由的Coder怎麼能就這樣被束縛了呢?果斷想到把源代碼就放在公司的服務器上,並且還要加上版本管理工具,最好就是Git!接下來就一塊兒來探討怎樣在服務器上搭建Git服務,最後功能足夠豐富的話,加上前端頁面,還能像Github上同樣呢!聽起來高大上,其實什麼東西都是學會以後就很簡單。linux
什麼資料都是開發者原版的最清晰最全面,先po上參考文章: 《Git官方文檔-服務器上的Git-配置服務器》 其實上面的已經夠全面的了,可是對於小白來講,仍是不可以很好地理解,這裏我來補充完善。 PS: 下面約定俗成一下git
終端A 是登陸到遠程服務器的git-bash或其餘的終端 終端B 是本地操做的git-bash或其餘的終端github
安裝git工具:shell
# 更新安裝源
$ sudo apt-get update
# 安裝git工具
$ sudo apt-get install git
複製代碼
配置git:ubuntu
git config --global user.name "Your Name"
git config --global user.email "name@mailname.com"
複製代碼
查看git的配置信息:vim
git config --list
複製代碼
先爲你的linux服務器新建一個git用戶,個人linux服務器是公司租用ali的測試服務器,先登陸到root超級用戶,再操做下面的。PS: 代碼中的用戶提示符$
當作是#
號便可,由於是root超級用戶,不寫成是#
的緣由是會變成註釋 終端Awindows
$ adduser -d /home/git -m git #沒錯,用戶名就是git,若不存在用戶目錄,則會建立
#輸入設置git用戶的密碼,此步驟在此不展現,建議密碼設置複雜點,畢竟是放在網上的
$ chmod 755 /home/git
$ su git
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
複製代碼
PS1: 咱們一旦新建立了用戶,就會自動在/home
目錄下新建一個與用戶名相應的文件夾,通過上述操做,自動新建了/home/git
文件夾,該目錄稱爲git用戶的家目錄,對其餘普通用戶是同樣的道理 PS2: 超級用戶root的家目錄不在/home/
下,而是/root
目錄 假定這裏咱們之前都與Github創建過SSH信任,或者是閱讀過個人《一鍵部署前端代碼到服務器》並會建立本地SSH的祕鑰與公鑰文件,那麼下面繼續,新開一個git-bash終端B 找到咱們的id_rsa.pub公鑰文件目錄,而後遠程拷貝到服務器: 終端Bbash
$ cd ~/.ssh/
$ ls ./id_rsa.pub
$ scp ./id_rsa.pub root@114.xxx.xxx.xxx:/home/git
複製代碼
又回來終端A下繼續操做: 終端A服務器
$ su git #切換到git用戶
$ cd /home/git #進入git用戶的家目錄
$ cat ./id_rsa.pub >> .ssh/authorized_keys #將id_rsa.pub文件內容追加到authorized_keys中
複製代碼
退出SSH登陸,而後從新以git用戶的身份進入便可,再也不須要輸入git用戶的密碼
測試是否能夠免密登陸:
ssh -v git@SERVER
複製代碼
嚴重警告: 1. 必須保證git用戶的根目錄的文件夾權限爲 755 2. 必須保證git用戶的根目錄下的.ssh文件夾權限爲 700 3. 必須保證git用戶的根目錄下的.ssh文件夾中的authorized_keys文件的權限爲 600
以git用戶的身份遠程SSH登陸服務器:
$ ssh git@114.xxx.xxx.xxx
```linux
藉助帶 `--bare` 選項的 `git init` 命令來爲開發者新建一個倉庫,該命令在初始化倉庫時不會建立工做目錄:
```sh
$ cd /home/git #新倉庫要創建在哪一個文件夾本身選,方便組織管理就行,我就直接放在git用戶的家目錄下
$ mkdir testProject.git #建立一個新倉庫目錄
$ cd testProject.git #進入新倉庫目錄
$ git init --bare #初始化該新倉庫
Initialized empty Git repository in /home/git/testProject.git/
複製代碼
至此,一個存在於本身服務器上的git倉庫就搭建好了,該倉庫的地址就爲:git@114.xxx.xxx.xxx:/home/git/testProject.git
,一看,哇靠,跟項目在github上的地址格式是同樣的!例如:git@github.com:ironmaxtory/ironmaxtory.github.io.git
,內心着實激動!如今本身的服務器的/home/git
就至關於一個小型簡陋的Github倉庫了,同理也可以無限的添加新倉庫,保存新的工程項目代碼。
通過上面兩個步驟,就能夠關聯操做服務器上的git倉庫並上傳保存本身的代碼了:
$ cd testProject #在本地先進入本身的工程代碼根目錄
$ git remote add tsOrigin git@114.xxx.xxx.xxx:/home/git/testProject.git #添加遠程服務器的倉庫並取暱稱爲tsOrigin,區別於github上的origin倉庫
$ git push tsOrigin master #向遠程倉庫推送代碼
複製代碼
這個場景必須有並且很常見,公司的項目代碼通常是多人維護的;就算不是一人維護的,那你上傳到測試服務器上的最終目的都是爲了在多臺電腦上能夠下載並上傳提交代碼,因此須要添加多人協做!其實也很簡單,只須要把須要協做的PC上的SSH公鑰追加到git用戶下家目錄的受權鑰匙文件/home/git/.ssh/authorized_keys
中便可,用cat
命令。
須要注意的是,目前全部(得到受權的)開發者用戶都能以系統用戶 git 的身份登陸服務器從而得到一個普通 shell。 藉助一個名爲 git-shell 的受限 shell 工具,你能夠方便地將用戶 git 的活動限制在與 Git 相關的範圍內。該工具隨 Git 軟件包一同提供。 若是將 git-shell 設置爲用戶 git 的登陸 shell(login shell),那麼用戶 git 便不能得到此服務器的普通 shell 訪問權限。 若要使用 git-shell,須要用它替換掉 bash 或 csh,使其成爲系統用戶的登陸 shell。 爲進行上述操做,首先你必須確保 git-shell 已存在於 /etc/shells 文件中,並將git-shell
的位置添加到/etc/shells
目錄中
$ cat /etc/shells # see if `git-shell` is already in there. If not...
$ which git-shell # make sure git-shell is installed on your system.
$ sudo vim /etc/shells # and add the path to git-shell from last command
複製代碼
接下來可使用chsh <username>
來修改任一系統用戶的shell:
$ sudo chsh git # and enter the path to git-shell, usually: /usr/bin/git-shell
複製代碼
這樣,用戶 git 就只能利用 SSH 鏈接對 Git 倉庫進行推送和拉取操做,而不能登陸機器並取得普通 shell。 若是試圖登陸,你會發現嘗試被拒絕,像這樣:
$ ssh git@114.xxx.xxx.xxx
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
複製代碼
每次遠程登陸都要這樣ssh root@114.xxx.xxx.xxx
,很麻煩有沒有?!沒有配域名的並且IP地址複雜後更加噁心有沒有?!來一塊兒配置一下對於本地的服務器的域名!編輯/c/windows/system32/drivers/etc
目錄下的hosts
文件,用editplus
打開便可,以下添加一行:
114.xxx.xxx.xxx (空格) ts.aliyun.com (回車換行)
複製代碼
保存退出,通常來講,並不能當即生效,有以下幾種解決方案,反正我全都用了-.-
之後就能夠這樣:
ssh root@ts.aliyun.com
複製代碼
歡迎關注 [程序猿何大叔] 公衆號你的關注 就是個人動力