搭建服務器上的GIT並實現自動同步到站點目錄(www)


https://blog.csdn.net/baidu_30000217/article/details/51327289

前言:當我們想要實現幾個小伙伴合作開發同一個項目,或者建立一個資源分享平台的時候,GIT就是一個很好的選擇。當然,既然是一個共有平台,那么把這個平台放到個人計算機上明顯是不合適的,因此就要在服務器上搭建GIT了。另一個需求是,我們在本地開發,然后推送到服務器上,並且自動同步到web站點目錄,這樣就可以直接看到網頁效果了,這就要實現自動同步。下面我帶領大家實現這么一個功能。

如果條件允許的話,大家可以跟着做的(注:我的服務器是centos 7,lamp環境)。

一、在服務器上安裝git:

//yum安裝
yum install -y git

在安裝完之后你可以運行git進行測試,看看是否安裝成功。

二、在服務器上創建裸版本庫:

ps:遠程倉庫通常只是一個裸倉庫(bare repository) — 即一個沒有當前工作目錄的倉庫。因為該倉庫只是一個合作媒介,所以不需要從硬盤上取出最新版本的快照;倉庫里存放的僅僅是 Git 的數據。簡單地說,裸倉庫就是你工作目錄中 .git 子目錄內的內容

我們就在 /home/testgit/ 下創建一個叫 sample.git的裸倉庫吧:

mkdir /home/testgit
cd /home/testgit
git init --bare sample.git
//這里 git init 是初始化空倉庫的意思,而參數 --bare 是代表創建裸倉庫,這個參數一定記得帶上

當運行完上面的最后一句命令時,會有提示:Initialized empty Git repository in /home/testgit/sample.git/
如果你得不到該結果,可能就要回頭檢查哪一步出問題了

三、創建web站點目錄www

如果你已經擁有lamp環境,那么相信你已經了解該目錄,搭建lamp環境詳情可以看我的另一篇博客:centos 7搭建lamp平台環境Centos7 系統下怎么更改apache默認網站目錄

現在我的 web 站點目錄在 /home/www

四、在本地克隆服務器上的裸倉庫:

前提:本地已安裝git
打開 git bash ,我打算在我的D盤下創建一個名為 lsgogit 的版本庫

cd /d
git clone git@115.159.146.94:/home/testgit/sample.git lsgogit

在這里如果沒有配置公鑰的話,會提示輸入密碼,但是我們可能並不知道密碼,那就配置公鑰咯:
1、查看自己計算機的公鑰:

//查看是否有了ssh密鑰,如果沒有密鑰則不會有此文件夾
cd ~/.ssh
ls -al
//如果列出了authorized_keys2 id_dsa known_hosts config id_dsa.pub 則證明你擁有公鑰。

我們需要尋找一對以 id_dsa 或 id_rsa 命名的文件,其中一個帶有 .pub 擴展名。 .pub 文件是你的公鑰,另一個則是私鑰。 如果找不到這樣的文件(或者根本沒有 .ssh 目錄),你可以通過運行 ssh-keygen 程序來創建它們。在 Linux/Mac 系統中,ssh-keygen 隨 SSH 軟件包提供;在 Windows 上,該程序包含於 MSysGit 軟件包中。

首先 ssh-keygen 會確認密鑰的存儲位置(默認是 .ssh/id_rsa),然后它會要求你輸入兩次密鑰口令。如果你不想在使用密鑰時輸入口令,將其留空即可。

現在,進行了上述操作的用戶需要將各自的公鑰發送給任意一個 Git 服務器管理員(假設服務器正在使用基於公鑰的 SSH 驗證設置)。 他們所要做的就是復制各自的 .pub 文件內容,並將其通過郵件發送。 公鑰看起來是這樣的:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAcnTC3A++ginnxr2dvtQa881abjGIzk99KQVg/sPpqvtT3espFKBs/wqrJ9naIPtCswKDMg2tBVgJzg5FimDjI44O072qAftRcjU2EEySlGDDetREOvcDxqcXzf6cAdhnKlYcPk8s46oC+SxhK0zAFZCZNc7z9GcEPOC+ESIettycDw/Bo11WfxAWS0hky2F3rYh5CRr8j7BKRsAvEaAyKwzmM9X0XCRniC2pD0ObX0/SjPwq9Q5/Vjg03muiSo5Bm/xmuHkwb4/uQglBwnaSqEr6YkL9xLMoNsQaJ1TAvTrEaZLNhWzN8iaPyKZMJEzPLX1NgeEx9AEae39N+NsJ LSGO@zhongjin

