文章目录

  • OpenWrt之feeds.conf.default详解
    • 文件内容
    • 命令解释
    • src-svn与src-gitsvn
    • src-git与src-git-full
    • src-cpy与src-link
    • 其他的src命令
    • feeds命令用法
    • branch与commit的分割符号
    • branch与tag的区别

OpenWrt之feeds.conf.default详解


文件内容

src-git-full packages https://git.openwrt.org/feed/packages.git
src-git-full luci https://git.openwrt.org/project/luci.git
src-git-full routing https://git.openwrt.org/feed/routing.git
src-git-full telephony https://git.openwrt.org/feed/telephony.git
#src-git-full video https://github.com/openwrt/video.git
#src-git-full targets https://github.com/openwrt/targets.git
#src-git-full oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed

OpenWrt的feeds.conf.default, 是添加一些应用和包的文件, 看过之后下面解析命令用法


命令解释

  • 先说# , 这个是注释用, 不会有人不知道吧

  • 这个文件主要是由scripts/feeds这个perl脚本控制着, 贴一个命令的定义

    my %update_method = ('src-svn' => {'init'     => "svn checkout '%s' '%s'",'update'    => "svn update",'controldir'    => ".svn",'revision'    => "svn info | grep 'Revision' | cut -d ' ' -f 2 | tr -d '\n'"},'src-cpy' => {'init'        => "cp -Rf '%s' '%s'",'update'  => "",'revision'    => "echo -n 'local'"},'src-link' => {'init'     => "ln -s '%s' '%s'",'update'   => "",'revision'    => "echo -n 'local'"},'src-dummy' => {'init'        => "true '%s' && mkdir '%s'",'update'   => "",'revision'    => "echo -n 'dummy'"},'src-git' => {'init'          => "git clone --depth 1 '%s' '%s'",'init_branch'   => "git clone --depth 1 --branch '%s' '%s' '%s'",'init_commit'   => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",'update'   => "git pull --ff-only",'update_force'  => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)",'post_update'    => "git submodule update --init --recursive",'controldir'   => ".git",'revision'    => "git rev-parse --short HEAD | tr -d '\n'"},'src-git-full' => {'init'          => "git clone '%s' '%s'",'init_branch'   => "git clone --branch '%s' '%s' '%s'",'init_commit'   => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",'update'  => "git pull --ff-only",'update_force'  => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)",'post_update'    => "git submodule update --init --recursive",'controldir'   => ".git",'revision'    => "git rev-parse --short HEAD | tr -d '\n'"},'src-gitsvn' => {'init'   => "git svn clone -r HEAD '%s' '%s'",'update'   => "git svn rebase",'controldir'    => ".git",'revision'    => "git rev-parse --short HEAD | tr -d '\n'"},'src-bzr' => {'init'      => "bzr checkout --lightweight '%s' '%s'",'update'  => "bzr update",'controldir'    => ".bzr"},'src-hg' => {'init'        => "hg clone '%s' '%s'",'update'    => "hg pull --update",'controldir'  => ".hg"},'src-darcs' => {'init'    => "darcs get '%s' '%s'",'update'  => "darcs pull -a",'controldir' => "_darcs"},
    );# src-git: pull broken
    # src-cpy: broken if `basename $src` != $name
    

src-svn与src-gitsvn

'src-svn' => {'init'     => "svn checkout '%s' '%s'",'update'    => "svn update",'controldir'    => ".svn",'revision'    => "svn info | grep 'Revision' | cut -d ' ' -f 2 | tr -d '\n'"},
'src-gitsvn' => {'init' => "git svn clone -r HEAD '%s' '%s'",'update'   => "git svn rebase",'controldir'    => ".git",'revision'    => "git rev-parse --short HEAD | tr -d '\n'"},
  • 用法:
src-svn NueXini_Packages https://github.com/NueXini/NueXini_Packages/trunk/
# 拉取默认分支
src-svn NueXini_Packages https://github.com/NueXini/NueXini_Packages/branches/v20220620
# 拉取指定分支
src-svn NueXini_Packages https://github.com/NueXini/NueXini_Packages/trunk/luci-app-disableipv6/
# 拉取指定文件夹
  • src-gitsvn

  • 我愿称之为git与svn的结合体

  • 这个主要命令是git svn clone -r HEAD, 参考https://git-scm.com/docs/git-svn

  • 用法:

src-gitsvn NueXini_Packages https://github.com/NueXini/NueXini_Packages.git

src-git与src-git-full

