Git - 跟踪或从多个远程仓库拉取数据

3

我刚开始使用git(在多年使用svn后),所以可能缺少一些基础知识。

我正在使用树莓派开展一个项目。恰巧,我正在使用的其中一个设备似乎在内核中有一个有问题的驱动程序,因此我正在尝试进行调试。

我从这里开始使用官方的RPi内核。该内核并不完全是最新的,但离最新的也不太远。我需要使用这个内核,因为据文档所述,它包含了一些与树莓派特定相关的驱动等。

然而,由于我正在尝试修复某些内容,所以我认为应该从可能最新的内核开始,即我要查看的wireless-testing存储库。

因此,我想要做的是将已经提交到wireless-testing存储库但尚未存在于RPi存储库中的所有提交都应用到我的项目中。

如果可能的话,最好只限制从wireless testing中提取的提交影响特定目录树,因为我怀疑这样可以减少我从两个存储库提取时的冲突几率。

最后,我希望能够继续跟踪RPi存储库,以便能够从那里拉取更改。

实现这一目标的最佳工作流是什么?

2个回答

0

你可以将它们都添加为远程仓库,然后使用git fetch命令从每个仓库中获取代码。

如果它们在同一个分支上,那么你需要进行合并/变基操作,并解决任何合并冲突。

如果你需要将两个分支的信息合并在一起,在拉取了这两个分支之后,切换到你想要的分支(比如树莓派驱动程序),然后执行 git merge 或 git rebase 命令(它们之间的区别是一个更长的话题),并根据需要解决任何合并冲突。

另请参阅:

http://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows

git分支、派生、获取、合并、变基和克隆,它们有什么区别?


谢谢!在拉取时,有很多冲突是可以预见的。有没有一种方法只拉取那些影响工作副本中特定目录的提交? - harmic

0

进行简单的获取和合并会导致许多冲突,但没有影响我正在调试的驱动程序。如问题所示,我真的想将要合并的提交限制为那些影响此特定驱动程序的提交。

我找到了一种方法来实现这一点。关键是git cherry-pick命令。

首先将上游存储库添加为远程,并从中提取:

git remote add wireless-testing git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
git fetch wireless-testing

现在我有两个远程库,origin(最初克隆的RPi内核仓库)和wireless-testing,这是我想要拉取更改的上游仓库。
接下来,检出您要从中开始的原始分支(在我的情况下为RPi rpi-3.17.y分支),并基于它创建一个新的本地分支:
git checkout rpi-3.17.y
git checkout -b rtlfix

现在,要获取无线测试存储库上超前于我的分支的提交列表,但仅考虑影响特定目录树的提交:
git log wireless-testing/master ^HEAD -- drivers/net/wireless/rtlwifi

这意味着“显示从wireless-testing/master的头开始到当前本地分支的头停止的提交日志,并仅考虑drivers/net/wireless/rtlwifi目录下的文件/目录”。

确认这确实是您想要的列表后,您可以使用cherry-pick命令进行应用:

git rev-list --reverse wireless-testing/master ^HEAD -- drivers/net/wireless/rtlwifi | git cherry-pick --stdin

第一条命令按相反的顺序输出提交列表,然后将它们传输到 cherry-pick 命令中,该命令会应用给定的提交。

这种方法有一些注意事项。其中一个是,如果您采取的任何提交依赖于其他未采取的提交所做的更改,则最终会得到无法编译和/或工作的软件。您可能需要引入其他提交来解决这些问题。


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