2010-07-23 76 views
2

我使用供应商修改版本的Linux,它基于2.6.14。*​​(更具体而言,我不知道哪个版本)的内核。如何比较两个版本的软件,其中一个版本位于GIT repo中?

我想转发端口供应商的内核变化,但首先它是有意义的,看我做了什么更改。我已经克隆了Linux的混帐回购协议:

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-git 

,现在愿意做一个diff,也许创建一个供应商代码的一个分支。建议?

回答

2

我建议你首先创建一个分支,这个分支肯定比供应商版本基于的分支更早。

然后,您应该签出该新分支,并将工作副本与供应商来源同步。为此,您应该从工作副本中删除所有源文件(请务必跳过.git.gitignore文件!),然后将代码复制到那里。你可以尝试使用rsync

之后,您可以使用git diff来查看所做的更改。

将这些更改提交到新分支git commit

现在切换到主分支(git checkout master),并重新绑定您的新分支(git rebase new-branch)。两个分支中的更改(它们出现,因为您不知道供应商的内核所基于的确切提交)将自动合并,并且不会导致冲突。其他冲突必须解决。

重新绑定成功后,您的HEAD提交将包含供应商所做的更改。

我希望这将适用于旧版本。

+0

这看起来更像是它会达到我想要的。我会尝试,并让你知道它的“答案”。谢谢。 – Jamie 2010-07-23 14:28:58

+0

好的,有100个冲突,但这正是我所要求的,谢谢。 – Jamie 2010-07-23 17:48:34

1
  1. git branch
  2. 建立一个新分支的所有修改过的文件复制在工作副本。
  3. 运行git statusgit diff查看所有更改。
+0

这听起来像是我会比较修改2.6.14内核与内核的最新版本(大约2.6.35.x)。我真的很想看到供应商内核与他们使用的原始2.6.14.x内核之间的差异。这是否做到这一点? – Jamie 2010-07-23 14:12:23

+0

@Jamie:所以使用'git diff ',其中''是您想要比较的SHA1或2.6.14.x内核的标记名称。 – Cascabel 2010-07-23 14:47:01

1

我假设你有供应商内核的* .tar.gz存档。我也会 假设你的供应商从v2.6.14开始。如果您认为您的供应商从 其他版本开始,例如v2.6.14.11,则应该克隆linux-2.6-stable.git存储库,因为它会跟踪所有v2.6.x.y内核。

这是我的建议。

  1. git clone .../torvalds/linux-2.6.git(如您已完成)
  2. cd linux-2.6

  3. git checkout -b vendor-2.6.14 v2.6.14

    这将让你一个新的分支,vendor-2.6.14,我们会努力。 分支点设置为Linus 2.6.14版。

  4. rm * -rf(删除所有文件)

  5. tar xzf ../vendor-sources.tar.gz(从供应商提取文件)

  6. git add --all(阶段文件添加,修改和删除)

  7. git commit -m'vendor changes'

此时你可以运行之类的东西:

  • git diff --stat
  • git diff
  • git show

如果变化很小,你可以把这个补丁并将其应用到一个不同的内核基线,说v2.6.15。

  1. git checkout -b vendor-2.6.15 v2.6.15(创建关v2.6.15一个临时党支部)
  2. git cherry-pick vendor-2.6.14(拿第一,也是唯一承诺,从0.14和适用于这里吧)

在这一点上你有你厂商在git中的变化,所以你可以用它做任何事情。您甚至可以将供应商更改(如果它很大)拆分为smaller patches。天空才是极限。

-Bart

+0

感谢您的一步一步。我会在接下来的一周里重新审视这个问题,如果它证明不那么痛苦,你会得到答案。 – Jamie 2010-07-26 16:24:22