git-从多个遥控器跟踪或拉动

git-从多个遥控器跟踪或拉动,git,Git,我才刚刚开始使用git(在使用svn多年之后),所以我可能缺乏一些基础知识 我正在做一个使用树莓圆周率的项目。碰巧,我正在使用它的一个设备的内核中似乎有一个错误的驱动程序,所以我正在尝试调试它 我从官方的RPi内核开始。这个内核并不完全是最新的,尽管它并不落后。我需要使用这个内核,因为根据文档,它包含一些特定于raspberry pi的驱动程序等 然而,由于我正在尝试修复一些东西,我想我应该从最新的内核开始,这就是我正在研究的驱动程序的repo 所以,我想做的是应用所有已经对无线测试repo做出

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

我正在做一个使用树莓圆周率的项目。碰巧,我正在使用它的一个设备的内核中似乎有一个错误的驱动程序,所以我正在尝试调试它

我从官方的RPi内核开始。这个内核并不完全是最新的,尽管它并不落后。我需要使用这个内核,因为根据文档,它包含一些特定于raspberry pi的驱动程序等

然而,由于我正在尝试修复一些东西,我想我应该从最新的内核开始,这就是我正在研究的驱动程序的repo

所以,我想做的是应用所有已经对无线测试repo做出的承诺,但是这些承诺还没有在RPi repo中

如果可能的话,如果我可以将从无线测试中获取的提交限制为仅影响特定目录树的提交,这将是理想的,因为我怀疑这将减少我正在获取的两个repo之间发生某种冲突的可能性

最后,理想情况下,我希望能够继续跟踪RPi回购协议,以便能够从中获取变化


实现这一点的最佳工作流程是什么?

您可以将它们分别添加为Remote和git fetch

如果它们位于同一个分支上,则需要执行合并/重设基础并解决任何合并冲突

如果您需要在两个分支中组合信息,在两次拉取之后,转到您想要的分支(使用raspberry pie驱动程序),并执行git merge或git rebase(这是一个较长对话的主题),并根据需要解决任何合并冲突

另见:


执行直接获取和合并会导致大量冲突,这些冲突都不会影响我正在调试的驱动程序。正如问题中所指出的,我确实希望将我正在合并的提交限制为那些影响这个特定驱动程序的提交

我找到了一个办法。关键是命令

首先将上游回购添加为远程回购,并从中获取:

git remote add wireless-testing git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
git fetch wireless-testing
现在我有了两个遥控器,
origin
(我最初克隆的RPi内核repo)和
无线测试
,这是我想要从中获取更改的更进一步的上游repo

接下来,检查要从中开始的源分支(在我的例子中是RPi RPi-3.17.y分支),并基于它创建一个新的本地分支:

git checkout rpi-3.17.y
git checkout -b rtlfix
现在,要获取无线测试repo上的提交列表,它们位于我的分支之前,但只考虑影响特定目录树的提交:

git log wireless-testing/master ^HEAD -- drivers/net/wireless/rtlwifi
这意味着“显示提交日志,从无线测试/master的头部开始,在到达当前本地分支的头部时停止,并且只考虑目录drivers/net/wireless/rtlwifi下的文件/dir”

确认确实是您想要的列表后,可以使用cherry pick命令继续应用它:

git rev-list --reverse wireless-testing/master ^HEAD -- drivers/net/wireless/rtlwifi | git cherry-pick --stdin
第一个命令以相反的顺序输出提交列表,它们通过管道传输到cherry-pick命令,该命令随后应用给定的提交


这种方法有一些警告。特别是,如果您进行的任何提交依赖于您未进行的其他提交中所做的更改,那么最终将导致软件无法编译和/或工作。然后,您可能需要引入其他承诺来解决这些问题。

谢谢!可以预见,拉车时会有很多冲突。有没有办法只提取那些影响工作副本中特定目录的提交?