Linux下搭建简易git服务器: 以centos7.2为例的详细教程

Linux下搭建简易git服务器

以centos7.2为例的详细教程

作为一个分布式版本控制系统,git在一台机器上存在原始版本库的基础上,其他的机器可以对原始版本库进行“克隆”和备份。于是,在通常的应用中,往往个人、一个项目组乃至一家企业会搭建一个服务器,长期运行,各人向服务器提交修改并从服务器获取同步。

对于这样的服务器,我们一般有以下的三种选择

  • 使用现有的Github远程仓库:github提供免费/付费的仓库托管服务,使用比较方便,但有一个缺点。在免费情况下大家,虽然修改仓库的权利在自己手上,但是可以公开浏览。这里我们就不叙述,日后会攥写详细的教程。
  • 使用开源软件Gitlab:gitlab是一款利用ruby on rails的开源版本管理系统,可以实现自托管的git项目仓库,并通过web界面进行管理。并且形式和内容非常与github相似。但是在拥有私有化功能的前提下,最低需要1Ghz cpu和1G RAM+swap的配置要求让不少个人和小团队望而却步(实际上这样的配置也比较卡),日后也会撰写相关教程。

Gitlab

  • 搭建一台简易的Git服务器:推荐有私有需求个人和小型团队使用,需要准备一台运行Linux的机器,配置要求512M乃至256M的内存都非常充足。国内常用的ubuntu、debian以及Centos都是比较好的选择,并且他们都提供了比较简便的安装方式。

Debian和ubuntu下安装比较简单,大家可以参考廖雪峰的相关教程:

廖雪峰的博客:搭建Git服务器

笔者的运行环境是centos7.2,相比前两者多了几个步骤。并且这里假设你已经切换到root账户。没有切换也没有关系,有sudo权限的用户账户可以在每条命令前加sudo+空格,例如 yum install -y git需要改写为sudo yum install -y git

ps:查看、修改或者执行某些命令需要root用户的权限,如果不想直接切换到root用户,就可以使用sudo命令。sudo命令用于针对单个命令授予临时权限。sudo仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性。

下面正式开始我们的教程:

第一步,安装git:

Yum是centos下最常用的安装包管理器之一。这里-y参数表示将在安装中默认选择是的提示。安装中将会检查是否已经安装,不会出现重复安装。

第二步,创建一个git用户,用来运行git服务:

-d参数表示用户主目录的位置,对于xxx用户默认创建在/home/xxx之下;-g表示创建的用户所在的用户组,默认创建一个git用户组。这里的指令等价于# useradd git

passwd用于修改密码,会提示输入两次git用户的密码,由于怕别人观察到密码位数,不会有*回馈,输入完回车即可。

第三步,创建证书登陆:

为了保证安全,我们采用ssh的方式连接。我们收集所有需要登录的用户的公钥,即用户主目录的子目录/.ssh/内(linux下root用户的~/.ssh/或windows用户git bash的/c/user/yourname/.sshid_rsa.pub文件的内容,复制后将其添加到/home/git/.ssh/authorized_keys文件内,一行添加一个。

可以使用vim/vi打开:

yourhomedir替换成你的主目录,vim文本编辑器打开后默认处于控制模式,需要按I进入编辑模式(insert mode),在已有内容末尾另起一行,按组合键shift+insert复制剪贴板中内容,按esc退回控制模式,输入: w q写入并离开(: q !是不保存修改并离开)。如果没有这个文件,vi/vim会自动创建。

也可以手动创建目录,创建文件,最后编辑

mkdir指令用于创建目录,把yourhomedir替换成你的主目录。

cd用于切换目录,把yourhomedir替换成你的主目录。

touch用于创建文件

Ps:没有相应密钥对但需要登录的用户创建密钥对的方法:

创建ssh的key:

把邮件地址换成你的邮件地址,使用回车一路默认值。这时候你会发现在你的用户主目录里可以找到子目录.ssh,切换到目录内,可以看到id_rsaid_rsa.pub两个文件:

ls命令用于显示当前目录下文件和目录,加-a参数可以显示隐藏文件和目录。

这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉需要方。

第四步,初始化git仓库

先选定一个目录作为git仓库,不妨设/gitlib/sample.git(注意,服务器仓库一般以.git结尾)在上一级目录,此处为/gitlib/目录下输入命令:

git就会在指定位置创建一个裸仓库,即没有工作区的仓库。

第五步,配置git-shell-commands

将目录/usr/share/doc/git/contrib/git-shell-commands拷贝到git用户下/home/git/,这里/usr/share/doc/gitgit可能带版本号,要自行修改:

第六步,修改权限即所有者

修改服务器创建的的所有者

chown 指令用于修改所有者,-R 参数表示递归的修改所有子文件和目录,冒号前表示用户,冒号后表示用户组。

修改权限:

chmod 指令用于修改文件或目录的访问权限

第七步(可选),禁用git用户的shell登录:

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

改为:

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

ps:这一部分搬运自廖大的教程。

第八步,克隆远程仓库

yourdomain 替换为你的主机地址或ip

如果克隆成功将会出现:

Cloning into ‘sample’…
warning: You appear to have cloned an empty repository.[/shell]

如果不成功且出现

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

的错误提示的解决方法:

1,检查公钥有否输入错误

2,修改 sshd_config 内容

3,重新进行第六步权限修改


如果您觉得本文写的不错,可以在点击下面链接打赏作者或者点个赞
您的支持将帮助作者写出更好的文章

点这里或图片打赏


Tagged with:

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据