'src-git' => {'init'          => "git clone --depth 1 '%s' '%s'",'init_branch'   => "git clone --depth 1 --branch '%s' '%s' '%s'",'init_commit'   => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",'update'  => "git pull --ff-only",'update_force'  => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)",'post_update'    => "git submodule update --init --recursive",'controldir'   => ".git",'revision'    => "git rev-parse --short HEAD | tr -d '\n'"},'src-git-full' => {'init'          => "git clone '%s' '%s'",'init_branch'   => "git clone --branch '%s' '%s' '%s'",'init_commit'   => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",'update'  => "git pull --ff-only",'update_force'  => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)",'post_update'    => "git submodule update --init --recursive",'controldir'   => ".git",'revision'    => "git rev-parse --short HEAD | tr -d '\n'"},
  • 这两者共同操作是git clone区别是clone的深度不一样, src-git-full是全clone, 而src-git的深度为--depth 1
  • 用法: src-git-full / src-git-full 保存的文件夹名 仓库地址
  • 注: 后面可指定 分支, tag, commit , 不填则是拉取默认分支
src-git NueXini_Packages https://github.com/NueXini/NueXini_Packages.git;main
# 指定branch
src-git NueXini_Packages https://github.com/NueXini/NueXini_Packages.git;v20220620
# 指定tag
src-git NueXini_Packages https://github.com/NueXini/NueXini_Packages.git^47e35dd380b88d5cffc267eabe7a125da86d194b
# 指定commit

src-cpy与src-link

'src-cpy' => {'init'     => "cp -Rf '%s' '%s'",'update'  => "",'revision'    => "echo -n 'local'"},
'src-link' => {'init'       => "ln -s '%s' '%s'",'update'   => "",'revision'    => "echo -n 'local'"},

这两个命令的唯一区别是src-cpy会复制一份源到feeds目录, src-link则是ln -s创建一个软链接, 我个人是比较倾向src-link的, 这样可以修改源码能及时响应.

  • 用法: src-cpy / src-link 保存的文件名 源目录
  • src-link必须是完整的绝对路径
src-link NueXini_Packages package/NueXini_Packages
# 拉取package目录下的NueXini_Packages目录

其他的src命令

  • bzr, hg, darcs 一些其他的分布式版本控制系统, 基本很少用到, 可以自行参考命令解释了解使用方法

feeds命令用法

sub usage() {print <<EOF;
Usage: $0 <command> [options]
Commands:list [options]: List feeds, their content and revisions (if installed)Options:-n :            List of feed names.-s :            List of feed names and their URL.-r <feedname>:  List packages of specified feed.-d <delimiter>: Use specified delimiter to distinguish rows (default: spaces)-f :            List feeds in feeds.conf compatible format (when using -s).install [options] <package>: Install a packageOptions:-a :           Install all packages from all feeds or from the specified feed using the -p option.-p <feedname>: Prefer this feed when installing packages.-d <y|m|n>:    Set default for newly installed packages.-f :           Install will be forced even if the package exists in core OpenWrt (override)search [options] <substring>: Search for a packageOptions:-r <feedname>: Only search in this feeduninstall -a|<package>: Uninstall a packageOptions:-a :           Uninstalls all packages.update -a|<feedname(s)>: Update packages and lists of feeds in feeds.conf .Options:-a :           Update all feeds listed within feeds.conf. Otherwise the specified feeds will be updated.-i :           Recreate the index only. No feed update from repository is performed.-f :           Force updating feeds even if there are changed, uncommitted files.clean:             Remove downloaded/generated files.
EOFexit(1);
}my %commands = ('list' => \&list,'update' => \&update,'install' => \&install,'search' => \&search,'uninstall' => \&uninstall,'feed_config' => \&feed_config,'clean' => sub {system("rm -rf ./feeds ./package/feeds ./target/linux/feeds");}
);

branch与commit的分割符号

