平时在github上创建仓库、推拉代码、创建 Pull/Merge Request、发起 Issue 。
如果是本地代码 git 只能跟踪的代码信息,无法完成如上操作。本文介绍利用 gitolite 搭建本地git存档信息平台,可以实现类似功能。
本文以搭建鸿蒙代码仓库为例,讲解 gitolite 导入鸿蒙源码镜像仓,以管理代码授权密钥管理授权源码同步。
提示:此文章仅为搭建repo镜像仓,下一篇为 repo代码反向生成 repo镜像仓。
a) 搭建本地Androi SDK repo 仓库,创建 Pull/Merge Request
b) 增加私有代码仓,不影响代码迭代更新
c) 管控授权密钥,分配用户仓库
如果当前用也有Andoid 代码镜像仓可跳过此步骤;本文以搭建鸿蒙本地代码镜像仓为例。
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/bin/repo
chmod a+x /usr/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
提示
安装repo时如提示无权限,可下载至其他目录,并将其配置到环境变量中。
或者使用系统默认安装提示。
$ repo
Command 'repo' not found, but can be installed with:
sudo snap install git-repo
sudo apt-get install git-lfs
使用 repo 下载代码格式如下:
repo init -u ssh://user_name@IP:path/xxx_manifestsgit -b branch_name -m manifest_name.xml --mirror
注意
-b选择分支,比如master或OpenHarmony-3.1-Beta; --mirror 下载镜像模式
mkdir -p ~/repositories/harmony
cd ~/repositories/harmony
repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1-Beta --no-repo-verify --mirror
repo sync -c
repo forall -c 'git lfs pull'
sudo bash build/prebuilts_download.sh
注意
:执行 “bash build/prebuilts_download.sh” 会因网络异常终中断,支持断点下载,重新下载即可。须确保预编译的工具都下载完成。
生成harmony repo list
cd ~/repositories/harmony
.repo/repo/repo list -n > harmony.conf
sed -i 's/^/harmony\//g' harmony.conf
sed -i 's/\n/ /g' harmony.conf
sed ':a;N;s/\n/ /;t a' harmony.conf > .harmony.conf; mv .harmony.conf harmony.conf
sed -i 's/^/@harmony = /g' harmony.conf
添加 harmony.conf 到 gitolite
cp harmony.conf ~/gitolite-admin/conf
cd ~/gitolite-admin
vi conf/gitolite.conf #尾行添加 引用 include harmony.conf, @user 用户组成员,RW+ = @users 读写授权用户组
include "harmony.conf"
@users = git
repo @harmony
RW+ = @users
$ git diff
diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index ae1dc08..96517a3 100644
--- a/conf/gitolite.conf
+++ b/conf/gitolite.conf
@@ -1,2 +1,8 @@
repo gitolite-admin
RW+ = git
+
+include "harmony.conf"
+
+@users = git
+repo @harmony
1. RW+ = @users
提示
harmony.conf 需一同提交;本地提交完成后,再推送到远程方可生效。
客户下下载代码
repo init -u ssh://user_name@IP:path/xxx_manifests.git -b master -m manifest.xml
path是相对 repositories中代码仓路径,xxx_manifests.git 为 manifest.git 相对harmony(代码镜像仓)路径
mkdir -p ~/harmony
cd ~/harmony
repo init -u git@127.0.0.1:harmony/openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1-Beta --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
sudo bash build/prebuilts_download.sh
注意
如果gitolite管理用户名非“git”,请替换 git@ 中git为实际用户名;127.0.0.1是回环IP,实际使用中请替换为host IP。
ConfigParser.ParsingError: File contains parsing errors: /data/git/.gitosis.conf
cp ~/gitolite-admin/gitosis.conf ~/.gitosis.conf
Please make sure you have the correct access rights
and the repository exits.
git@www.rockchip.com.cn: Persmission denied (publickey).
fltal : Could not read from remote repository.
原因:本地使用 .repo/xxx_manifest.xml 的 ssh路径未修改为本地镜像仓库
vi .repo/manifest.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
- <remote fetch="ssh://git@www.rockchip.com.cn/linux/" name="rk"/>
+ <remote fetch="ssh://git@192.168.1.88/rk3288_linux/" name="rk"/>
fatal: Couldn't find remote ref refs/heads/harmony
fatal: The remote end hung up unexpectedly
此情况请核对检出分支名是否正确
repo init -u grrit_URL -b branch(分支名不对) -m manifest.xml
FATAL: R any rk288_linux/rockchip/platform/manifests user DENIED by fallthru
(or you mis-spelled the reponame)
fatal: Could not read from remote repository.
解决方法:开通要同步仓库权限即可
万事皆有因果,刨根问底方知原委。尝试不用git用户搭建gitolite,发现躺坑很多,各种查资料,问题解决特此记述。
希望我的前车之鉴能为你省点时间。