Aus verschiedenen GitHub Repository Forks etwas zusammenbasteln!

GitHub ist cool, Forks noch kühler, Pull-Requests leider oft unterkühlt!

Wer sich auf GitHub rumtreibt findet hier oder da einmal ein Projekt, welches er ausprobieren will. Vielleicht dann auch selber etwas ändern oder beisteuern.

Oft sind solche Projekte schon von einigen Leuten "forked" (kopiert) und ebenfalls nicht selten, sind Erweiterungen oder Fehler schon "mehr oder weniger gut" gefixt oder erstellt.

Dies wird dann oft als "Pull-Request" dem original Autor angeboten! Dort bleibt es dann manchmal "liegen". Entweder ist es nicht "perfekt", es ist zu "neu", "kontrovers" oder der original Autor hat grade keine Zeit dafür.

Was für mich dann immer ein Problem ist:

Man benutzt in dem Fall, dass man selber etwas ändern und vielleicht auch später beisteuern will einen eigenen "Fork" und dort (in der Regel) möglichst einen extra Branch.

Wie bekomme ich "Pull Requests" aus anderen Forks - die noch nicht im Originalprojekt integriert wurden - in meinen Branch?

Dazu gibt es einige Möglichkeiten:

Das "forked" Repository als weitere Remote hinzufügen.

Remote mit Namen "somename" hinzufügen:

git remote add somename git@github.com:somename/someproject.git

Nun die Remote ziehen:

git fetch somename

Anzeigen was es so gibt:

git branch -r

Neuen Branch machen und einen der anderen mergen

git checkout -b "mystuff"
git merge somename/somebranch

Natürlich geht hier auch Cherry-Pick usw.

Für mich oft die schönere Möglichkeit: Einfach den Pull-Request als Patch auf meinen Branch anzuwenden.

Meinen "Bastel-branch" erzeugen:

git checkout -b "mystuff"

Pull request URL aus dem original Repository raussuchen.

https://github.com/origname/someproject/pull/12

Dort .patch anhängen, mit curl runterladen und per Pipe direkt mit git am anwenden:

curl http://github.com/origname/someproject/pull/12.patch | git am

Das geht auch mit einzelnen Checkins!

Wenn man Pull-Requests im eigenen Projekt hat oder ein fremdes Projekt cloned und dort vorliegende Pull-Requests Lokal testen will:

Refs zu den pull requests hinzufügen:

git config --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

Dann die pull-requests runterladen

git fetch origin

Nun kann man diese einzeln Lokal benutzt

git checkout pr/###

Ich hoffe, damit dem ein oder anderen das Testen und Arbeiten mit GitHub Projekten etwas erleichtert zu haben. Für mich ist es jedenfalls sehr spannend die Arbeit von verschiedenen Autoren selber anwenden und prüfen zu können, ohne auf den "Besitzer" des "Original Repositories" zu warten!

comments powered by Disqus