增加网站和接入备案,有播放量就有收益的自媒体平台,怎样开网店,买微单的网站建设前提条件#xff1a;搭建好gitolite 以转移正点原子rk3568_linux工程为例子#xff0c;将其转移到自己的git服务器。 获取完整repo仓库
将正点原子epo仓库sync出来
evanevan-X99:~/SRC/atk$ .repo/repo/repo sync -l -j10
evanevan-X99:~/SRC/atk$ .repo/repo/repo list -n… 前提条件搭建好gitolite 以转移正点原子rk3568_linux工程为例子将其转移到自己的git服务器。 获取完整repo仓库
将正点原子epo仓库sync出来
evanevan-X99:~/SRC/atk$ .repo/repo/repo sync -l -j10
evanevan-X99:~/SRC/atk$ .repo/repo/repo list -n ·/project.txt
evanevan-X99:~/SRC/atk$ cat project.txt
android/rk/platform/system/rk_tee_user
android/rk/u-boot
linux/alientek/qt_demo
linux/app-new/LibIPCProtocol
linux/app-new/qfm
linux/app/QLauncher
linux/app/aiserver
linux/app/dbserver
linux/app/eptz_demo
linux/app/libgdbus
linux/app/librkdb
linux/app/multivideoplayer
linux/app/qcamera
linux/app/qplayer
linux/app/rkaiq_tool_server......创建仓库
gitolite创建atk-at3568_linux_repo组project路径和正点原子的repo一样:
evanevan-X99:~/tools/gitolite-admin$ git diff
diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index 47bb499..9bb5dad 100644
--- a/conf/gitolite.confb/conf/gitolite.conf-3,3 3,74 repo gitolite-adminrepo testingRW allatk-at3568_linux_repo atk-rk3568_linux/android/rk/platform/system/rk_tee_user
atk-at3568_linux_repo atk-rk3568_linux/android/rk/u-boot
atk-at3568_linux_repo atk-rk3568_linux/linux/alientek/qt_demo
atk-at3568_linux_repo atk-rk3568_linux/linux/app-new/LibIPCProtocol
...
...
atk-at3568_linux_repo atk-rk3568_linux/rk/rkbin
atk-at3568_linux_repo atk-rk3568_linux/rk/rknn-toolkit2
atk-at3568_linux_repo atk-rk3568_linux/rk/rknpu2repo atk-at3568_linux_repoRWCD evan对应 repo list -n创建自己本地的git服务器
evanevan-X99:~/tools/gitolite-admin$ git commit -m add atk-at3568_linux_repo
[master 5abf05a] add atk-at3568_linux_repo1 file changed, 71 insertions()
evanevan-X99:~/tools/gitolite-admin$ git push origin master
枚举对象中: 7, 完成.
对象计数中: 100% (7/7), 完成.
使用 48 个线程进行压缩
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (4/4), 1.03 KiB | 1.03 MiB/s, 完成.
总共 4差异 0复用 0差异 0包复用 0
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/android/rk/platform/system/rk_tee_user.git/
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/android/rk/u-boot.git/
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/linux/alientek/qt_demo.git/
...
...
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/rk/rkbin.git/
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/rk/rknn-toolkit2.git/
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/rk/rknpu2.git/
To 127.0.0.1:gitolite-admin04b1df0..5abf05a master - master转移.repo
atk的仓库是深度为1的浅仓库, 无法使用git push --all直接推送。 需要逐个将仓库原来的.git删除, 从新创建提交和推送。
获取路径和项目
evanevan-X99:~/SRC/atk$ .repo/repo/repo forall -c echo $REPO_PATH path.txt
evanevan-X99:~/SRC/atk$ .repo/repo/repo forall -c echo $REPO_PROJECT project.txt通过$REPO_PATH进入到每个目录删除原来的.git然后从新初始化.git并将其推送到本地对应的$REPO_PROJECT的远程仓库 创建和推送脚本
你的脚本已经基本实现了所需的功能但可以进行一些优化以提高可读性和健壮性。以下是一些改进建议
错误处理增加更多的错误处理确保每一步操作都成功。日志记录添加日志记录以便在出现问题时更容易调试。使用函数将重复的代码封装到函数中使脚本更简洁。避免硬编码将一些常量提取出来便于修改。
以下是优化后的脚本
#!/bin/bash# 常量定义
REP_URLgit127.0.0.1:atk-rk3568_linux
LOG_FILEscript.log# 日志函数
log() {echo $(date %Y-%m-%d %H:%M:%S) - $1 | tee -a $LOG_FILE
}# 检查文件是否存在
check_files() {if [ ! -f $1 ] || [ ! -f $2 ]; thenlog 错误找不到文件 $1 或 $2exit 1fi
}# 初始化并推送 Git 仓库
init_and_push() {local path$1local project$2local src_dir$3# 进入目录cd $src_dir/$path || { log 无法进入目录 $src_dir/$path; return; }# 删除 .git 目录如果存在if [ -d .git ]; thenrm -rf .gitfi# 初始化 Git 仓库git init || { log 初始化 Git 仓库失败: $path; return; }# 添加所有文件git add . || { log 添加文件失败: $path; return; }# 提交更改git commit -m first commit || { log 提交失败: $path; return; }# 添加远程仓库git remote add origin $REP_URL/$project || { log 添加远程仓库失败: $path; return; }# 推送至远程仓库git push origin master || { log 推送失败: $path; return; }log 成功处理: $path : $project
}# 主逻辑
main() {# 参数检查if [ $# -ne 2 ]; thenecho 用法: $0 DIR SRC_DIRexit 1fi# 获取参数DIR$1SRC_DIR$2# 文件路径path_file$DIR/path.txtproject_file$DIR/project.txt# 检查文件是否存在check_files $path_file $project_file# 打开文件并逐行读取{while IFS read -r path_line IFS read -r project_line 3; do# 处理每一行init_and_push $path_line $project_line $SRC_DIRecho done $path_file 3 $project_file} 3- # 关闭文件描述符3# 检查文件行数是否一致if [ $(wc -l $path_file) -ne $(wc -l $project_file) ]; thenlog 警告$path_file 和 $project_file 的行数不一致。fi
}# 调用主逻辑
main $解释
日志函数log 函数用于记录日志信息并将日志输出到控制台和日志文件 script.log 中。检查文件函数check_files 函数用于检查两个文件是否存在。初始化并推送 Git 仓库init_and_push 函数封装了初始化 Git 仓库、添加文件、提交更改、添加远程仓库和推送的操作。主逻辑main 函数是脚本的主逻辑部分包括参数检查、文件检查、逐行读取和处理每一对路径和项目。
使用说明
将上述代码保存到一个文件中比如命名为 process_paths.sh。确保 path.txt 和 project.txt 文件存在于指定的目录下。给脚本执行权限chmod x process_paths.sh运行脚本./process_paths.sh /path/to/dir /path/to/src_dir
这样脚本会逐行读取 path.txt 和 project.txt 文件并同步处理每一对路径和项目。同时日志记录功能可以帮助你更好地跟踪脚本的执行情况。 创建中心仓库
evanevan-X99:~/tools/gitolite-admin$ git diff
diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index 6d44180..4d6ce0e 100644
--- a/conf/gitolite.confb/conf/gitolite.conf-72,5 72,7 repo testingatk-at3568_linux_repo atk-rk3568_linux/rk/rknn-toolkit2atk-at3568_linux_repo atk-rk3568_linux/rk/rknpu2atk-at3568_linux_repo atk-rk3568_linux/manifests
repo atk-at3568_linux_repoRWCD evan将atk下的manifests推动到刚刚新建的仓库
evanevan-X99:~$ git clone /home/evan/SRC/atk/.repo/manifests.git
正克隆到 manifests...
remote: 枚举对象中: 14, 完成.
remote: 对象计数中: 100% (14/14), 完成.
remote: 压缩对象中: 100% (12/12), 完成.
remote: 总共 14差异 3复用 0差异 0包复用 0
接收对象中: 100% (14/14), 4.71 KiB | 4.71 MiB/s, 完成.
处理 delta 中: 100% (3/3), 完成.
evanevan-X99:~$ cd manifests/
evanevan-X99:~/manifests$ rm .git/ -rf
evanevan-X99:~/manifests$ git init
已初始化空的 Git 仓库于 /home/evan/manifests/.git/
evanevan-X99:~/manifests$ git add .
evanevan-X99:~/manifests$ git commit -m first commit
[master 根提交 3a3d45c] first commit9 files changed, 386 insertions()create mode 100755 common/yocto.xmlcreate mode 100755 include/rk356x_doc.xmlcreate mode 120000 rk3568_linux_release.xmlcreate mode 100644 rk356x_linux/ATK-RK3568_Linux_SDK_Note.mdcreate mode 100644 rk356x_linux/atk-rk3568_linux_alpha_v1.0.xmlcreate mode 100644 rk356x_linux/atk-rk3568_linux_release_v1.0_20230620.xmlcreate mode 100644 rk356x_linux/atk-rk3568_linux_release_v1.1_20230901.xmlcreate mode 100644 rk356x_linux/atk-rk3568_linux_release_v1.2_20240129.xmlcreate mode 100644 rk356x_linux/rk356x_linux_release_v1.3.0_20220620.xml
evanevan-X99:~/manifests$ git remote -v
evanevan-X99:~/manifests$ git remote add origin git127.0.0.1:atk-rk3568_linux/manifests
evanevan-X99:~/manifests$ git push origin master
枚举对象中: 14, 完成.
对象计数中: 100% (14/14), 完成.
使用 48 个线程进行压缩
压缩对象中: 100% (12/12), 完成.
写入对象中: 100% (14/14), 4.64 KiB | 2.32 MiB/s, 完成.
总共 14差异 3复用 0差异 0包复用 0
To 127.0.0.1:atk-rk3568_linux/manifests* [new branch] master - master拉取
安装repo命令
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod x repo
sudo mv repo /usr/bin/
echo export REPO_URLhttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo ~/.bashrc新建git-repo仓库
evanevan-X99:~/tools/gitolite-admin$ git diff
diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index 4d6ce0e..4d74d8b 100644
--- a/conf/gitolite.confb/conf/gitolite.conf-4,6 4,9 repo gitolite-adminrepo testingRW allrepo git-repoRW evan
atk-at3568_linux_repo atk-rk3568_linux/android/rk/platform/system/rk_tee_useratk-at3568_linux_repo atk-rk3568_linux/android/rk/u-bootatk-at3568_linux_repo atk-rk3568_linux/linux/alientek/qt_demo克隆git-repo镜像到本地git服务器
evanevan-X99:~/tools$ git clone --mirror https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
evanevan-X99:~/tools$ cd git-repo.git/
evanevan-X99:~/tools/git-repo.git$ git remote add gitolite git127.0.0.1:git-repo
evanevan-X99:~/tools/git-repo.git$ git push gitolite --all
evanevan-X99:~/tools/git-repo.git$ git push gitolite --tags修改中心仓库配置 指定同步分支为master(前文脚本自动化推送仓库, 默认推送到了master分支)删除depth选项 执行命令
evanevan-X99:~/work$ repo init -u git127.0.0.1:atk-rk3568_linux/manifests.git -b master -m rk3568_linux_release.xml --repo-urlgit127.0.0.1:git-repo.git --no-repo-verify
evanevan-X99:~/work$ repo sync -j10
evanevan-X99:~/work$ repo start master --all新增dl仓库
将dl/包也一起增加到git服务器做备份下载
evanevan-X99:~/work$ tar xzf ~/swap-x99/dl.tgz -C buildroot/
evanevan-X99:~/work$ cd buildroot
evanevan-X99:~/work/buildroot$ git add -f dl/
evanevan-X99:~/work/buildroot$ git commit -m add dl/
evanevan-X99:~/work/buildroot$ git push origin master