linux 下安裝git
Linux下更新git版本
- 檢視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 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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。