sub update_feed_via($$$$$) {my $type = shift;my $name = shift;my $src = shift;my $relocate = shift;my $force = shift;my $m = $update_method{$type};my $localpath = "./feeds/$name";my $safepath = $localpath;$safepath =~ s/'/'\\''/;my ($base_branch, $branch) = split(/;/, $src, 2);my ($base_commit, $commit) = split(/\^/, $src, 2);if( $relocate || !$m->{'update'} || !-d "$localpath/$m->{'controldir'}" ) {system("rm -rf '$safepath'");if ($m->{'init_branch'} and $branch) {system(sprintf($m->{'init_branch'}, $branch, $base_branch, $safepath)) == 0 or return 1;} elsif ($m->{'init_commit'} and $commit) {system(sprintf($m->{'init_commit'}, $base_commit, $safepath, $safepath, $commit, $commit)) == 0 or return 1;} else {system(sprintf($m->{'init'}, $src, $safepath)) == 0 or return 1;}} elsif ($m->{'init_commit'} and $commit) {# in case git hash has been provided don't update the feed} else {my $update_cmd = $m->{'update'};if ($force && exists $m->{'update_force'}) {$update_cmd = $m->{'update_force'};}system("cd '$safepath'; $update_cmd") == 0 or return 1;}if ($m->{'post_update'}) {my $cmd = $m->{'post_update'};system("cd '$safepath'; $cmd") == 0 or return 1;}return 0;
}
  • 透过以上代码, 主要能看见branchcommit的分割是不一样的
  • branch用的分割符号是;
  • commit用的分割符号是^
my ($base_branch, $branch) = split(/;/, $src, 2);
my ($base_commit, $commit) = split(/\^/, $src, 2);

branch与tag的区别

  • tag就是给commit的hash校验和取的一个名字,比较直观,方便记忆和使用

  • tag就像是一个里程碑一个标志一个点,branch是一个新的征程一条线;tag是静态的,branch要向前走;

  • tag 对应某次 commit, 是一个点,是不可移动的。
    branch 对应一系列 commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。

    所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。

  • 参考https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE


Enjoy it ~

OpenWrt之feeds.conf.default详解相关推荐

  1. openwrt 修改feeds.conf.default为GitHub源

    lede和openwrt合并之后 lede官网挂了.. git.openwrt.org,也访问不了.. 只要去github上找最新源码: git clone https://github.com/op ...

  2. Redis配置文件redis.conf文件详解

    Redis配置文件redis.conf文件详解 唠嗑 这里面的意思只要看得差不多其实就是已经对redis有熟悉的感觉,就比如 推塔已经推到别人家的大门~~~~~~~~废话不多说直接开始了 知道大家都不 ...

  3. ntp 服务端配置(/etc/ntp.conf配置详解) -小白实操记录

    1 ntp 安装查看 1.1 安装命令 apt-get install ntp 1.2 查看服务是否启动 service --status-all 或者 ps -aux | grep ntp 1.3 ...

  4. Nginx配置文件nginx.conf中文详解(转)

    ######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_pr ...

  5. nginx.conf配置详解

    ######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_pr ...

  6. vsftpd的主配置文件是什么linux,vsftpd.conf配置文件详解

    vsftpd.conf配置文件详解 # 是否允许匿名用户登录.默认值为YES. anonymous=YES|NO # 是否允许匿名用户上传文件(如果设置为YES,则write_enable也必须设置为 ...

  7. nginx.conf 配置文件详解

    本文来说下nginx.conf 配置文件详解 文章目录 Nginx 配置文件概述 nginx.conf 配置文件 通用(这里是 windows 系统系 nginx1.14.2 下 nginx.conf ...

  8. vsftp.conf 配置文件详解

    /etc/vsftpd/vsftpd.conf文件详解,分好类,方便大家查找与学习 #################匿名权限控制############### anonymous_enable=YE ...

  9. php-fpm.conf 配置文件详解

    php-fpm.conf  配置文件详解 [global] pid = run/php-fpm.pid error_log = log/php-fpm.log log_level = notice # ...

最新文章

  1. python 语音websocket_Python 牺牲性能以提升程序员的工作效率
  2. 根据excel中的容填写信息
  3. PK3Err0040: The target device is not ready for debugging. Please check your configuration bit settin
  4. 后端:SpringBoot 的@Value注解,高级特性,非常实用!!
  5. WPF利用HelixToolKit后台导入3D模型
  6. 自制小型USB TO TTL串口工具
  7. C语言编写FFT程序
  8. echarts 基于个性化百度地图的迁徙图
  9. stm32之HAL库实现us延时方法
  10. C. Game Master(强连通分量,缩点,建图
  11. mysql hugepage_mysql启用hugepage-阿里云开发者社区
  12. “The Gentle Lentil Restaurant“ Case Solution Report 模型与决策-温柔小扁豆餐厅例题
  13. Java设计模式之模板方法模式(UML类图分析+代码详解)
  14. 超级好用的芯片封装网站IC Search
  15. linux shell 输出红色,Bash Shell怎么打印各种颜色
  16. 手把手教你如何设置H5页面动画效果
  17. 粗糙集matlab,粗糙集理论权重确定方法用matlab实现
  18. C语言中exit的简单用法
  19. 【报错】could not acquire management access for administration MySQL不能登录
  20. web前端开发入门之HTML完整版

热门文章

  1. 解决Google联网失败的问题
  2. 计算机系统验证供应商评估,计算机化系统验证条款解读
  3. 超简单的一键重装win10教程,还不会装win10的你赶紧✔get一下!
  4. 【颜纠日记】百度搜索语法带图教学实操“找文章篇”分享
  5. 从Solr卡顿到G1垃圾回收
  6. setgid: Operation not permitted
  7. Acid-Reloaded
  8. 设计模式之观察者模式(监听模式)
  9. 俄罗斯方块源码(彩色版)
  10. java毕业生设计员工培训管理系统计算机源码+系统+mysql+调试部署+lw