如何优雅的一键同步OpenHarmony代码到gitlab?请关注【itopen:gitlab_sync】

itopen组织
1、提供OpenHarmony优雅实用的小工具
2、手把手适配riscv + qemu + linux的三方库移植
3、未来计划riscv + qemu + ohos的三方库移植 + 小程序开发
4、一切拥抱开源,拥抱国产化

一、概述

项目中有需求要将 OpenHarmony 整套代码同步到项目的 gitlab 中进行二次开发,这时怎么办呢?我要将每个仓都进行一次 fork 吗?
不用怕小编又来了,为方便大家操作,特地写了一套优雅的一键自动化同步的脚本工具。如果觉得好用,辛苦动动小手,点个赞

脚本下载请关注:itopen: 一键自动化同步OpenHarmony代码到gitlab

二、环境准备

  • 权限要求

    gitlab的用户必须要有maintainer及以上的权限,否则无法上传代码

  • 主机环境

    Ubuntu系统

  • Python版本要求

    python3.8以上

  • python-gitlab模块安装

    pip install --upgrade python-gitlab
    

三、脚本使用介绍

3.1 使用前准备

  • ssh配置

    必须提前将本地ssh的public-key内容添加到gitlab账号下,具体操作不介绍,百度上很多

  • git配置

    执行如下命令,配置好本地git

    git config --global user.name "yourname"
    git config --global user.email "your-email-address"
    git config --global core.editor vim
    git config --global credential.helper store
    git config --global http.sslverify false
    

    本地下载gitlab任意一个仓,如果没有自行创建一个仓,如果Ubunut是首次访问该gitlab会要求输入账号和密码

    test@pc220522:~/test$ git clone https://isrc.iscas.ac.cn/gitlab/riscv/polyosmobile/gitlab_code_update.git
    Cloning into 'gitlab_code_update'...
    Username for 'https://isrc.iscas.ac.cn': wen_fei # 输入gitlab的用户名
    Password for 'https://wen_fei@isrc.iscas.ac.cn': # 输入gitlab的密码
    remote: Enumerating objects: 65, done.
    remote: Counting objects: 100% (65/65), done.
    remote: Compressing objects: 100% (64/64), done.
    remote: Total 65 (delta 32), reused 0 (delta 0), pack-reused 0
    Unpacking objects: 100% (65/65), done.
    

    结束后检查~/.git-credentials中是否出现了如下的一条记录,如果没有可以手动创建该文件并手动添加进去

    https://user_name:passwd@ip
    
    # 样例
    https://zhang_san:123456aA@gitee.com
    https://zhang_san:123456aA@192.169.1.100
    
  • repo首次下载配置

    如果Ubuntu是首次使用repo下载代码,则先使用repo配置一下环境,因为有一个测试颜色输出,直接输入y回车即可

    test@pc220522:~/test$ mkdir -p ~/test && cd ~/test
    test@pc220522:~/test$ repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
    
    Your identity is: wenfei <wenfei@163.com>
    If you want to change this, please re-run 'repo init' with --config-name
    
    Testing colorized output (for 'repo diff', 'repo status'):
      black    red      green    yellow   blue     magenta   cyan     white
      bold     dim      ul       reverse
    Enable color display in this user account (y/N)? y # 输入y然后回车
    
    repo has been initialized in /home/test/test
    

3.2 脚本配置

3.2.1 Access Tokens配置
  • 登录到gitlab后点击个人头像选择Edit profile

  • 左侧点击Access Tokens

  • 在右侧的Token name内随便填写一个名字

  • 下面的Expiration date日期自行配置表示创建的Access Tokens有效期时间

  • Select scopes下面的所有选项全部勾选,表示python-gitlab通过Access Tokens能获取哪些权限

  • 点击下方的Create personal access token按钮创建Access Tokens

  • 将上方的Your new personal access token下面的字符串记录下来,离开该界面后就找不回来了,就得重新申请

    点击小眼睛就能看到Access Tokens的值,点击后面的小电池符号就能复制

  • 打开脚本main.py,在最下方的if __name__ == '__main__':里添加一个变量保存Access Tokens的值

    isrc_tokenid = "glpat-zzQNqTiVAnc5zsyMe7D2"
    
