备注:

本文参考于廖雪峰老师的博客Git教程。按照其博客进行学习和记录,感激其自私分享,也欢送各位查看原文。

知识点

  • apt-get install git装置git,创立用户adduser username
  • 新用户家(home)目录下.shh/authorized_keys寄存治理连贯到Git近程仓库的用户的私钥。
  • git init --bare reponame.git创立一个空的近程仓库,并将此近程仓库所在目录及子目录的拥有者设置为新用户,chown -R username:usernameGroup sample.git/
  • 批改/etc/passwd文件,禁用用户shell终端登陆。

搭建Git服务器

Git近程仓库实质上和本地仓库没有任何区别,只是它能提供永恒在线服务

如下演示在Ubuntu上搭建Git服务器

  • 装置git:
$ sudo apt-get install git
  • 创立一个git用户,用来运行git服务
$ sudo adduser git
应用passwd git为git用户批改明码。
  • 创立证书登陆

创立证书登陆,和在应用githubgitee时,将公钥上传到近程服务器上一样,Git服务器须要收集须要登陆的用户端的公钥(用户创立的id_rsa.pub),

收集所有须要登陆的用户的公钥,即用户的id_rsa.pub文件。把公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

默认新建的git用户家(home)目录,没有.ssh暗藏目录。可手动创立目录和文件。

新建一个用户,其家目录上面默认生成的文件由/etc/skel目录外面的内容决定(可自行验证)。

同时Ubuntu下新建用户,家(home)目录下的桌面等目录须要应用新用户登陆ubuntu桌面后,才会会生成桌面、图片、文档、下载、音乐等目录。

  • 初始化Git仓库:

选定一个目录作为Git仓库,假如为/srv/sample.git,在/src目录下输出命令

$ sudo git init --bare sample.git[sudo] git 的明码:初始化空的 Git 仓库于 /srv/sample.git/

Git会创立一个空的仓库,且没有工作区,只用于共享,所以不应让用户间接登陆到服务器批改工作区。

服务器Git仓库通常.git结尾。

  • 将目录的所有者改为git
$ sudo chown -R git:git sample.git/
  • 禁用git用户shell登陆

处于平安思考,新建的git用户不容许登陆shell。通过编辑/etc/passwd文件设置。

关上passwd文件找到如下行:

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

将其批改为

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

此时应用git登陆,将会不容许

$ su git明码:fatal: Interactive git shell is not enabled.hint: ~/git-shell-commands should exist and have read and execute access.

su命令用来切换登陆用户

sudo用来获取root管理员权限,执行命令

su [username] 切换到指定用户,不扭转环境变量

su - [username] 切换并扭转环境变量为指定用户(罕用)

git用户能够失常通过ssh应用git,但无奈登陆shell,因为为git用户指定的git-shell每次一登录就主动退出。

  • 克隆近程仓库。

当初就可通过git clone将近程仓库/srv/sample.git/克隆下来。

能够设定一个服务器名拜访克隆近程仓库。如将gitsever设置到本地hosts中,ip为Git服务器的地址。
$ git clone git@gitsever:/srv/sample.gitCloning into 'sample'...The authenticity of host 'gitsever (192.168.104.237)' can't be established.ECDSA key fingerprint is SHA256:SYG7vL********************y597FA.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'gitsever,192.168.104.237' (ECDSA) to the list of known hosts.warning: You appear to have cloned an empty repository.

会提醒克隆了一个空的git仓库,查看仓库内容。

$ cd sample//sample (master)$ ls -altotal 4drwxr-xr-x 1 win7hostsver 197121 0 May  4 14:29 .drwxr-xr-x 1 win7hostsver 197121 0 May  4 14:29 ..drwxr-xr-x 1 win7hostsver 197121 0 May  4 14:29 .git

之后能够应用这个近程库进行git的操作、同步等。

公钥的治理

如上,一个简略的git服务器曾经搭建实现。而后能够增加其余的仓库、其余用户的公钥等进行治理。

  • 公钥门路地位:/home/git/.ssh/authorized_keys

然而对于大型或者多人应用和治理的git服务器,能够应用Gitosis治理公钥。

git服务器仓库的权限治理

git自身是为了托管linux代码而开发的,所以重视开源精力,不反对权限管制。

但Git提供了相干的钩子(hook),能够借此编写一系列脚本来管制对仓库的提交等操作,从而实现管制权限。Gitolite就是一个提供管理权限的工具,有须要可深刻理解