Shopware Pull Requests im Repository

Shopware ist bekanntlich Opensource und lebt daher auch von Pull Requests. Einer Möglichkeit von extern Änderungen vorzuschlagen. Hier möchte ich kurz und knapp darauf eingehen.

Pull Request

A pull request is a method of submitting contributions to an open development project. It is often the preferred way of submitting contributions to a project using a distributed version control system (DVCS) such as Git. (Quelle)

Die Beiträge/Contributions können dann mit den Reviewern/Ownern zusammen diskutiert werden. Mit verschiedenen CI/CD Tools lassen sich hier ebenfalls einige nützliche Tests bei jedem PR einfügen. Bei Shopware ist dies Scrutinizer und Travis – neben diesen CIs wird außerdem geprüft ob der „Contributor“ bereits ein Contributor License Agreement bestätigt hat.

Repository einrichten

Ich habe auf meinem Rechner einen Ordner in meinem home Verzeichnis der FORKED REPOS heißt

mkdir ~/FORKED\ REPOS/
cd FORKED\ REPOS/
git clone https://github.com/Isengo1989/shopware.git

In eurem Fall müsst Ihr euren Benutzernamen noch einsetzen (meiner ist Isengo1989)

Um einen Fork zu erstellen klickt Ihr einfach auf Fork:

Nachdem Ihr das Repo geclont habt geht Ihr in dessen Ordner und fügt einen upstream hinzu. Diesen benötigt Ihr um euren Fork up-to-date zu halten. Denn dort werden im best case täglich Änderungen gemerged.

cd shopware
git remote add upstream https://github.com/shopware/shopware.git
git remote -v

Mit add fügt Ihr den Remote upstream hinzu, dieser ist neben origin nun der einzige.

origin -> euer Fork
upstream -> offizielles Shopware Repo

Wenn Ihr den Fork erst vor kurzem erst hinzugefügt habt, sollte dieser auch up-to-date sein. Falls nicht macht Ihr einen fetch auf den upstream und merged diesen dann mit eurem Fork.

git fetch upstream
git checkout master
git merge upstream/master

Da Ihr aber meistens auf einem Branch arbeitet (Ihr macht z.B. Änderungen auf dem 5.4 Branch) macht Ihr folgendes:

git fetch upstream
git checkout 5.4
git merge upstream/5.4

Das öffentliche Repo hat auch gar keinen master Branch, dieser ist nur für Core Entwickler direkt bei Shopware sichtbar.

Commit oder Branch

Shopware empfiehlt euch das Ihr einen Feature Branch erstellt (https://developers.shopware.com/community/contributing-code/#create-a-new-feature-branch), Ihr könnt allerdings auch nur einen Commit machen, diesen pushen und einen Merge Request in Github erstellen. Das ist euch überlassen und hängt auch von der Komplexität ab.

Commit im nachhinein ändern

Sobald euch der „Shopware Bot“ – also irgendein Entwickler von Shopware Änderungen vorschlägt oder den PR auf Incomplete setzt habt Ihr verschiedene Möglichkeiten. Ich könnt den PR verwerfen und einen neuen erstellen oder eure Änderungen bearbeiten. Dazu macht Ihr folgendes:

git rebase --interactive 'COMMIT-ID^'
*eure Änderungen einfügen*
git commit --all --amend --no-edit
git rebase --continue
git push -f

nach dem git rebase habt Ihr eine Liste von Commits – wählt dort euren Commit aus und nutzt „edit“ statt „pick“ vor dem Commit.

Danach macht Ihr eure Änderungen, commited diese und fahrt mit dem rebase fort. Am Ende forced ihr mit -f den push. Danach ist der Commit im origin Branch bereits upgedated.

Commits squashen

Commits könnt Ihr auf versch. Wege squashen, also zusammenführen

reset –soft

git reset --soft HEAD~9 && git commit

Hierbei wählt Ihr die Anzahl an commits hinter dem HEAD~ aus. Am einfachsten schaut Ihr mit git log welche commits es betrifft (oder direkt in Github/Gitlab).

reset –hard

git reset --hard HEAD~12
git merge --squash HEAD@{1}
git commit

Schaut vorher mit git status ob Ihr „uncommitete“ Änderungen habt, die gehen natürlich verloren bei reset –hard. Ihr geht wie oben also auf den Stand des 12ten commits zurück. Mit HEAD@{1} holt Ihr euch den Stand vor eurem letzten Kommando. Das ganze commited Ihr dann noch.

rebase -i

git rebase -i HEAD~3

Öffnet euren Editor (nano,vim etc.) und wählt dort dann pro commit entweder squash oder fixup – ich nutze hier lieber fixup – denn so werden die Änderungen in den oberen commit germerged und die Nachricht wird ignoriert.

Squash commits mit rebase -i

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert