概述

本文将介绍如何在本地搭建Git服务器。我们知道Git其实是个分布式的版本管理系统,与中心化的版本管理系统如SVN有根本的不同,每个使用者都可以在本地存储一份独立的备份,每个Git的使用者并不会因为没有中心服务器而不能工作(如果是SVN之类的,如果服务器挂了是不能够提交改动的)。然而,在进行团队开发的时候,有时候还是非常需要有一个统一的地方管理唯一的一份完整的代码,这样可以非常方便的进行团队协作开发。这里讲述一种极为简单的搭建本地Git服务器的方法。

如何搭建

准备一台Linux服务器

这里不考虑windows系统,所以请务必准备一台Linux系统,分发版本没有关系,这里假定使用的是Centos 7

配置Git服务器

  • 添加用户
$ sudo adduser git

$ sudo passwd git
Changing password for user git.New password:Retype new password:passwd: all authentication tokens updated successfully.
  • 配置好ssh
$ sudo su git

$ cd

$ mkdir .ssh && chmod 700 .ssh

$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

初始化项目

假定我们有一个叫test的项目需要管理,那么首先我们需要在Git服务器上面创建并初始化该项目。

$ sudo su git

$ cd

$ mkdir test

$ cd test

$ git init --bare
Initialized empty Git repository in /home/git/test

注意,其中git init --bare就是用来初始化Git项目的,--bare参数表示只存储Git的管理文件而不展现test项目本身的文件。查看下初始化之后的目录:

$ ls
branches  config  description  HEAD  hooks  info  objects  refs

可见里面只有Git管理有关的文件。

上传test项目

假定Git服务器IP为10.10.10.10,回到你的工作机器,打开test项目目录,上传项目:

$ cd test

$ git remote add origin git@10.10.10.10:/home/git/mlc

$ git remote -v
origin  git@10.10.10.10:/home/git/mlc (fetch)origin  git@10.10.10.10:/home/git/mlc (push)

如果发现git remote add origin执行失败:

$ git remote add origin git@10.10.10.10:/home/git/mlc
fatal: remote origin already exists.

说明曾经已经设置过origin地址了,可以更改如下:

$ git remote remove origin

$ git remote -v

$ git remote add origin git@10.10.10.10:/home/git/mlc

$ git remote -v
origin  git@10.10.10.10:/home/git/mlc (fetch)origin  git@10.10.10.10:/home/git/mlc (push)

设置好之后,可以上传test项目了:

$ git push origin master
git@10.10.10.10's password:Counting objects: 4, done.Delta compression using up to 8 threads.Compressing objects: 100% (3/3), done.Writing objects: 100% (4/4), 531 bytes | 0 bytes/s, done.Total 4 (delta 0), reused 0 (delta 0)To 10.10.10.10:/home/git/mlc * [new branch]      master -> master

可见,Git服务器已经可以正常工作了。

结语

本文只是简单的介绍原生的Git服务器的搭建,实际上,在现实工作中很多情况下都会有专门的基于Git的管理系统,使用起来非常方便。这里面非开源的最有名当然是Github了,开源的里面目前最好的应该是Gitlab了,参照官方文档,你可以非常方便的搭建自己的Git服务器了。

参考

</div>