1.首先,先在服務器上安裝git,如果有git的話就不用走這一步了
yum安裝git
[root@iZuf6fazwjb6lb3z82smzoZ ~]# cd src/
[root@iZuf6fazwjb6lb3z82smzoZ src]# wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[root@iZuf6fazwjb6lb3z82smzoZ src]# rpm -ivh epel-release-5-4.noarch.rpm
Preparing... ########################################### [100%]
package epel-release-5-4.noarch is already installed
[root@iZuf6fazwjb6lb3z82smzoZ ~]# yum list
[root@iZuf6fazwjb6lb3z82smzoZ ~]# yum install -y git
2.創建一個用戶來運行git服務
[root@iZuf6fazwjb6lb3z82smzoZ ~]# adduser git //創建用戶git
[root@iZuf6fazwjb6lb3z82smzoZ ~]# passwd git //設置用戶git的密碼
3.需要在你本地創建一個key公鑰證書,說白了就是在本地弄個標識好讓服務器知道是你推送過來打開本地git客戶端界面
$ ssh-keygen -t rsa //生成key證書公鑰私鑰 一路回車就ok了
$ cat .ssh/id_rsa.pub //打開公鑰
類似圖上這種 然後複製一下
在服務器操作命令
[root@iZuf6fazwjb6lb3z82smzoZ /]# su git //切換git用戶
[git@iZuf6fazwjb6lb3z82smzoZ /]$ cd home //進去home(git用戶的公鑰存放)
[git@iZuf6fazwjb6lb3z82smzoZ home]$ cd git //打開git文件夾
[git@iZuf6fazwjb6lb3z82smzoZ ~]$ cd .ssh //打開公鑰文件夾
[git@iZuf6fazwjb6lb3z82smzoZ .ssh]$ touch authorized_keys //創建公鑰文件
[git@iZuf6fazwjb6lb3z82smzoZ .ssh]$ vim authorized_keys //將剛纔複製的那一串公鑰粘貼進去
如果沒有.ssh文件 需要你在上一步生成祕鑰和公鑰這樣的話,如果是多人需要用到這個用戶的話,就需要每個人把自己電腦上的公鑰給管理員,然後管理員在服務器進行添加就可以,這樣下次登錄就不需要密碼驗證了,直接驗證你電腦上的公鑰即可.
後邊會寫到鉤子自動同步更新,所以這裏生成這個公鑰,同樣在服務器上也要生成一個然後放進.ssh裏邊的authorized_keys裏邊就好
[git@iZuf6fazwjb6lb3z82smzoZ ~]$ chomd 700 .ssh
[git@iZuf6fazwjb6lb3z82smzoZ ~]$ cd .ssh
[git@iZuf6fazwjb6lb3z82smzoZ .ssh]$ chmod 600 authorized_keys
按照上邊給予權限即可!4.這一步特別重要,很多網友都會忽略,導致服務器上公鑰沒作用!
記得切換root用戶,git沒權限!
打開文件/etc/ssh/sshd_config
RSAAuthentication yes #開啓RSA認證功能
PubkeyAuthentication yes #開啓公匙認證
StricModes no #據說不改會強制要求登錄用戶和文件擁有者用戶相同
找到以上三個然後把註釋去掉就ok5.接下來,在服務器上初始化一個git倉庫
[git@iZuf6fazwjb6lb3z82smzoZ svnrepos]$ su root //切換root用戶, 因爲git沒有任何權限
Password:
[root@iZuf6fazwjb6lb3z82smzoZ svnrepos]# git init --bare hello.git //在該目錄初始化一個倉庫,倉庫名叫hello.git
Initialized empty Git repository in /data/wwwroot/default/svnrepos/hello.git/ //你倉庫的地址,記好了後邊要要用到[root@iZuf6fazwjb6lb3z82smzoZ svnrepos]# cd hello.git/
[root@iZuf6fazwjb6lb3z82smzoZ hello.git]# ls
branches config description HEAD hooks info objects refs
5.完事後會創建一個裸倉庫,這個倉庫沒有工作區,因爲只是純粹用來共享而已,所以不讓用戶直接登錄到服務器上去改工作區,並且服務器上的Git倉庫通常都以.git結尾。然後,把git用戶的權限設置爲[root@iZuf6fazwjb6lb3z82smzoZ svnrepos]# chown -R git.git hello.git
[root@iZuf6fazwjb6lb3z82smzoZ svnrepos]# ls -l
total 4
drwxr-xr-x 7 git git 4096 Apr 13 10:39 hello.git
[root@iZuf6fazwjb6lb3z82smzoZ svnrepos]#
6.權限給成功後,可以看出hello.git這個倉庫git也有權限操作了.這時候可以在本地創建個倉庫了
HK04@HK04-PC MINGW64 /d (master)
$ cd hello
HK04@HK04-PC MINGW64 /d/hello (master)
$ git add 1.txt
HK04@HK04-PC MINGW64 /d/hello (master)
$ git commit -m "1.txt"
[master (root-commit) 8d3e977] 1.txt
1 file changed, 1 insertion(+)
create mode 100644 hello/1.txt
好了,現在創建了一個1.txt文件.接下來,推送到服務器上的倉庫$ git remote add origin git@ip:/data/wwwroot/default/svnrepos/hello.git //本地連接遠程庫
連接ok後可以通過 git remote -v 來查看 如果不對可以用 git remote rm origin 來刪除接下來推送到服務器的倉庫
$ git push origin master //推送到遠程倉庫
ok 如果推送成功後 現在服務器倉庫就有剛纔所添加的文件了但是.如果報錯的話! 貼個類似的錯誤
如果是報這個錯誤,是因爲你本地剛纔創建的那個key公鑰已經被匹配或者是沒有該目錄git用戶沒有權限.
可以把本地公鑰刪除了重新再生成或者是服務器倉庫git用戶的權限就可以!!
6.接下來,在服務器上將倉庫的文件給克隆下來!
[git@iZuf6fazwjb6lb3z82smzoZ svnrepos]$ git clone [email protected]:/data/wwwroot/default/svnrepos/hello.git //克隆服務器倉庫數據
克隆後,我們要用git 的鉤子寫個自動執行程序.[git@iZuf6fazwjb6lb3z82smzoZ svnrepos]$ cd hello.git
[git@iZuf6fazwjb6lb3z82smzoZ hello.git]$ cd hooks
[git@iZuf6fazwjb6lb3z82smzoZ hooks]$touch post-receive //創建自動執行文件
[git@iZuf6fazwjb6lb3z82smzoZ hooks]$chmod -R 777 post-receive //給個權限
[git@iZuf6fazwjb6lb3z82smzoZ hooks]$vim post-receive
7.打開後 寫入下邊這些自動執行命令#!/bin/sh
export LANG=zh_CN.UTF-8
cd /data/wwwroot/default/svnrepos/hello //這個是你每次要同步的文件夾
unset GIT_DIR //這個很重要! 很多同學沒有寫這個就同步不了,因爲git執行自動腳本的時候有執行一些自定義變量,所以我們在這裏unset一下
git pull origin ceshi //這個當然就是更新了 因爲我創建了個ceshi的分支,這個可以更改爲你們要同步的分支
寫完保存退出!到這裏基本都可以實現同步了,在本地客戶端推送一個上去然後查看服務器有沒有同步就可以了!
如果沒有的話就是你這中間出了什麼問題了配置錯誤了,改一下就ok! 感謝大家評論指出問題 謝謝 ~