Warum versteht mich keiner?

git. RCS des Teufels. Und keiner versteht mich. *soifz*

Rant zum Montag.

Ich habe Sourcecode in einem git-Repository (das mal aus einem anderen geclont wurde, aber niemals nicht wird es Pull-Requests gen Upstream geben; die lokalen Weiterentwicklungen sind nicht »Mainstream-kompatibel« — und das ist auch alles gut so, wie es ist.)

Andere haben das orginäre Repo ebenfalls geforkt, weniger Änderungen am Hauptcode gemacht und jenen aber weiterentwickelt — während sich der Hauptcode in bestimmte, andere Richtungen entwickelt.

Nun möchte ich »einfach« einen Diff der Unterschiede der beiden anderen Repositories haben – dem von »anderer Gruppe« gegen »Upstream« –, um damit dann mittels »patch« meinen Code auf die Version von »anderer Gruppe« zu bringen.

Das, bitte, aus simplen, »patch«-baren diff.
Das, bitte, aus simplen, »patch«-baren diff.
Mit github bekomme ich einen schönen Überblick hin: »33 commits, 53 changed files with 2,890 additions and 108 deletions« — leider aber eben nur im Browser. Auf meine Frage wie ich »https://github.com/freifunk-gluon/gluon/compare/X…Y« als einen Patch bekommen könnte … wird mir beschieden, das hieße »cherry picking« und ginge mit git. *soifz*

Du kannst unterschiedliche remotes haben und die in branches führen.

Ich kann mir auch ins Knie schießen, Zefix! Das war nicht die Frage! Ich habe mein <beeep> Repository und will da anderen <beeeep> Code händisch reinprügeln und das Ergebnis dann committen, fertig. Mir ist die Git-History egal, mir sind die Abläufe von git egal; git ist nur eines der vielen Dreckstools, die ich zur Erreichung meines selbst gesetzten Ziels nutzen muß. Und mit jeder meine Zeit fressender unsäglicher Diskussion über branches, tags und selche Segnungen git für das Softwaredevelopment doch gebracht habe — steigt meine Aversion gegen das Tool exponentiell.

33x cut&paste zu machen kann doch nicht die Lösung sein?! github kann das doch, wenn auch eben nicht offensichtlich als ein runterladbarer Patch, sondern nur für den Browser aufgemotzt. Warum kann man mir nicht einfach die Frage beantworten, sondern muß immer gleich mit irgendwelchem Branch- und Origin-Unsinn kommen, denn ich weder brauche noch haben will? Narf.

Nachtrag: hab’s zu Fuß gemacht, 15 Minuten Aufwand …

$ git clone https://github.com/ffce/gluon.git gluon-ffce
$ git clone https://github.com/freifunk-gluon/gluon.git
$ (cd gluon-ffce/ ; git checkout v2015.1.x)
$ (cd gluon/ ; git checkout v2015.1.x)
$ for i in `(cd gluon-ffce; find . -type f | grep -v \.git)` ; do (cd gluon-ffce/ ; srcfile=../gluon/$i ; if [ ! -e ${srcfile} ]; then srcfile="/dev/null" ; fi ; diff -u ${srcfile} $i 2>&1) ; done >/tmp/my.diff
$ git clone git@github.com:ffgtso/gluon-v2015.1.git gluon-ffgt-v2015.1
$ cd gluon-ffgt-v2015.1/
$ patch --dry-run --backup -p0 </tmp/my.diff 
$ git remote remove origin
$ git remote add origin git@github.com:ffgtso/gluon-ffgt-v2015.1.git
$ git commit -m "Initial clone"
$ patch --backup -p0 </tmp/my.diff | tee /tmp/patch.out
$ # manually fix two rejections
$ rm `find . -name \*.orig` 
$ $ git commit -am "Merged https://github.com/ffce/gluon/tree/v2015.1.x with FFGT Gluon 2015.1.x tree"
[master 1b46a56] Merged https://github.com/ffce/gluon/tree/v2015.1.x with FFGT Gluon 2015.1.x tree
 34 files changed, 803 insertions(+), 106 deletions(-)
 rewrite package/gluon-next-node/files/lib/gluon/ebtables/250-next-node (81%)
$ git push