本地git搭建

自己做项目可以用Github,给公司做,用github就不太好了,所以要自己搭建一个git,还是比较简单的,记录如下

安装

以centOS为例

$ sudo yum install git

创建git用户

创建git用户,并为git用户增加sudo权限,再给git用户设个密码

$ sudo adduser git
$ sudo vim /etc/sudoers
  git ALL=(ALL) ALL
$ sudo passwd git

创建证书

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

$ cat /home/user/.ssh/id_rsa.hub
$ vim /home/git/.ssh/authorized_keys

生成rsa key的方法如下

$ ssh-keygen

初始化Git仓库

选定一个git仓库,假定是/srv/project.git,在/srv/目录下执行下面命令

$ sudo git init --bare project.git
$ sudo chown -R git:git project.git

远程代码推送

克隆

$ git clone git@server:/srv/project.git

推送

$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:project.git

远程推送可能出现如下错误:

fatal: remote origin already exists.

解决:

$ git remote rm origin
$ git remote add origin git@gitserver:project.git

代码提交

$ git push origin master

代码提交可能出现如下错误

fatal: 'project.git' does not appear to be a git repository

解决:(首先确保相关文件git用户有读写权限)

$ vim .git/config

更改为下面的样子

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[branch "master"]
[remote "origin"]
    url = git@gitserver:/srv/projects.git
    fetch = +refs/heads/*:refs/remotes/origin/*

由于安全或者其它原因,我们可能会修改默认的SSH服务端口号,这时,在push或pull的时候会报如下错误

ssh: connect to host gitserver port 22: Connection refused

解决:

$ git remote set-url origin ssh://git@domain.com:3333/srv/project.git

也可以通过更改配置文件来解决

$ cat ~/.ssh/config
  host newdomain
  hostname domain.com
  port 3333

禁用shell登陆

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成

$ vim /etc/passwd
  git:x:501:501::/home/git:/usr/bin/git-shell

参考

[1]搭建Git服务器
[2]修改了SSH默认端口之后,如何配置GIT
[3]Linode VPS 小组级 Git 服务器搭建