搭建Git服務器需要准備一台運行Linux的機器,本文以Centos6.8純凈版系統為例搭建自己的Git服務。
准備工作:以root用戶登陸自己的Linux服務器。
Part1:安裝依賴庫
[root@localhost ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
[root@localhost ~]# yum install gcc perl-ExtUtils-MakeMaker
Part2:卸載舊版git
加入原先有用yum安裝過git,則需要先卸載一下
[root@localhost ~]# yum remove git
Part3:下載源碼
下載git-2.10.0.tar.gz 到 /usr/local/src
(查找git版本可以到https://www.kernel.org/pub/software/scm/git/下查看git的版本號自行選擇下載)
查看版本方法:
[root@iZbp1ap7v4yegqdgzrh7cuZ ~]# wget -v https://www.kernel.org/pub/software/scm/git/
[root@iZbp1ap7v4yegqdgzrh7cuZ ~]# vi index.html
復制想下載的版本 --> Esc --> :q! --> 回車!
這里我選擇下載git-2.10.0.tar.gz
[root@localhost ~]# cd /usr/local/src
[root@localhost ~]# wget https://www.kernel.org/pub/software/scm/git/git-2.10.0.tar.gz
Part4:解壓、編譯和安裝
[root@localhost ~]# tar -zvxf git-2.10.0.tar.gz git-2.10.0
Part5:將git目錄加入PATH
[root@localhost ~]# echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/bashrc
[root@localhost ~]# source /etc/bashrc
安裝成功后就可以查看到git版本了。
[root@localhost ~]# git --version
git version 2.10.0
Part6:創建git賬號並設置密碼
[root@localhost ~]# useradd -m git
[root@localhost ~]# passwd git
Changing password for user git.
New password:
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
Part7:創建git倉庫並初始化
[root@localhost ~]# mkdir -p /home/git/repositories/test.git
[root@localhost ~]# cd /home/git/repositories/test.git
[root@localhost test.git]# git --bare init
Initialized empty Git repository in /home/git/repositories/test.git/
Part8:給git倉庫目錄設置用戶和用戶組並設置權限
[root@localhost test.git]# chown -R git:git /home/git/repositories
[root@localhost test.git]# chmod 755 /home/git/repositories
面試題:
一次面試被問到如何改變目錄的用戶和用戶組
解答:改變所屬群組:chgrp 這個指令就是change group的縮寫。不過要記住,要被改變的群組名稱必須要在/etc/group檔案內存在才行,否則就會顯示錯誤。
-
chgrp [-R] dirname/filename.... 改變檔案擁有者:chown 這個指令就是change owner的縮寫。使用者必須是已經存在的系統中的賬號,也就是在/etc/passwd 這個檔案中有記錄的使用者名稱才能改變。 chown 的用途其實還是蠻多的,他還可以順帶直接修改群組的名稱 chown [-R] 賬號名稱 檔案或者目錄 chown [-R] 賬號名稱:群組名稱 檔案或者目錄 選項或者參數 -R :進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有檔案都變更 改變權限:chmod,但是權限的設定方法有兩種,分別可以使用數字或者符號來進行權限變更。--摘錄自鳥哥的linux私房菜 數字類型改變檔案權限 Linux檔案的基本權限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權限, 先復習一下剛剛上面提到的資料:檔案的權限字元為:‘-rwxrwxrwx’, 這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下: r:4 w:2 x:1 每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是: owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others= --- = 0+0+0 = 0 所以等一下我們設定權限的變更時,該檔案的權限數字就是770啦!變更權限的指令chmod的語法是這樣的: [root@www ~]# chmod [-R] xyz 檔案或目錄 選項與參數: xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。 -R : 進行遞回(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更 舉例來說,如果要將.bashrc這個檔案所有的權限都設定啟用,那么就下達: [root@www ~]# ls -al .bashrc -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod 777 .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc 那如果要將權限變成‘ -rwxr-xr-- ’呢?那么權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下達‘ chmod 754 filename’。 另外,在實際的系統運作中最常發生的一個問題就是,常常我們以vim編輯一個shell的文字批次檔后,他的權限通常是 -rw-rw-r-- 也就是664, 如果要將該檔案變成可執行檔,並且不要讓其他人修改此一檔案的話, 那么就需要-rwxr-xr-x這樣的權限,此時就得要下達:‘ chmod 755 test.sh ’的指令啰! 另外,如果有些檔案你不希望被其他人看到,那么應該將檔案的權限設定為例如:‘-rwxr-----’,那就下達‘ chmod 740 filename ’吧! 例題: 將剛剛你的.bashrc這個檔案的權限修改回-rw-r--r--的情況吧! 答: -rw-r--r--的分數是644,所以指令為: chmod 644 .bashrc 符號類型改變檔案權限 還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others三種身份啦!那么我們就可以藉由u, g, o來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那么讀寫的權限就可以寫成r, w, x啰!也就是可以使用底下的方式來看: chmod u g o a +(加入) -(除去) =(設定) r w x 檔案或目錄 來實作一下吧!假如我們要‘設定’一個檔案的權限成為‘-rwxr-xr-x’時,基本上就是: user (u):具有可讀、可寫、可執行的權限; group 與 others (g/o):具有可讀與執行的權限。 所以就是: [root@www ~]# chmod u=rwx,go=rx .bashrc # 注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空白字元! [root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc 那么假如是‘ -rwxr-xr-- ’這樣的權限呢?可以使用‘ chmod u=rwx,g=rx,o=r filename ’來設定。此外,如果我不知道原先的檔案屬性,而我只想要增加.bashrc這個檔案的每個人均可寫入的權限, 那么我就可以使用: [root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod a+w .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc 而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限,則: [root@www ~]# chmod a-x .bashrc [root@www ~]# ls -al .bashrc -rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc 知道 +, -, = 的不同點了嗎?對啦! + 與 – 的狀態下,只要是沒有指定到的項目,則該權限‘不會被變動’, 例如上面的例子中,由於僅以 – 拿掉 x 則其他兩個保持當時的值不變!多多實作一下,你就會知道如何改變權限啰! 這在某些情況底下很好用的~舉例來說,你想要教一個朋友如何讓一個程式可以擁有執行的權限, 但你又不知道該檔案原本的權限為何,此時,利用‘chmod a+x filename’ ,就可以讓該程式擁有執行的權限了。是否很方便?
Part9:限制git賬號的ssh連接
查找git-shell所在目錄
[root@localhost ~]# whereis git-shell
git-shell: /usr/src/git-2.10.0/git-shell
編輯passwd文件
[root@localhost ~]# vi /etc/passwd
找到這一行
git:x:500:500::/home/git:/bin/bash
將最后的/bin/bash改為:git-shell的目錄 /usr/src/git-2.10.0/git-shell 如下:
git:x:500:500::/home/git:/usr/src/git-2.10.0/git-shell
Esc --> :wq! --> 回車!
完成搭建,去克隆提交試試吧!
clone地址:
ssh://git@服務器ip地址:端口/home/git/repositories/test.git
附加:以后每次新建倉庫時,只需執行上面Part7、8即可!
Part10:后續
----------------------------------------------
配置git 用戶和用戶郵箱
git config --global user.name ""
git config --global user.email ""
---------------------------------------------------------2018.01.02------------------------------------------
mkdir m
cd m
git init
git remote add origin /home/repos/m.git
git fetch
git checkout master
-------------------------------------------------------------end-----------------------------------------------
移動項目代碼
cp -r 項目備份目錄/. 項目目錄
-----------------------------------------------
設置項目用戶和用戶組
chown -R git:git 項目目錄
-----------------------------------------------
提交項目到裸倉庫
git add .
git commit -m "init"
git push origin master
-----------------------------------------------
使用鈎子自動執行shell腳本進行同步項目代碼
cd 裸倉庫目錄/hooks
vi post-receive
#!/bin/sh
cd 項目目錄
unset GIT_DIR
git pull origin master
--------------------------------------------2018.01.02----------------------------------------
chmod +x post-receive
------------------------------------------------end----------------------------------------------
配置免秘鑰登錄
遠程服務器設置
修改/etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /root/.ssh/authorized_keys
啟用這三行,然后重啟service sshd restart
設置.ssh目錄權限
chmod 700 -R .ssh
------------------------------------------------------------
本地設置
本地安裝git bash
本地生成ssh秘鑰
cd ~/.ssh
ssh-keygen -t rsa -C “739xxxxx@qq.com”
vi ~/.ssh/config
Host XXX
HostName xxx.xxx.xxx.xxx
Port 22
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
服務器端認證
vi /root/.ssh/authorized_keys
粘貼本地生成的秘鑰如id_rsa.pub
------------------------------------------------------------
獲取遠程項目
git clone ssh://git@xxx.xxx.xxx.xxx/xxx/xxx/xxx.git
出現
fatal: Could not read from remote repository.錯誤
解決辦法,修改sshd_config
AuthorizedKeysFile /home/git/.ssh/authorized_keys
修改/home/git 700
/home/git/.ssh 700
/home/git/.ssh/authorized_keys 644
/root/.ssh/id_rsa 600
/root/.ssh 700
設置后成功獲取遠程裸版本庫
git clone ssh://git@xxx.xxx.xxx.xxx/xxx/xxx/xxx.git