2 Stimmen

Wie kann ich zwei Softwareversionen vergleichen, von denen sich eine in einem GIT-Repository befindet?

Ich verwende eine vom Hersteller modifizierte Version von Linux, die auf einer 2.6.14.* (genauer, ich weiß nicht welche) Version des Kernels basiert.

Ich möchte die Kernel-Änderungen des Herstellers weiter portieren, aber zuerst möchte ich sehen, welche Änderungen vorgenommen wurden. Ich habe das Linux-Git-Repository geklont:

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

und möchte nun ein Diff machen und vielleicht einen Zweig mit dem Herstellercode erstellen. Vorschläge?

2voto

P Shved Punkte 90784

Ich würde vorschlagen, dass Sie zunächst einen Zweig erstellen, der mit dem Commit beginnt, der definitiv älter ist als der, auf dem die Vendor-Version basiert.

Dann sollten Sie in diesen neuen Zweig auschecken und die Arbeitskopie mit den Quellen Ihrer Lieferanten synchronisieren. Um dies zu tun, sollten Sie alle Quelldateien aus der Arbeitskopie löschen (stellen Sie sicher, dass Sie die .git y .gitignore Dateien!), und kopieren Sie dann Ihren Code dorthin. Sie könnten versuchen, mit rsync dafür.

Danach können Sie mit git diff um zu sehen, welche Änderungen vorgenommen wurden.

Übertragen Sie diese Änderungen in den neuen Zweig mit git commit .

Wechseln Sie nun zum Master-Zweig ( git checkout master ), und legen Sie Ihren neuen Zweig auf diesen um ( git rebase new-branch ). Die Änderungen, die in beiden Zweigen waren (sie erscheinen, da Sie den genauen Commit, auf dem der Kernel des Herstellers basiert, nicht kennen), werden automatisch zusammengeführt und verursachen keine Konflikte. Andere Konflikte müssen aufgelöst werden.

Nach einem erfolgreichen Rebase enthält Ihr HEAD-Commit die von Ihrem Anbieter vorgenommenen Änderungen.

Ich hoffe, dass dies bei einer so alten Version funktioniert.

1voto

Aaron Digulla Punkte 308693
  1. Erstellen Sie einen Zweig mit git branch
  2. Kopieren Sie alle geänderten Dateien in die Arbeitskopie.
  3. Ejecutar git status y git diff um alle Änderungen zu sehen.

1voto

bartman Punkte 154

Ich gehe davon aus, dass Sie ein *.tar.gz-Archiv des Kernels Ihres Herstellers haben. Ich werde auch davon aus, dass Ihr Hersteller von v2.6.14 ausgeht. Wenn Sie glauben, dass Ihr Hersteller von einer einer anderen Version, z.B. v2.6.14.11, sollten Sie einen Klon des linux-2.6-stable.git Repository zu verwenden, da es alle v2.6.x.y Kernel enthält.

Ich schlage Folgendes vor.

  1. git clone .../torvalds/linux-2.6.git (wie Sie es bereits getan haben)

  2. cd linux-2.6

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

    dann erhalten Sie einen neuen Zweig, vendor-2.6.14 an denen wir arbeiten werden. Der Verzweigungspunkt ist auf Linus' Version 2.6.14 gesetzt.

  4. rm * -rf (alle Dateien löschen)

  5. tar xzf ../vendor-sources.tar.gz (Dateien vom Anbieter extrahieren)

  6. git add --all (hinzugefügte, geänderte und entfernte Stufendateien)

  7. git commit -m'vendor changes'

An diesem Punkt können Sie Dinge ausführen wie:

  • git diff --stat
  • git diff
  • git show etc.

Wenn die Änderungen gering sind, können Sie diesen Patch auf eine andere Kernel-Basisversion anwenden, z.B. v2.6.15.

  1. git checkout -b vendor-2.6.15 v2.6.15 (Erstellen eines temporären Zweigs von v2.6.15)
  2. git cherry-pick vendor-2.6.14 (nehmen Sie die erste und einzige Überweisung aus .14 und wenden Sie sie hier an)

Zu diesem Zeitpunkt haben Sie Ihre Vendor-Änderungen in Git, Sie können also alles damit machen. Sie können sogar die Vendor-Änderung, wenn sie sehr groß ist, aufteilen in kleinere Flecken . Der Himmel ist die Grenze.

-Bart

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X