错误:在Intel Edison和git 2.0.1上,“git: 'submodule'不是git命令”

8

当我试图在运行Yocto Linux和git 2.0.1的Intel Edison上使用git子模块并输入常规命令git submodule时,我只会收到以下错误信息:

$> git submodule init
git: 'submodule' is not a git command. See 'git --help'

系统版本为:

$> uname -r
3.10.17-poky-edison+
$> git --version
git version 2.0.1
$> configure_edison --version
159

在谷歌上没有找到该错误的任何迹象。

是否需要安装额外的软件包?还是因为 git 2.0.1 的原因?

在我的 Ubuntu(git 1.9.1)中,这些命令可以正常使用。


1
可能由于嵌入式 Yocto 团队的打包人员为了节省空间而未将神秘的 submodule 子命令构建到您的 git 中。您可以在目标平台上始终从源代码构建 git - msw
子模块子命令确实存在于标准的git 2.0.1源代码中。 - msw
2
一些发行版(如Fedora)有包含“子模块”的git-all元包。 - DenisKolodin
3个回答

6

是的,Edison上的Git可能是一款轻量级版本。正如评论中msw所提到的,最好的选择是从源代码构建Git。但我相信下一个Yocto软件包版本可能会带来新版本的Git。


5

在使用Yocto构建git时,行为表现如预期。不幸的是,预期的行为并非你所期望的。在Ubuntu中,git-submodule包含在git软件包中,在Yocto中则包含在git-perltools软件包中。当你运行bitbake git命令时,将会构建以下软件包(Thud版本):

ferry@delfion:~/.../out/linux64/build/tmp/work/corei7-32-poky-linux/git/2.18.1-r0/deploy-debs/corei7-32$ ls -l
- git_2.18.1-r0_i386.deb
- git-bash-completion_2.18.1-r0_i386.deb
- git-dbg_2.18.1-r0_i386.deb
- git-dev_2.18.1-r0_i386.deb
- git-doc_2.18.1-r0_i386.deb
- git-perltools_2.18.1-r0_i386.deb
- gitweb_2.18.1-r0_i386.deb

使用包含git-submodulegit-perltools

你怎么能提前知道呢?请查看https://layers.openembedded.org。你可以轻松找到:http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-devtools/git/git.inc?h=thud,其中包含:

PERLTOOLS = " \
    ${libexecdir}/git-core/git-add--interactive \
    ${libexecdir}/git-core/git-archimport \
    ${libexecdir}/git-core/git-cvsexportcommit \
    ${libexecdir}/git-core/git-cvsimport \
    ${libexecdir}/git-core/git-cvsserver \
    ${bindir}/git-cvsserver \
    ${libexecdir}/git-core/git-difftool \
    ${libexecdir}/git-core/git-send-email \
    ${libexecdir}/git-core/git-svn \
    ${libexecdir}/git-core/git-instaweb \
    ${libexecdir}/git-core/git-submodule \
    ${libexecdir}/git-core/git-am \
    ${libexecdir}/git-core/git-request-pull \
    ${datadir}/gitweb/gitweb.cgi \
    ${datadir}/git-core/templates/hooks/prepare-commit-msg.sample \
    ${datadir}/git-core/templates/hooks/pre-rebase.sample \
    ${datadir}/git-core/templates/hooks/fsmonitor-watchman.sample \
"

# Git tools requiring perl
PACKAGES =+ "${PN}-perltools"
FILES_${PN}-perltools += " \
    ${PERLTOOLS} \
    ${libdir}/perl \
    ${datadir}/perl5 \
"

因此,在您的core-image中添加不仅是git,还有git-perltools将为您带来所需的内容+更多一些。

另一方面,Yocto具有一个很好的功能,可以在主机上为您构建交叉编译器环境。因此,您可以配置使用f.i. QT Creator使用sdk构建并从主机远程调试目标。这样,您就不需要在Intel Edison上构建/安装工具链。这里有更多信息:https://edison-fw.github.io/meta-intel-edison/3-Building-the-SDK.html

Ferry Toth(又名htot@github)


4
问题虽然古老,但是当我在 Edison 开发板上遇到同样的问题时,这里有我的解决方法,它可能仍然会对一些人有所帮助。我使用的 Edison Yocto 版本是:https://github.com/edison-fw/meta-intel-edison 问题发生的原因是 Edison 开发板上的 git 版本缺少某些部分。在这种情况下,git-submodules 二进制文件缺失于 /usr/libexec/git-core 中。
因此,一旦您按照同一链接中(或此处https://edison-fw.github.io/meta-intel-edison/)的说明构建了 Yocto 映像并刷写了您的开发板,您将不得不将文件 git-submodules 从您的主机 PC 复制到您的 Edison 开发板上。
在您的主机上,进入您的构建目录 (path/to/edison/out/linux64/build),输入以下命令:
find . -name "git-submodule"

同一个文件可能会有不同的位置,选择其中一个。

将其复制到Edison板上的/usr/libexec/git-core中。

现在带子模块的git应该可以正常使用了...


更新:
Ferry的回答更好,但在我的环境(yocto sumo)上某些方面不起作用。包git-perltoolsgit软件包的一部分,因此无需将其添加到core-image中,但仍未安装。我发现包git-perltools依赖于必须安装findutils,因此可能需要将findutils添加到core-image以使Ferry的回答能够起作用。

NB:
我更喜欢评论Ferry的回答,但我没有权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接