現在我們回到服務器管理員的身份

由於前面安裝git的時候,centos會默認創建一個git用戶(其他系統貌似需要手動創建),我們進入/home/git/.ssh,里面有一個名為 authorized_keys 的文件,我們分別將其他開發者的公鑰(全選、復制、不能更改!)添加到該文件去,一個開發者的公鑰分一行。

現在我們看看有兩個開發者(個人電腦分別是zhongjin 和 jinjinzhong)的authorized_keys文件:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAcnTC3A++ginnxr2dvtQa881abjGIzk99KQVg/sPpqvtT3espFKBs/wqrJ9naIPtCswKDMg2tBVgJzg5FimDjI44O072qAftRcjU2EEySlGDDetREOvcDxqcXzf6cAdhnKlYcPk8s46oC+SxhK0zAFZCZNc7z9GcEPOC+ESIettycDw/Bo11WfxAWS0hky2F3rYh5CRr8j7BKRsAvEaAyKwzmM9X0XCRniC2pD0ObX0/SjPwq9Q5/Vjg03muiSo5Bm/xmuHkwb4/uQglBwnaSqEr6YkL9xLMoNsQaJ1TAvTrEaZLNhWzN8iaPyKZMJEzPLX1NgeEx9AEae39N+NsJ LSGO@zhongjin
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAcnTC3A++ginnxr2dvtQa881abjGIzk99KQVg/sPpqvtT3espFKBs/wqrJ9naIPtCswKDMg2tBVgJzg5FimDjI44O072qAftRcjU2EEySlGDDetREOvcDxqcXzf6cAdhnKlYcPk8s46oC+SxhK0zAFZCZNc7z9GcEPOC+ESIettycDw/Bo11WfxAWS0hky2F3rYh5CRr8j7BKRsAvEaAyKwzmM9X0XCRniC2pD0ObX0/SjPwq9Q5/Vjg03muiSo5Bm/xmuHkwb4/uQglBwnaSqEr6YkL9xLMoNsQaJ1TAvTrEaZLNhWzN8iaPyKZMJEzPLX1NgeEx9AEae39N+NsJ LSGO@jinjinzhong

 

至此,我們就可以實現不用輸密碼克隆遠程倉庫了:
cd /d
git clone git@115.159.146.94:/home/testgit/sample.git lsgogit

命令運行完后,lsgogit現在就是一個空的倉庫了,現在我們可以在該倉庫下添加文件,然后push到遠程倉庫了。

cd lsgogit
touch index.php
git add index.php
git commit -m "test commit"
git push origin master

如果在這里推送失敗了,極有可能是因為服務器的權限問題,就比如之前我們建的 testgit 文件夾,在這里我的解決方法是:

chown -R git:git testgit

將testgit文件夾以及下面的子文件夾都賦給了git,這樣就保證了推送成功。

第一次push可能會有一些提示,因為裸版本庫還什么都沒有,你可能需要 git push origin master寫全命令,之后就沒必要了,直接 git push 就可以了。

到目前為止,我們完成了第一個任務,實現了一個共享平台,既可拉取數據,又可以推送數據。

四、實現自動同步到站點目錄(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文件夾。

給www目錄授權775:命令:chomd 755 www

 

之前的項目都是”包工頭“文喬學長完成這個過程,現在終於掌握了,有點小高興。。。

本文章參考了
1、AiDandai 服務器上的 Git.md
2、git推送到服務器自動同步到站點目錄


免責聲明!

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



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