使用 Gitolite 在树莓派上搭建 Git 服务器

版权声明:未经许可,请勿转载! https://blog.csdn.net/weixin_37204973/article/details/81913403

一、远程登录服务器

远程登录方式很多,常用 ssh 或者 putty,这里只介绍下 ssh
ssh远程登录用户名和ip 按实际情况填写

 $ ssh pi@192.168.102.207

使用win7 如果遇到如下问题

$ ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:E13usrfN0xcsMQjXPRWhM/Odq/Z4Idd+vRiCuFuSen4.
Please contact your system administrator.
Add correct host key in /c/Users/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /c/Users/user/.ssh/known_hosts:13
ECDSA host key for 192.168.102.207 has changed and you have requested strict checking.
Host key verification failed.

解决方法:

C:\Users\user\.ssh\known_hosts  

进入上面路径,将对应ip 的公钥删除即可,不可使用 windows 自带的文本编辑器,可选用netepad++

二、同步时间

NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。NTP可以使计算机时钟与 Internet 时间服务器同步。 这意味着可以更新计算机上的时钟,以与时间服务器上的时钟匹配,这有助于确保计算机上的时钟是准确的。它的用途是把计算机的时钟同步到世界协调时间UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。

运行以下命令,启用NTP:

sudo timedatectl set-ntp true

更改时区

sudo dpkg-reconfigure tzdata

其后全选择 None of the above 然后按回车,
再选择 GMT -8
最后查看时间是否正确

pi@raspberrypi:~ $ date

三、安装 vim 和 git

获取最新的软件包

pi@raspberrypi:~ $ sudo apt-get update

安装 vim

pi@raspberrypi:~ $ sudo apt-get -y install vim

安装git

pi@raspberrypi:~ $ sudo apt-get install git

四、创建gitadmin 用户,并生成公钥私钥

创建 gitadmin 用户

pi@raspberrypi:~ $ sudo adduser gitadmin

创建用户会要求输入密码,输入密码后,其它直接回车,使用默认即可
切换至gitadmin 用户

pi@raspberrypi:~ $ su gitadmin  
gitadmin@raspberrypi:/home/pi $ cd ~

生成公钥私钥

gitadmin@raspberrypi:~ $ ssh-keygen

按三次回车,第一次是确认路径,后面是密码和确认密码

将公钥拷贝至 /tmp

gitadmin@raspberrypi:~/.ssh $ cp id_rsa.pub /tmp/gitadmin.pub

五、切换回pi 用户,再创建git 用户

pi@raspberrypi:~ $ sudo adduser git

创建用户会要求输入密码,输入密码后,其它直接回车,使用默认即可

六、安装 gitolite

切换为 git 用户

pi@raspberrypi:~ $ su git  
git@raspberrypi:/home/pi $ cd ~

输入刚才创建用户时的密码
然后克隆 gitolite

git@raspberrypi:~ $ git clone git://github.com/sitaramc/gitolite

再在用户目录下新建bin目录

git@raspberrypi:~ $ mkdir -p bin

执行

git@raspberrypi:~ $ gitolite/install -to bin

设置管理员的私钥

git@raspberrypi:~/bin $ ./gitolite setup -pk /tmp/gitadmin.pub

执行结果如下

Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: /home/git/.ssh missing; creating a new one
(this is normal on a brand new install)
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
(this is normal on a brand new install)

至此git 用户目录下已经有如下目录

git@raspberrypi:~ $ ls

bin   gitolite   projects.list   repositories

七、使用 gitolite 方法

切换至gitadmin 用户

git@raspberrypi:~ $ su gitadmin  
gitadmin@raspberrypi:/home/git $ cd ~

克隆仓库 gitolite-admin

gitadmin@raspberrypi:~ $ git clone git@127.0.0.1:gitolite-admin

修改用户权限

查看目录 gitolite-admin

gitadmin@raspberrypi:~/gitolite-admin $ ls

conf  keydir

这两个目录
conf 管理repo(增删,权限)
keydir 管理SSH用户公钥

添加仓库,或者修改用户权限,都可通过修改 conf 目录下的 gitolite 文件来实现
新增用户,可以通过keydir实现

先看conf

gitadmin@raspberrypi:~/gitolite-admin/conf $ cat gitolite.conf

repo gitolite-admin
      RW+ = gitadmin

repo testing
     RW+ = @all

repo 为 repository 缩写
如果需要添加仓库,按照上面方式书写,再用git 提交即可,如

repo gitolite-admin
     RW+ = gitadmin

repo testing
     RW+ = @all

repo testing2
     RW+ = @all

几种权限组
权限组: Owner
仓库的拥有者,可以对仓库做任何想做的事情,比如push, 修改其它人访问这个仓库的权限,甚至删除,至少需要有一个人

权限组: RW
可读写组, clone, push, pull

权限组: R
可读组, clone, pull

其中 Owner包含 RW, RW权限 包含 R

增加用户

在用户电脑上使用scp 将公钥拷贝至git管理员电脑上,如下

$ scp id_rsa_copy.pub gitadmin@192.168.102.207:~/gitolite-admin/keydir/user.pub

执行结果

[email protected]’s password:
id_rsa_copy.pub 100% 392 129.9KB/s 00:00

执行完成后,在git 管理员电脑上,使用 gitadmin 用户执行

gitadmin@raspberrypi:~ $ cd gitolite-admin/  
gitadmin@raspberrypi:~/gitolite-admin $ git status

执行结果

On branch master
Your branch is up-to-date with ‘origin/master’.
Untracked files:
(use “git add …” to include in what will be committed)

    keydir/user.pub

nothing added to commit but untracked files present (use “git add” to track)

user.pub 就是刚才拷贝的用户公钥

提交改动

gitadmin@raspberrypi:~/gitolite-admin $ git add -A  
gitadmin@raspberrypi:~/gitolite-admin $ git commit -m "add user user"

如下情况是因为没有配置用户名,或者用户邮箱,因为git 的每次改动,都需要记录是谁做的修改

* Please tell me who you are.

Run

  git config –global user.email “[email protected]
  git config –global user.name “Your Name”

to set your account’s default identity.
Omit –global to set the identity only in this repository.

fatal: empty ident name (for <(null)>) not allowed

下面添加用户名及邮箱

gitadmin@raspberrypi:~/gitolite-admin $ git config --global user.name "gitadmin"  
gitadmin@raspberrypi:~/gitolite-admin $ git config --global user.email "gitadmin@raspberrypi"

然后再提交

gitadmin@raspberrypi:~/gitolite-admin $ git commit -m "add user user"

[master d2f096e] add user user
 1 file changed, 1 insertion(+)
 create mode 100644 keydir/user.pub

最后在试一下使用新添加的用户,去克隆git 上的 testing 仓库,如果不需要输入密码,便是成功了

后期如果需要移除仓库,只需将conf 文件中对应的仓库给移除

gitadmin@raspberrypi:~/gitolite-admin/conf $ vim gitolite.conf

并进入git 用户,移除repositories 目录下对应的仓库即可
如test 仓库

git@raspberrypi:~ $ cd repositories/  
git@raspberrypi:~/repositories $ ls  

gitolite-admin.git    test.git    testing.git

git@raspberrypi:~/repositories $ rm -rf test.git/

这样就移除了仓库 test

猜你喜欢

转载自blog.csdn.net/weixin_37204973/article/details/81913403