囧囧有神的兔纸

「进修中的」前端攻城湿

© 囧囧有神的兔纸 | Powered by LOFTER

(Linux)服务器部署git + gitolite

(注:官网:https://github.com/sitaramc/gitolite 有时间再重新梳理本文)

  • 准备

一台服务器 - Linux(最好是 Ubuntu 最新版本,比如现在的 Ubuntu 14.04 LTS)

一台个人机 - Unix 内核的都可以(我的是 OS X 10.10.4)


*注:如果不好去服务器旁边操作的话,从个人电脑上ssh到服务器上去也可以的。

*又注:想要 ssh 到服务器,当然前提是服务器上装有 ssh 服务啦!如果没有的话,怎么着也得想招在服务器上 sudo apt-get install openssh-server 一下。

*再注:如果是ssh到服务器上的话,一般都会有缓存在捣乱的。举个栗子,你刚刚 sudo apt-get install git 了一下,然后你会发现,git 怎么也 tab 不出来。不要着急,exit 出来,再重新 ssh 上就可以了。(有没有不用 exit 出来的解决方案啊,谁知道谁知道~)


  • Action!

[服务器 - 默认用户]

1. 安装 git

sudo apt-get install git

2. 创建 git 用户

su -

(是不是按 tab 没有提示很蛋疼呢?目测当前 shell 是sh,可以 bash 一下换成 bash 来继续操作哦。或者可以修改默认 shell,请自行 google。)

[服务器 - root 用户]

useradd -m git

passwd git

3. 安装 gitolite

退出 root 用户:

exit

进入 git 用户:

su git

(如果是 ssh 到服务器上的,这时候你会发现,你 su 不到 git 上。还是因为缓存问题,只能退了重新 ssh 过来。ssh 缓存问题以下不再赘述。)

[服务器 - git 用户]

 

cd ~

递归创建目录:

mkdir -p ~/bin/gitolite/share/gitolite/conf/ ~/bin/gitolite/share/gitolite/hooks/

从 GitHub 上下载官方 Gitolite:

git clone git://github.com/ossxp-com/gitolite.git

cd ~/gitolite/src/

执行:

./gl-system-install ~/bin/gitolite ~/bin/gitolite/share/gitolite/conf/ ~/bin/gitolite/share/gitolite/hooks/

然后会看到提示:


修改配置:

vim ~/bin/gitolite/gl-setup

找到:

GL_PACKAGE_CONF=/usr/share/gitolite/conf

改为:

GL_PACKAGE_CONF=/home/git/bin/gitolite/share/gitolite/conf/

添加系统变量:

echo "PATH=/home/git/bin/gitolite:$PATH" >> ~/.bashrc

重新加载使之生效:

source ~/.bashrc


[客户端 - 默认用户]

cd ~

生成 ssh 密匙:

ssh-keygen -t rsa

把生成的 ssh 公匙传到服务器端:

scp ~/.ssh/id_rsa.pub git@<ip address>:~/tmp/


[服务器 - git 用户]

cd /tmp

将刚传过来的公匙文件名修改成规范化的名字:

mv id_rsa.pub <name>.pub

(如果你的 git 仓库实际位置不在 ~/repositories/ 下,那么你需要将你的仓库实际位置做个软链到 ~/repositories。比如我的仓库位置是 /opt/git/:

ln -s /opt/git ~/repositories

将该公匙添加到 Gitolite: 

cd ~/bin/gitolite/

./gl-setup /tmp/<name>.pub

敲回车键,进行编辑自动打开的 .gitolite.rc 文件

找到:

$GL_PACKAGE_HOOKS = "/usr/share/gitolite/hooks";

改为:

$GL_PACKAGE_HOOKS = "/home/git/bin/gitolite/share/gitolite/hooks";

保存退出后会继续自动执行


==============自此,Gitolite 安装完成==============


4. 权限管理

[客户端 - 默认用户]

找一个合适的目录来存放 git 权限管理的项目(后面的 .git 可省略):

git clone git@<ip address>:gitolite-admin[.git]


现在让我们测试一下权限管理有没有安装好

我们可以 clone 一份 Gitolite 自带的一个代码仓库进行测试:

git clone git@<ip_address>:testing[.git]

然后发现 clone 下来了,而且还有这个提示:

提示是说,你 clone 的项目是空的。

我们 cd 进这个 testing 项目:

cd testing

在里面随便改点什么,比如创建个文件什么的:

vim abc

随便写点什么,保存退出。

将所有新增修改文件添加到HEAD缓存区:

git add .

将所有修改提交到本地缓存:

git commit -m "add file"

将所有提交的版本 push 到服务器:

git push

然后 push 成功


现在让我们修改一下权限:

进入刚刚 clone 下来的 gitolite-admin:

cd gitolite-admin

编辑权限配置文件:

vim conf/gitolite.conf

我将 testing 项目配成我只读:

然后也同样 push 到服务器上(意味着权限将会更改):

git add .

git commit -m "changed"

git push

push 成功后,我们回过头进刚刚 clone 下来的testing 项目

我们 pull 一下:

git pull

理论上没人动过 testing 的话,会显示:

Already up-tp-date.

说明 pull 功能正常。

我们再修改一下刚刚创建的 abc 文件,随便加点什么,然后 add、commit、再 push 到服务器不再赘述。

push 后,会发现:


push 不过去。这说明修改的“只读权限”生效了。


我们看一下连只读权限都不给的情况会怎样。

回到 gitolite-admin:

vim conf/gitolite.conf

 repo    testing

# 下面什么权限都不给

保存、退出、add、commit、push 到服务器,使权限生效。

我们再回 testing 项目里,pull 一下:

git pull


pull 没有成功,说明没有权限的时候,连 pull 都不会生效。

如果有心情的童鞋,可以重新 clone 一下这个 testing,你会发现,clone 不下来。


The End.


建议看下:

https://www.bootcss.com/p/git-guide/

https://www.ruanyifeng.com/blog/2014/06/git_remote.html


顺带一提:各位还在搜 gitosis 的童鞋,放弃吧,gitosis 的作者已经从 09 年开始就放弃对 gitosis 进行维护了。

评论
热度 ( 1 )