Git 如何在源代码管理下获取buildroot项目

Git 如何在源代码管理下获取buildroot项目,git,buildroot,Git,Buildroot,我工作的公司开发了一种产品,它需要我们使用的嵌入式Linux,就像许多其他产品一样 在任何情况下,我都希望使用Git对项目进行源代码控制,因为它是我们对公司所有其他项目进行源代码控制的工具。问题是,我不知道应该在源代码管理中保存哪些文件(因为保存整个buildroot目录似乎有些过分) 最简单的方法是克隆buildroot存储库(它不是很大),并根据发布标签创建自己的分支。这使得您可以轻松地修改buildroot,但很难创建全局标记和分支(即,为buildroot和您自己的代码提供相同的标记)。

我工作的公司开发了一种产品,它需要我们使用的嵌入式Linux,就像许多其他产品一样


在任何情况下,我都希望使用Git对项目进行源代码控制,因为它是我们对公司所有其他项目进行源代码控制的工具。问题是,我不知道应该在源代码管理中保存哪些文件(因为保存整个
buildroot
目录似乎有些过分)

  • 最简单的方法是克隆buildroot存储库(它不是很大),并根据发布标签创建自己的分支。这使得您可以轻松地修改buildroot,但很难创建全局标记和分支(即,为buildroot和您自己的代码提供相同的标记)。但是,如果您想将它与您自己的代码存储库相结合(这样所有内容都可以标记在一起),则必须使用git子模块或子树合并(两者都不是很方便),或者必须将其作为单独的存储库,并使用第二个解决方案进行集成
  • 您可以基于buildroot tarball编写一个构建脚本,下载tarball,提取它,配置它(通过调用*make xxx\u defconfig*)并构建它。最近添加的BR2_外部机制(将于2014.02发布)使您可以轻松地将自己添加的内容保留在buildroot树之外。但是,如果需要更改核心基础设施中的任何内容,则必须在下载的tarball上应用补丁,这很不方便
  • 在存储库中提取buildroot tarball并像那样导入它肯定不是一个好主意,因为这使得更新buildroot树甚至应用上游补丁都很困难。如果您确实希望将其保存在自己的存储库中,请使用git子树合并,这样至少可以保留上游历史记录


    第三种选择是使用Android的repo工具将buildroot、linux、您自己的代码和您修改的其他软件包的git存储库结合起来。这结合了我给出的两个选项中的最佳选项(易于修改并支持全局标记/分支)。但我自己从未尝试过,所以我不能保证它会很好地工作。

    我最近在我们的组织中解决了同样的问题,我发现这是一个有趣的话题。我将在这里描述我们的部分解决方案:

    管理您使用的buildroot版本

    编辑:最近的经验对我来说强调了这一点

    Buildroot为每个版本的Buildroot写入不同的配置文件。为了能够共享这些内容,您需要向所有相关人员指定存储库使用的Buildroot版本

  • 您可以将Buildroot作为git子模块包含在repo中。好的,如果你的公司只有一个Buildroot项目
  • 在自述文件中指定要使用的版本,或为其编写自定义检查
  • 树上建筑

    我强烈建议从树上构建:

    将配置文件和目标覆盖添加到git

    将.config文件和子配置文件添加到git存储库。我的回购协议包含以下内容:

    .config
    README.md
    linux.config
    build/busybox-1.22.1/.config
    libdc1394.patch
    opencv_2.3.1a.patch
    target-overlay/README~
    target-overlay/etc/dropbear/dropbear_ecdsa_host_key
    target-overlay/etc/dropbear/dropbear_rsa_host_key
    target-overlay/etc/fstab
    target-overlay/etc/httpd.conf
    target-overlay/etc/init.d/S51mount_html
    target-overlay/etc/init.d/S52new_ip_address
    target-overlay/etc/init.d/S53httpd
    target-overlay/etc/network/interfaces
    target-overlay/etc/shadow
    target-overlay/etc/sshd_config
    target-overlay/lib/firmware/rtl_nic/rtl8168g-2.fw
    target-overlay/root/.ssh/authorized_keys
    
    将对buildroot的更改保存为修补程序


    无论何时更改buildroot存储库中的内容,都要扩展该功能,并为其创建补丁。将补丁保存在您的存储库中,并使用README.md文件向其他人解释如何将其应用于buildroot树。

    我通过使用
    git子模块
    buildroot br外部
    功能解决了同样的问题

    从这个意义上讲,您只需要启动一个空的存储库并将buildroot版本作为其子模块导入

    mkdir myrepo; cd myrepo
    git init
    touch README; git add README; git commit -m "Initial commit"
    git submodule add -b <preferred release/tag/branch> git://git.buildroot.net/buildroot
    git submodule update --init
    
    完成此操作后,只需运行buildroot defconfig步骤,将绝对路径传递到br外部目录,如下所示

    make BR2_EXTERNAL=$PWD/br-external -C buildroot <boardname>_defconfig
    

    >无论何时更改buildroot存储库中的内容,我建议您使用子模块,只使用标记版本的buildroot,并将所有提交放在最上面。然后,当您想要升级时,选择另一个带标签的版本,并在此基础上重新设置所有内容的基础。下面是一个最小的树外构建示例:如何跟踪包修改:
    mkdir br-external
    # below command assumes you have all structures ready somewhere else
    cp -fva .../configs .../package .../board br-external
    touch br-external/{Config.in,external.mk}
    (edit Config.in and external.mk)
    git add br-external
    
    make BR2_EXTERNAL=$PWD/br-external -C buildroot <boardname>_defconfig
    
    cd buildroot
    git pull origin latest-release
    cd ..
    git add buildroot
    git commit -m 'buildroot latest-release upgrade'