Contributor

Guite edited this page Nov 12, 2014 · 3 revisions

An einem auf GitHub.com gehosteten Projekt als Contributor mitwirken

(als externer Patch-Mitwirkender mit Lese-Berechtigungen)

Dieser Artikel soll beschreiben wie man an Patches für den Zikula Core oder beliebigen Modulen mitwirkt, die auf GitHub.com gehostet werden und auf die man keine Schreibrechte hat.

Der große Vorteil von GIT (und den Diensten die GitHub.com bereitstellt), ist das Jeder zu jedem Projekt etwas beitragen kann, ohne eine Erlaubnis zu benötigen. Im Grunde kann man also einen Fork (oder Branch) eines Repositiorys erstellen, eigene Patches oder Features implementieren und dann den gesamten Branch den Collaborators (Eigentümern) des Projektes einzureichen. Diese können dann die Änderungen in das Projekt einpflegen (mergen) können. Das macht das Projekt weitaus offener und gewährleistet eine gewissen Qualitätskontrolle, da die eingereichten Patches überprüft werden. Es ist leichter die Patches von Mitwirkenden mit dem Projekt zusammen zu führen (mergen), als diff-Patches anzuwenden.

Einstieg

Besuche das Projekt bei dem du mitwirken möchtest und klicke auf das [FORK]-Icon. Das wird das Repository auf deinen eigenen GitHub.com Project-Space kopieren (github.com/you_username). Du wirst sehen, dass der Fork zurück auf das Haupt-Repository verlinkt. In diesem Beispiel werden wir uns auf das das Projekt github.com/zikula-modules/Content (das Content-Modul) beziehen, das im Project-Space von zikula-modules auf github.com gehosted wird.

Jetzt muss das geforkte Repository auf den Computer geklont werden. Das geschieht mit:

$ git clone git@github.com:your_username/Content.git

Schließlich muss das lokale Repository so eingestellt werden, dass die Änderung im 'upstream' verfolgen werden. Wir weisen den Namen 'upstream' zu, man kann aber jeden Namen verwenden, den man möchte.

$ cd core
$ git remote add upstream git://github.com:zikula-modules/Content.git

(das ist die ursprüngliche Repository-Adresse von der man geforked hat)

$ git config branch.master.remote upstream

Master-Branch aktuell halten

Den Master-Branch aktuell halten (wie svn update)

$ git checkout master
$ git pull --rebase

Alternativ kann man den Master-branch auch innerhalb jeder Branch synchronisieren. Hierzu verwendet man die fetach/base Syntax:

$ git fetch upstream
$ git rebase upstream/master master

Mitarbeiten

Erste Regel: Arbeite niemals in der Master-Branch. Wenn man etwas machen möchte, legt man eine 'Topic Branch' an. In dieser kann man dann arbeiten und alles committen.

$ git branch ticket_1234

Hier sollte man jetzt seine arbeit machen....

$ git status
$ git commit<nowiki> <</nowiki>filespec> -m "commit message"

Bitte beachten: Wenn man den Branch mit dem master upstream aktuell halten möchte, verwendet man die folgende Syntax. Das hier sollte man auf jeden Fall machen, bevor man seine abgeschlossene Arbeit in den upstream pusht. Beachte das man nach einem upstream push keinen rebase mehr durchführen kann!

$ git fetch upstream
$ git rebase upstream/master ticket_1234

Dann sollte man den Topic Branch zu "origin" pushen, damit ein Collaborator des Projektes die Patches überprüfen und pullen kann.

$ git push origin ticket_1234

Beachte das man nach einem upstream push keinen rebase mehr durchführen kann! Wenn man den master in den Branch pullen muss, nach dem der push erfolgt ist, verwendet man einfach:

$ git pull

Gehe zu github.com, wähle den Branch aus und mache eine PULL REQUEST auf das upstream Pojekt (d.h. die Quelle / oberster Level des Fork-Baums). Ein Collaborator des Projektes wird die Arbeit überprüfen und deine Arbeit dann überführen. Sobald der Topic Branch gemerged wurde, kann man es vom lokalen Repository und von github.com löschen.

$ git branch -d ticket_1234
$ git push origin :ticket_1234

(Randnotiz: Contributors für den Zikula Core müssen ein Contributor License Agreement unterschreiben, bevor irgendwelche Patches bzw. Pull Requests akzeptiert werden).

Das folgende Video sollte einem einen Eindruck über das Ganze verschaffen. Es ist kein "How-To" und zeigt auch nicht alle Schritte. Aber es gibt einem ein Gefühl dafür, wie einfach (und vorteilhaft) die Vorgehensweise eigentlich ist:

Es kann sein das ich mich hier ein wenig dumm anstelle. Ich kann nicht herausfinden, wie man git so verwenden kann, dass es meine lokale Testseite richtig aktuell hält. Ich kann eine Kopie des 1.3.0er Kerns pullen, kein Problem. Ich kann eine Kopie von jedem Modul das im git Repository existiert, pullen. Was ich aber nicht kann, ist einfach ein Modul-Verzeichnis wie z.B. content.git/src/modules/content zu nehmen, dieses in das Zikula 1.3.0 modules Verzeichnis zu legen, so das es funktioniert und ich die Möglichkeit habe es zu aktualisieren wenn nötig.

Das alles war wirklich einfach mit SVN. Update auf 1.3.0 und ein Update aller Module die Ich verwende im modules-Verzeichnis zur gleichen Zeit. Weiterhin werden für einige Zeit in git und CoZi einige Module sein. Ich bin mir nicht sicher wie das die Aktualisierung der Test-Seite beeinflusst. Ich war teilweise verwirrt, alles aktuell zu halten. Ein paar Ratschläge wären wirklich toll. Ich hatte die selben Fragen gestern und habe das hier gefunden: http://git.or.cz/course/svn.html

Wenn man wirklich mitwirkt, muss man "git pull --rebase" verwenden. Wenn man einfach versucht, auf der aktuellsten Entwicklungs-Version zu bleiben und keine Patches einspielen will, ist "git pull" ausreichend. In diesem fall wird man das Repository nicht geforked haben, sondern einfach zikula/core direkt gepullt haben. In diesem fall verfolgt 'origin/master' bereits das github.com/zikula/core Repository.

Wenn man nur Patches (als Nicht-Core-Entwickler) beiträgt, hat man das Repository geforked im eigenen Project-Space, und dieses wiederum gecloned. In diesem fall muss es den Remote (der den Master verfolgt) auf github.com:/zikula/core zeigen lassen:

git remote add upstream git://github.com:zikula/core.git
git config branch.master.remote upstream

Da sich dieses Dokument an Nicht-Core-Entwickler richtet (d.h. Personen die keinen Schreibzugriff auf zikula/core) haben, werde ich hier keine Beispiele mehr aufführen. Generell sollte man alle SVN Paradigmen so schnell wie möglich vergessen, weil einem diese bei GIT nur Probleme bereiten werden.

Die ausgezeichneten Referenzen sind:

Schaut außerdem mal bei youtube.com/dordrak rein. Ich habe einige Videos erstellt, die sich als nützlich erweisen könnten. Wie ich bereits oben erwähnte, habe ich kein Problem mit alle dem. Es scheint alles sehr gut zu funktionieren. Ich habe jedoch ein Problem damit, eine funktionierende Testseite zu warten, die ich auch effizient aktualisieren kann. Ich habe bisher keinen Weg gefunden, ein module-Verzeichnis (Content, Clip, usw.) von einem Repository zu nehmen und es in das Zikula core modules Verzeichnis zu bringen und es dabei einfach zu aktualisieren.

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.