本地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

 

  1. 創建一個用戶來運行git服務
  2. .           

[root@iZuf6fazwjb6lb3z82smzoZ ~]# adduser git //創建用戶git

[root@iZuf6fazwjb6lb3z82smzoZ ~]# passwd git //設置用戶git的密碼

 

  1. 需要在你本地創建一個key公鑰證書,說白了就是在本地弄個標識好讓服務器知道是你推送過來
    打開本地git客戶端界面
  2. .           

$ 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用戶的權限就可以!!

 

  1. 接下來,在服務器上將倉庫的文件給克隆下來!

[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

 

  1. 打開后 寫入下邊這些自動執行命令

#!/bin/sh 

export LANG=zh_CN.UTF-8

cd /data/wwwroot/default/svnrepos/hello      //這個是你每次要同步的文件夾

unset GIT_DIR                                //這個很重要! 很多同學沒有寫這個就同步不了,因為git執行自動腳本的時候有執行一些自定義變量,所以我們在這里unset一下

git pull origin ceshi                        //這個當然就是更新了 因為我創建了個ceshi的分支,這個可以更改為你們要同步的分支

 


免責聲明!

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



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