如何搭建Git服務器

安裝git

首先須要在服務器上安裝git環境,以centos爲例:node

yum install git

而後添加一個用戶,就叫git吧。linux

adduser git
passwd git
input your password...

而後在終端輸入 gitgit

安裝成功

添加信任關係

linux默認是不信任任何機器的,經過ssh登陸其餘主機都須要輸入密碼,創建信任關係的過程就是一臺主機生成公鑰,把公鑰放到其餘主機上,而後這個主機經過ssh登陸其餘機器就不須要輸入密碼了。 在用戶家目錄下默認是沒有.ssh目錄的:github

cd /home/git
ls -al

由於沒有生成過公鑰,生成公鑰和私鑰的命令爲:(-t 的意思是加密算法爲rsa)算法

ssh-keygen -t rsa
ls -al

一路回車,而後在用戶的家目錄下能看到 .ssh 目錄。收集全部須要登陸的用戶的公鑰,就是該用戶的/.ssh/id_rsa.pub文件,把全部公鑰導入/home/git/.ssh/authorized_keys文件。而後就能夠經過ssh username@ip 直接遠程登陸其餘機器,而不須要使用密碼了。因爲git跟遠程倉庫的交互主要依靠http和ssh,這個步驟的目的就是讓遠程提交的時候不須要每次都輸入密碼。shell

問題是window下如何生成這個公鑰呢? 經過windows下的git工具就能夠生成公鑰了,並且生成的公鑰也是在當前用戶的家目錄。windows

scp  C:/Users/semptian/.ssh/id_rsa.pub git@47.95.11.33:/tmp
 ssh git@47.95.11.33 "cat /tmp/id_rsa.pub >> /home/git/.ssh/authorized_keys"

scp是遠程複製的命令,把本地的公鑰文件遠程複製到/tmp下;而後登陸服務器,把/tmp下的文件添加到git用戶的authorized_keys中。 本地經過ssh命令登陸到遠程服務器不要密碼,算是信任關係已經創建。centos

初始化git倉庫

先選定一個目錄做爲遠程git倉庫。服務器

su root
mkdir /srv/repository/sample
cd /srv/repository/sample
git init --bare sample.git
ls -al

把遠程倉庫於本地之間的交互

在本地的一個目錄下運行git Bashssh

git clone git@47.95.11.33:/srv/repository/sample/sample.git

本地代碼的提交:

git init  #初始化本地文件夾爲git倉庫
git add .  #把當前文件夾中的全部文件添加到git倉庫,也能夠添加某一個文件。
git commit -m "commit"  #提交
git remote add origin git@47.95.11.33:/srv/repository/sample/sample.git
#與github倉庫創建遠程鏈接
git push -u origin master  #把本地的項目推送到github遠程倉庫
一、git remote add origin git@47.95.11.33:/srv/repository/sample/sample.git 
  #與遠程倉庫創建遠程鏈接
二、git push -u origin master 
  #把本地的項目推送到github遠程倉庫
一、2兩個命令等價於如下這個命令:
git push -u origin master git@47.95.11.33:/srv/repository/sample/sample.git

若是當前分支與多個主機存在追蹤關係,可使用-u選項指定一個默認主機,這樣後面就能夠不加任何參數使用git push,而後下次就提交以後就能夠直接 git push 了。

#與遠程倉庫同步
git pull --rebase origin master

遇到的一些錯誤

在提交的時候報錯:

$ git commit -m "test_02"
*** Please tell me who you are.
Run
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'semptian@DESKTOP-QVJGTA9.(none)')

提示中git config --global 是全局的配置,單獨爲項目配置的方法(全局和單獨配置都存在的時候會默認使用項目單獨配置的): 1.打開項目所在目錄,找到隱藏的.git文件夾。注意這個文件夾是隱藏的,顯示隱藏出來就行。 2.打開文件夾裏的config文件,推薦用nodepad++打開。 3.添加這三行到文件:

[user]
    name = XXX(本身的名稱)
    email = XXXX(郵箱)

輸入 git log 報錯:

fatal: Not a git repository (or any of the parent directories): .git

須要在git倉庫的根目錄中使用git命令。

push到遠程的時候報錯:

fatal: remote part of refspec is not a valid name in 
       git@47.95.11.33:/srv/repository/sample/sample.git

可能這是第二次提交,添加了遠程倉庫以後能夠直接 git push 。

相關文章
相關標籤/搜索