- 首先,先在服務器上安裝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
- 創建一個用戶來運行git服務
- .
[root@iZuf6fazwjb6lb3z82smzoZ ~]# adduser git //創建用戶git
[root@iZuf6fazwjb6lb3z82smzoZ ~]# passwd git //設置用戶git的密碼
- 需要在你本地創建一個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 #據說不改會強制要求登錄用戶和文件擁有者用戶相同
找到以上三個然后把注釋去掉就ok
5.接下來,在服務器上初始化一個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用戶的權限就可以!!
- 接下來,在服務器上將倉庫的文件給克隆下來!
[git@iZuf6fazwjb6lb3z82smzoZ svnrepos]$ git clone git@106.15.44.166:/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
- 打開后 寫入下邊這些自動執行命令
#!/bin/sh
export LANG=zh_CN.UTF-8
cd /data/wwwroot/default/svnrepos/hello //這個是你每次要同步的文件夾
unset GIT_DIR //這個很重要! 很多同學沒有寫這個就同步不了,因為git執行自動腳本的時候有執行一些自定義變量,所以我們在這里unset一下
git pull origin ceshi //這個當然就是更新了 因為我創建了個ceshi的分支,這個可以更改為你們要同步的分支