如何搭建Git服务器

安装git

首先需要在服务器上安装git环境,以centos为例:

yum install git

然后添加一个用户,就叫git吧。

adduser git
passwd git
input your password...

然后在终端输入 git

安装成功

添加信任关系

linux默认是不信任任何机器的,通过ssh登录其他主机都需要输入密码,建立信任关系的过程就是一台主机生成公钥,把公钥放到其他主机上,然后这个主机通过ssh登录其他机器就不需要输入密码了。
在用户家目录下默认是没有.ssh目录的:

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,这个步骤的目的就是让远程提交的时候不需要每次都输入密码。

问题是window下如何生成这个公钥呢?
通过windows下的git工具就可以生成公钥了,而且生成的公钥也是在当前用户的家目录。

 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命令登录到远程服务器不要密码,算是信任关系已经建立。

初始化git仓库

先选定一个目录作为远程git仓库。

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

把远程仓库于本地之间的交互

在本地的一个目录下运行git Bash

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远程仓库
1、git remote add origin git@47.95.11.33:/srv/repository/sample/sample.git 
  #与远程仓库建立远程连接
2、git push -u origin master 
  #把本地的项目推送到github远程仓库
1、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 。

原文地址:https://www.cnblogs.com/hello-daocaoren/p/8168973.html