如何解决Poky 如何“包含”其他存储库?
我读了几次(例如 here),Poky 是一个包含 OpenEmbedded、Bitbake 和其他内容的参考发行版。但我一直不确定“包含”的含义。现在我检查了,并且非常惊讶地发现 Poky repository 字面 包含其他几个存储库的内容。其中至少:
似乎这些存储库被盲目地复制到另一个存储库中。但进一步挖掘,它们并没有被盲目复制。事实上,每个提交在两个存储库中似乎总是相同的。示例:
me@home:~% cd poky && git show 8877980c99 > x && cd ..
me@home:~% cd openembedded-core/ && git show 812eb3121e > x && cd ..
me@home:~% diff poky/x openembedded-core/x
1c1
< commit 8877980c99045d53c2465faeb45aa6e81f126708
---
> commit 812eb3121e0aabe4e3de9a8c61b1e62c87f55aa4
6,7d5
<
< (From OE-Core rev: 812eb3121e0aabe4e3de9a8c61b1e62c87f55aa4)
除了提交哈希和那一行 From OE-Core rev: ...
提交是真正相同的 - 即使时间戳匹配到同一秒。 这到底是怎么工作的?
此外,将一个 repo 上的内容复制到另一个 repo 中是否违反了 DRY 原则,这在某种意义上是不是不好的做法?每个提交者是否负责他的提交总是落在两个存储库中?回购协议是否存在分崩离析的风险?事实上,我确实发现了一些略有不同的(无关紧要的)文件,例如:
me@home:~% diff poky/Meta-poky/README.poky Meta-yocto/Meta-poky/README.poky
25c25
< disTRO = "nodistro") and contains only emulated machine support.
---
> disTRO = "") and contains only emulated machine support.
解决方法
如评论中所述,存储库使用名为 combo-layer 的 Python 脚本从其他存储库导入更改,保留其所有历史信息。
虽然经常与中央服务器,甚至是 GitHub 之类的托管服务一起使用,但 git 被明确设计为 去中心化 版本控制系统,因此这种事情实际上很容易做到:
-
git remote
可以添加一个指向任何其他git仓库的指针;没有必须匹配的标识符才能说明它们是相关的 -
git merge
有一个--allow-unrelated-histories
标志,可让您组合两组没有任何共同历史记录的提交 -
git cherry-pick
和git rebase
可以在其他一些历史记录之上重新创建提交中的更改,包括时间戳和提交者信息;有编辑提交消息的选项 -
git format-patch
和git am
允许以与git cherry-pick
或git rebase
非常相似的方式导出和导入一系列补丁文件(最初用于通过 e-邮件)
所以在你的例子中,发生了这样的事情:
- 已获取来自
openembedded-core
的最新历史记录 - 自上次导入后发现提交
812eb3121e0aabe4e3de9a8c61b1e62c87f55aa4
是新提交 - 为该提交生成了补丁文件
- 修改补丁以在提交消息中添加“(From OE-Core rev: 812eb3121e0aabe4e3de9a8c61b1e62c87f55aa4)”行
- 提交已合并到
poky
存储库,保留其原始提交者信息
就 git 而言,这并不是特别神奇;很高兴在您要求的任何地方应用提交。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。