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

时间:2014-10-27 11:14:36

标签: git

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

我正在使用Raspberry Pi进行项目。碰巧,我使用它的其中一个设备似乎在内核中有一个错误的驱动程序,所以我试图调试它。

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

然而,由于我正在努力解决问题,我想我应该从最新的内核开始,这是我正在研究的驱动程序的wireless-testing回购。

所以,我想要做的是应用所有对无线测试仓库进行的提交,但这些提交尚未包含在RPi Repo中。

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

最后,我希望能够继续跟踪RPi回购,以便能够从那里获取更改。

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

2 个答案:

答案 0 :(得分:0)

您可以将它们添加为遥控器和git fetch

如果他们在同一个分支上,那么您需要进行合并/ rebase并解决任何合并冲突。

如果你需要在两个分支中组合信息,在两个分支之后转到你想要的分支(使用树莓派驱动程序的东西)并执行git merge或git rebase(差异是更长时间对话的主题)和根据需要解决任何合并冲突。

另见:

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

git branch, fork, fetch, merge, rebase and clone, what are the differences?

答案 1 :(得分: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,我想从中提取更多的上游仓库。

接下来检查你要开始的origin分支(在我的例子中是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

这意味着"显示从无线测试/主站头部开始的提交日志,并在您到达当前本地分支的头部时停止,并且仅考虑目录驱动程序/网络/无线下的文件/目录/ rtlwifi"

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

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

第一个命令以相反的顺序输出提交列表,然后将它们传送到cherry-pick命令,然后应用给定的提交。

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