在工作中需要在不同的成员之间共享一些文件或者需要将自己的文件在公司和家庭之间共享的时候,git是一个很有用的工具。目前有很多可以提供git server服务的网站,github是其中最出名的一个,但是github免费托管的只能是public项目,如果是私有的项目,需要每个月7美金的费用。
另外一个可选的方式是gitlab,gitlab的社区版有非常好的接近于一键式的安装方式可以让我们很快搭建起来一个很成熟的功能强大的代码和文件托管系统。gitlab社区版是免费的。
我在工作的项目中使用的就是gitlab,功能很强大,也非常稳定。但是当我需要在公司和家庭之间共享一些自己写作的文档的时候,我不希望这些文档被其他人看见,而且恰好我有一台自己的vps可用。因为我需要的功能比较简单,只需要做文档管理即可,而且vps的性能很一般,这种情况下gitlab并不适用。最好的方式就搭建一台纯的git server.下面是简单的步骤。
安装git:
vps是ubunt vm, 可以用apt-get安装。
$ sudo apt-get install git
创建用户:
$ sudo adduser git
使用公钥登录
收集所有需要使用的电脑中的公钥,就是~/.ssh目录下的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
初始化Git仓库:
先选定一个目录作为Git仓库,假定是/home/git/sample.git,在/home/git目录下输入命令:
$ sudo git init --bare sample.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 clone git@server:/home/git/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
添加已经存在的目录到仓库中
$ git init
Initialized empty Git repository in /home/test/projects/docbook/.git/
$ ls
linux monitor security tools work
$ git add .
k$ git commit -m "Init"
[master (root-commit) d5216e6] Init
14 files changed, 746 insertions(+)
....
$ git remote add origin git@server:/home/git/docbook.git
$ git remote -v
origin git@172.104.119.148:/home/git/docbook.git (fetch)
origin git@172.104.119.148:/home/git/docbook.git (push)