Git作为分布式的源码管理工具,已经受到了越来越多人的青睐。和SVN的中心化服务不同,Git服务主要是将各个客户端的源码版本进行同步,类似于共享目录的作用,只是为了方便不同开发人员将各自的版本进行交换,不像SVN那么依赖于服务器。现存的Git服务器有Github,码云之类的,不过如果涉及到代码保密,不想上传到其他第三方公司托管,那么就可以自己搭建一个Git服务。
搭建一个Git服务有多简单呢?本文以一个树莓派为例,描述如何在Linux操作系统上创建Git服务。

安装git

输入命令:

1
$ sudo apt-get install git

创建账号

  1. 添加一个用户,名字叫git, $ sudo adduser git,仅作为git服务使用,这里账号名其实是没有要求的,这个名字只会影响你的项目地址
  2. 修改该账号的默认bash,将该账号的默认bash设置为git-shell,这样该账号只能作为git使用,不可登录
    输入命令sudo vim /etc/passwd,找到这一行(你刚建完账号,应该在最后一行)git:x:1001:1001:,,,:/home/git:/bin/bash
    将其修改为git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell保存

创建项目

可以在任意位置创建一个项目,比如这里选择/home/git
在此目录下执行命令$ sudo git init --bare test.git创建一个test项目
修改该项目的权限为git所有,$ sudo chown -R git:git test.git
到这里你的项目已经创建成功了,地址是git@你的服务器ip:home/git/test.git,如果你的ssh端口不是默认的22,那就使用这个地址ssh://git@你的服务器ip:ssh端口/home/git/test.git

创建访问公钥

现在你去clone这个项目的时候,会提示你输入git的登录密码,为了避免每次push或者pull的时候到要输入密码,你可以把客户端的公钥添加进服务器。

  1. 在客户端执行命令$ ssh-keygen生成公私钥对,如果有的话就不用生成了。生成的文件在用户目录下的.ssh文件夹下面,会有2个文件id_rsaid_rsa.pubid_rsa.pub就是你的公钥,id_rsa是私钥,这个文件内容不要泄露;
  2. 在服务器的/home/git/.ssh下创建文件authorized_keys,如果.ssh目录不存在就创建一个,注意这里的/home/git是你的git账号的工作目录,你要用哪个账号作为git登录,你就到哪个账号的工作目录下;
  3. 将客户端的id_rsa.pub内容粘贴进authorized_keys中,一个客户端占用一行,多个客户端就添加多行。比较坑的是,我用复制粘贴并不会成功,所以采用其他办法:将id_rsa.pub直接传到服务器上,然后执行cat id_rsa.pub >> ~/.ssh/authorized_keys追加到文件中。

结束

到此,一个Git服务已经搭建完毕
使用$ git clone git@你的服务器ip:home/git/test.git把项目克隆到本地即可,随后可以正常push和pull
全部完成之后,后面再添加项目仅需要执行第3个步骤(创建项目)即可。