如何搭建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 。

相关文章
相关标签/搜索