3.2.2 gitlab同步ohos官方代码
  • 变量gitlab_url,该变量必须定义

    表示gitlab的链接地址

  • 变量tokenid,该变量必须定义

    表示gitlab申请的Access Token值

  • 变量ohos_path,该变量必须定义,且必须是绝对路径

    下载好要提交到gitlab的代码路径,必须是绝对路径

  • 变量main_group,该变量必须定义

    表示代码同步到指定的group下面,如果没有则创建,但是名称必须是唯一的

  • 变量sub_group,默认为None

    表示代码通过到指定main_group下面的某个sub_group内,如果没有则创建,该值默认是None

  • 变量branch,默认是master分支

    gitlab仓要创建的branch名称

  • 变量id,默认为None

    将代码同步到指定id的group里,同时也会匹配name,只有name和id同时满足则将代码同步到该group下,否则新建group

  • 变量protected_permission,默认为True

    gitlab创建的分支是否为保护分支,如果是保护分支,后期删除时每个仓都要手动删除,默认是True

# 参考配置
if __name__ == '__main__':
    warnings.filterwarnings('ignore')
    tokenid = "glpat-3S6xygUp46w5xQ7k6Zx9"
    ohos_branch = "OpenHarmony-v4.1-Release"
    gitlab_url = "https://10.20.72.31:8088/gitlab.com"
    main_group = "ohos"
    sub_group = "dayu800"
    gitlab_upload_by_code(gitlab_url=gitlab_url,
                          token=tokenid,
                          ohos_path=ohos_path,
                          main_group=main_group,
                          sub_group=sub_group,
                          branch=ohos_branch,
                          protected_permission=True)
3.2.3 脚本执行

配置好上面所有步骤后直接运行main.py即可

./main.py
  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过对 std::basic_ios<char> 模板类进行特化来实现对 sync_with_stdio 函数的特化。 下面是一个示例代码: ``` #include <iostream> template<typename CharT, typename Traits> class MyBasicIOS : public std::basic_ios<CharT, Traits> { public: // 特化 sync_with_stdio 函数 void sync_with_stdio(bool sync) override { std::cout << "MyBasicIOS::sync_with_stdio(bool) is called!" << std::endl; std::basic_ios<CharT, Traits>::sync_with_stdio(sync); } }; // 定义 MyStream 类型,继承自 MyBasicIOS 类型 template<typename CharT, typename Traits> class MyStream : public MyBasicIOS<CharT, Traits>, public std::basic_istream<CharT, Traits> { public: // 构造函数 MyStream(std::basic_streambuf<CharT, Traits>* sb) : std::basic_ios<CharT, Traits>(), std::basic_istream<CharT, Traits>(sb) { // 将 std::ios_base::sync_with_stdio(false) 设为默认值 this->sync_with_stdio(false); } }; // 定义 MyStream 类型的别名 MyIStream,使用 char 类型的字符和默认的 Traits using MyIStream = MyStream<char, std::char_traits<char>>; int main() { MyIStream myin(std::cin.rdbuf()); myin.sync_with_stdio(true); // 调用特化后的 sync_with_stdio 函数 return 0; } ``` 在上面的代码中,我们定义了一个 MyBasicIOS 类,继承自 std::basic_ios 类,然后特化了其中的 sync_with_stdio 函数。接着,我们定义了一个 MyStream 类,继承自 MyBasicIOS 和 std::basic_istream 类,并在构造函数中设置了默认值。最后,我们定义了一个 MyIStream 类型的别名,使用 char 类型的字符和默认的 Traits。在 main 函数中,我们创建了一个 MyIStream 对象 myin,并调用了它的 sync_with_stdio 函数,这会调用特化后的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值