本地git倉庫推送到服務器自建的git倉庫實現目錄文件同步教程[自整理]

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                          #據說不改會強制要求登錄用戶和文件擁有者用戶相同
找到以上三個然後把註釋去掉就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用戶的權限就可以!!

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! 感謝大家評論指出問題 謝謝 ~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章