共计 2362 个字符,预计需要花费 6 分钟才能阅读完成。
备注:
本文参考于廖雪峰老师的博客 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 用户批改明码。
- 创立证书登陆
创立证书登陆,和在应用 github
或gitee
时,将公钥上传到近程服务器上一样,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.git
Cloning 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)? yes
Warning: 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 -al
total 4
drwxr-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 就是一个提供管理权限的工具,有须要可深刻理解