服务器环境如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
➜ ~ 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 用户并设置密码
1
2
3
4
5
sudo useradd -m git
➜ ~ sudo passwd git
New password:
Retype new password:
passwd: password updated successfully
设置公钥
本地公钥上传到服务器
1
2
3
$ scp ~/.ssh/id_ed25519.pub pi@raspi2b:
pi@raspi2b' s password:
id_ed25519.pub 100% 96 6.9KB/s 00:00
设置公钥,将文件名改为自定义的用户名
1
2
3
4
5
6
7
➜ ~ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 切换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。
1
2
git@raspi2b:~/repositories $ ls
gitolite-admin.git testing.git
我们试着把testing.git
pull下来操作下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ 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下来看下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
的用户。
1
cp ~/.ssh/foo.pub gitolite-admin/keydir/foo.pub
gitolite-admin/conf/gitolite.conf
文件为用户权限配置,如下:
1
2
3
4
5
6
$ cat gitolite-admin/conf/gitolite.conf
repo gitolite-admin
RW+ = alair
repo testing
RW+ = @all
以上表示repo gitolite-admin
为alair
用户独有,而repo testing
的操作权限为所有用户。
我们需要添加新的REPO时,直接在gitolite.conf
中新增一行即可,如下:
然后新的gitolite-admin
PUSH到服务器即可完成配置。
gitolite远程命令
1
2
3
4
5
6
7
8
9
10
$ 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
1
2
3
4
5
$ 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