Centos6.8搭建Git服務(git版本可選)


搭建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

cd /usr/local/src/ 
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar -zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv && make && sudo make install
cd /usr/local/src/
git-2.10.0

make configure

./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv

make

make install

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’ ,就可以讓該程式擁有執行的權限了。是否很方便?
    View Code

     

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


免責聲明!

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



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