1. 程式人生 > 其它 >linux 下安裝git

linux 下安裝git

Linux下更新git版本

  1. 檢視git版本,解除安裝舊版本(如果沒有安裝git請直接到下一步)
git --version
yum remove git
yum -y install git

伺服器端建立 git 使用者,用來管理 Git 服務,併為 git 使用者設定密碼

[root@localhost home]# id git
id: git:無此使用者
[root@localhost home]# useradd git
[root@localhost home]# passwd git

伺服器端建立 Git 倉庫

設定 /home/data/git/gittest.git 為 Git 倉庫

然後把 Git 倉庫的 owner 修改為 gi

[root@localhost home]# mkdir -p data/git/gittest.git
[root@localhost home]# git init --bare data/git/gittest.git
Initialized empty Git repository in /home/data/git/gittest.git/
[root@localhost home]# cd data/git/
[root@localhost git]# chown -R git:git gittest.git/

客戶端:

下載 Git for Windows


安裝完之後,可以使用 Git Bash 作為命令列客戶端。
安裝完之後,檢視 Git 版本

git --version

客戶端 clone 遠端倉庫

然後從 Linux Git 伺服器上 clone 專案:

git clone [email protected]:/home/data/gittest.git

如果SSH用的不是預設的22埠,則需要使用以下的命令(假設SSH埠號是7700):

git clone ssh://[email protected]:7700/home/data/gittest.git

當第一次連線到目標 Git 伺服器時會得到一個提示:

The authenticity of host '192.168.56.101 (192.168.56.101)' can't be established.
RSA key fingerprint is SHA256:Ve6WV/SCA059EqoUOzbFoZdfmMh3B259nigfmvdadqQ.
Are you sure you want to continue connecting (yes/no)? 

選擇 yes:

Warning: Permanently added '192.168.56.101' (RSA) to the list of known hosts.

此時 C:\Users\使用者名稱.ssh 下會多出一個檔案 known_hosts,以後在這臺電腦上再次連線目標 Git 伺服器時不會再提示上面的語句。

後面提示要輸入密碼,可以採用 SSH 公鑰來進行驗證。

實現自動同步到站點目錄(www):

就比如剛才我們往遠端倉庫推送了index.php檔案,雖然提示推送成功,但是我們現在在伺服器端還看不到效果,心理總是不爽。又比如我寫了個html頁面,我想在站點中馬上看到,那自動同步就派上用場了。
自動同步功能用到的是 git 的鉤子功能,

伺服器端:進入裸倉庫:/home/testgit/sample.git
cd /home/testgit/sample.git

cd hooks

//這裡我們建立post-receive檔案

vim post-receive

//在該檔案裡輸入以下內容

!/bin/bash
git --work-tree=/home/www checkout -f

//儲存退出後,將該檔案使用者及使用者組都設定成git

chown git:git post-receive

//由於該檔案其實就是一個shell檔案,我們還應該為其設定可執行許可權

chmod +x post-receive

現在我們可以在本地計算機中修改index.php檔案,或者新增一個新檔案,提交到遠端倉庫,然後到/home/www下面,看看有沒有我們剛才提交的檔案。
如果你在Git推送的工程中發現推送成功 但是在www目錄下並沒有自己的程式碼,這時候你可要注意了:這是由於資料夾的許可權的原因造成的! 假設你的www目錄的所屬的使用者組為root,你可以將你的git使用者加入這個組;並給git新增寫入許可權,或者其他解決方法,反正你要伺服器上的git使用者有許可權進入www資料夾。

作者:Mr_敬zZ
連結:https://www.jianshu.com/p/7a695fe06b18
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。

第二步 建立 裸倉庫

sudo git init --bare test.git

注意給test.git git使用者許可權 sudo chown -R git:git test.git

第三步 新增鉤子檔案

1、cd test.git/
2、cd hooks/
3、touch post-receive  鉤子檔案

第四步 編輯鉤子shell指令碼

vi post-receive 檔案

第一種方式 使用 --work-tree --git-dir 實現

注:--work-tree 是伺服器工作目錄資料夾(實際執行的線上環境)
--git-dir 是裸倉庫.git 資料夾
建立 --work-tree 資料夾時一定要新增git使用者許可權 否則 執行失敗

#!/bin/bash
IS_BARE=$(git rev-parse --is-bare-repository)
# 如果不是遠端裸倉庫就瑞出
if [ -z "$IS_BARE" ]; then
        echo >&2 "fatal: post-receive: IS_NOT_BARE"
        exit 1
fi

while read oldrev newrev ref
do
        if [[ $ref =~ .*/master$ ]];
        then
                echo "Master ref received.  Deploying master branch to production..."
                git --work-tree=/bydata/www/master --git-dir=/home/srv/test.git checkout -f  'master'
        elif [[ $ref =~ .*/test$ ]];
        then
                 echo "Test ref received.  Deploying master branch to production..."
                git --work-tree=/bydata/www/test --git-dir=/home/srv/test.git checkout -f 'test'
         
        else
                echo "Ref $ref successfully received.  Doing nothing: only the master branch may be deployed on this server."
        fi
done

第二種方式

在服務建立工作環境 使用本地git pull程式碼方式實現

cd /bydata/www 
// 建立線上環境 master 資料夾 
git clone  /home/srv/test.git master 
// 建立測試環境資料夾 test
git clone -b test /home/srv/test.git test (如果有test分支就-b test 沒有就刪掉)


給這兩個資料夾新增 git使用者許可權 否則會不成功
sudo chown -R git:git master/

#!/bin/bash
IS_BARE=$(git rev-parse --is-bare-repository)
# 如果不是遠端裸倉庫就瑞出
if [ -z "$IS_BARE" ]; then
        echo >&2 "fatal: post-receive: IS_NOT_BARE"
        exit 1
fi

while read oldrev newrev ref
do
        if [[ $ref =~ .*/master$ ]];
        then
                echo "Master ref received.  Deploying master branch to production..."
                cd /bydata/www/master 
                env -i git fetch --all 
                env -i git reset --hard origin/master
        elif [[ $ref =~ .*/test$ ]];
        then
                echo "Test ref received.  Deploying Test branch to production..."
                cd /bydata/www/test 
                env -i git fetch --all 
                env -i git reset --hard origin/test
         
        else
                echo "Ref $ref successfully received.  Doing nothing: only the master branch may be deployed on this server."
        fi
done

作者:你是一匹馬
連結:https://www.jianshu.com/p/ab44938b2934
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。