服务器环境如下:
➜ ~ neofetch
`.::///+:/-. --///+//-:`` pi@raspi2b
`+oooooooooooo: `+oooooooooooo: ----------
/oooo++//ooooo: ooooo+//+ooooo. OS: Raspbian GNU/Linux 11 (bullseye) armv
`+ooooooo:-:oo- +o+::/ooooooo: Host: Raspberry Pi 2 Model B Rev 1.1
`:oooooooo+`` `.oooooooo+- Kernel: 6.1.21-v7+
`:++ooo/. :+ooo+/.` Uptime: 1 hour, 53 mins
...` `.----.` ``.. Packages: 624 (dpkg)
.::::-``:::::::::.`-:::-` Shell: zsh 5.8
-:::-` .:::::::-` `-:::- Terminal: /dev/pts/1
`::. `.--.` `` `.---.``.::` CPU: BCM2835 (4) @ 1.000GHz
.::::::::` -::::::::` ` Memory: 70MiB / 921MiB
.::` .:::::::::- `::::::::::``::.
-:::` ::::::::::. ::::::::::.`:::-
:::: -::::::::. `-:::::::: ::::
-::- .-:::-.``....``.-::-. -::-
.. `` .::::::::. `..`..
-:::-` -::::::::::` .:::::`
:::::::` -::::::::::` :::::::.
.::::::: -::::::::. ::::::::
`-:::::` ..--.` ::::::.
`...` `...--..` `...`
.::::::::::
`.-::::-`
添加git用户
服务器添加git用户并设置密码
sudo useradd -m git
➜ ~ sudo passwd git
New password:
Retype new password:
passwd: password updated successfully
设置公钥
本地公钥上传到服务器
$ scp ~/.ssh/id_ed25519.pub pi@raspi2b:
pi@raspi2b's password:
id_ed25519.pub 100% 96 6.9KB/s 00:00
设置公钥,将文件名改为自定义的用户名
➜ ~ sudo cp id_ed25519.pub /home/git/git.pub
➜ ~ chown -R git:git /home/git/*
➜ ~ sudo chown -R git:git /home/git/*
➜ ~ ll /home/git
total 8.0K
-rw-r--r-- 1 git git 96 Jun 10 16:11 git.pub
➜ ~
下载安装gitolite
# 切换git用户
bbq@raspi2b:~ $ su - git
密码:
# 下载gitolite源码
git@raspi2b:~ $ git clone https://github.com/sitaramc/gitolite
正克隆到 'gitolite'...
remote: Enumerating objects: 9791, done.
remote: Counting objects: 100% (29/29), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 9791 (delta 12), reused 8 (delta 8), pack-reused 9762 (from 2)
接收对象中: 100% (9791/9791), 3.09 MiB | 1.43 MiB/s, 完成.
处理 delta 中: 100% (6049/6049), 完成.
# 安装gitolite
git@raspi2b:~ $ sudo ./gitolite/install -to /usr/local/bin/
# 设置gitolite
git@raspi2b:~ $ gitolite setup -pk git.pub
提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
提示:配置使用初始分支名,并消除这条警告,请执行:
提示:
提示: git config --global init.defaultBranch <名称>
提示:
提示:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
提示:可以通过以下命令重命名刚创建的分支:
提示:
提示: git branch -m <name>
已初始化空的 Git 仓库于 /home/git/repositories/gitolite-admin.git/
提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
提示:配置使用初始分支名,并消除这条警告,请执行:
提示:
提示: git config --global init.defaultBranch <名称>
提示:
提示:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
提示:可以通过以下命令重命名刚创建的分支:
提示:
提示: git branch -m <name>
已初始化空的 Git 仓库于 /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@raspi2b:~ $
安装完成后,我们可以看到默认系统建立了两个repo。
git@raspi2b:~/repositories $ ls
gitolite-admin.git testing.git
我们试着把testing.git
pull下来操作下。
$ git clone git@raspi2b:testing.git
Cloning into 'testing'...
warning: You appear to have cloned an empty repository.
alair@op36 MINGW64 /d/gits
$ cd testing/
alair@op36 MINGW64 /d/gits/testing (master)
$ ls
alair@op36 MINGW64 /d/gits/testing (master)
$ touch testfile
alair@op36 MINGW64 /d/gits/testing (master)
$ git add .
alair@op36 MINGW64 /d/gits/testing (master)
$ git commit -m "update"
[master (root-commit) e7ac441] update
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testfile
alair@op36 MINGW64 /d/gits/testing (master)
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 199 bytes | 199.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To raspi2b:testing.git
* [new branch] master -> master
alair@op36 MINGW64 /d/gits/testing (master)
$
gitolite设置用户和repo
管理添加新的repo和用户
gitolite通过一个名为gitolite-admin.git
来进行管理,我们可以把他pull下来看下
alair@op36 MINGW64 /d/gits
$ git clone git@raspi2b:gitolite-admin.git
Cloning into 'gitolite-admin'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.
$ ls -Rl gitolite-admin/
gitolite-admin/:
total 0
drwxr-xr-x 1 alair 197121 0 Jun 10 23:21 conf/
drwxr-xr-x 1 alair 197121 0 Jun 10 23:21 keydir/
gitolite-admin/conf:
total 1
-rw-r--r-- 1 alair 197121 82 Jun 10 23:21 gitolite.conf
gitolite-admin/keydir:
total 1
-rw-r--r-- 1 alair 197121 97 Jun 10 23:21 alair.pub
从上可以看到,gitolite-admin.git
包含两个目录,conf
和keydir
,其中conf
保存着gitolite.conf
配置文件,而keydir
保存着上传的公钥文件。
其中keydir
中按自定义名保存着公钥文件,如果需要新增用户就在此目录新增用户公钥文件即可。如下,新增一个名为foo
的用户。
cp ~/.ssh/foo.pub gitolite-admin/keydir/foo.pub
gitolite-admin/conf/gitolite.conf
文件为用户权限配置,如下:
$ cat gitolite-admin/conf/gitolite.conf
repo gitolite-admin
RW+ = alair
repo testing
RW+ = @all
以上表示repo gitolite-admin
为alair
用户独有,而repo testing
的操作权限为所有用户。
我们需要添加新的REPO时,直接在gitolite.conf
中新增一行即可,如下:
repo foo
RW+ = foo
然后新的gitolite-admin
PUSH到服务器即可完成配置。
gitolite远程命令
$ ssh git@raspi2b help
hello git, this is git@raspi2b running gitolite3 v3.6.13-4-ga546e5e on git 2.39.5
list of remote commands available:
desc
help
info
perms
writable
$ ssh git@raspi2b info
hello git, this is git@raspi2b running gitolite3 v3.6.13-4-ga546e5e on git 2.39.5
R W gitolite-admin
R W kz
#Debian #Raspi #Ssh #树莓派 #Bullseye #Raspbian #Openssl #Git #Gitolite #Ed25519