在个人服务器上搭建git仓库

在个人服务器上搭建git仓库


github是对于可公开的代码来说是一个非常完美的托管点,然而我们往往会有一些东西不希望是公开的,GitHub的私有仓库我又不想去付费,其他的仓库又不想去用,所以就直接自己来折腾一个私有Git仓库了。其实整个过程非常简单,十分钟就能搞定。

安装git

以下操作均在root用户权限下操作,如果非root登陆可以在命令之前加上sudo

CentOS

$ yum install git

Debian类系统

$ apt-get install git

创建git用户

$ adduser -d /home/git -m git

创建证书登陆

创建密匙文件

# 切换为用户git
$ su git
# 创建ssh密匙文件夹并创建密匙保存文件
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

导入用户密匙

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

示例:

# 生成key
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/git/.ssh/id_rsa):Evan_key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
# 输入key文件名和密码后会在目录下生成Evan_key(私匙)、Evan_key.pub(公匙)
# 导入公匙(私匙自己保存)
$ cat Evan_key.pub >> /home/git/.ssh/authorized_keys

初始化Git仓库

先选定一个目录作为Git仓库,假定是/home/git/sample.git,在/home/git目录下输入命令:

$ git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。如果上述初始化仓库的操作不是以git用户运行的,则还需要把owner改为git:

$ sudo chown -R git:git sample.git

禁用shell登陆

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

克隆远程仓库

设置用户

$ git config --global user.name "Git账号"
$ git config --global user.email "Git邮箱"

设置ssh私匙与服务器

编辑~/.ssh/config(Windows系统下也是用户目录),通过这个配置文件可以指定不同网站(HostName)的用户名(User)、端口(Port)、私匙文件路径(IdentityFile)、认证方式(PreferredAuthentications)等。

Host example_domain.com
    HostName example_domain.com
    User git
    PreferredAuthentications publickey
    IdentityFile /x/ssh/id_rsa_on_example_domain
    Port 1234
Host example_domain1.com
    HostName example_domain1.com
    User git
    PreferredAuthentications publickey
    IdentityFile /x/ssh/id_rsa_on_example_domain1
    Port 1234

克隆仓库

在按上述步骤设置了~/.ssh/config文件的情况下,可以通过 git clone命令克隆远程仓库了,在各自的电脑上运行:

# 访问example_domain.com仓库的时候自动使用`~/.ssh/config`下对应网站的用户名和端口
$ git clone example_domain.com:/home/git/sample.git

如果没有设置~/.ssh/config文件,也可以手动添加私匙,然后通过ssh-agent来管理运行:

# 启动ssh-agent
eval $(ssh-agent -s)
# 添加私匙到ssh-agent(根据自己私匙的位置和名称替换,我这里是id_rsa)
ssh-add ~/.ssh/id_rsa
# 克隆远程仓库
git clone ssh://git@server_ip_or_domainname:port/home/git/sample.git

管理公匙与权限

如团队非常多或者对权限要求很高,可以采用如下的软件:

  • 公匙:Gitosis
  • 权限:Gitolite

新建私有仓库

后续新建私有仓库只要按照初始化Git仓库步骤操作即可。

参考

[1] 廖雪峰大神的搭建Git服务器的复制,结合了一点点自己的实际情况。

[2] 关于Git也可以看看廖雪峰的Git教程

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注