Wie kann ich einen Patch an einen anderen Entwickler senden und Konflikte vermeiden fusionieren?

StackOverflow https://stackoverflow.com/questions/293768

Frage

Wie erhalte ich ein Patch von einem Commit, um sie an einem anderen Entwickler zu schicken? Und wie kann ich am besten einen Merge-Konflikt mit diesem Patch vermeiden, wenn unsere Bäume zu einem späteren Zeitpunkt verschmelzenden?

Wenn Sie wissen, wie Sie erklären, wie diese Wahl in Ihrem VCS zu tun, wie Subversion, Git, Mercurial, bzr oder etc.

War es hilfreich?

Lösung

In git kann die Ausgabe von git-diff zwischen zwei Commits wie folgt aus:

git diff fa1afe1 deadbeef > patch.diff

Senden Sie die patch.diff an den Entwickler und lassen Sie ihn git-apply es zu seinem Arbeitsbereich wie folgt aus:

git apply patch.diff

Wenn die anderen Entwickler bereits die verfügbaren Commits in seinem Repository er kann immer Pfeife es in mir, ohne wie diese Zusammenführung:

git apply < git diff fa1afe1 deadbeef

Sie können dann hinzufügen und < a href = "http://www.kernel.org/pub/software/scm/git/docs/git-commit.html" rel = "noreferrer"> die Änderungen in der diff begehen die übliche Art und Weise .


Jetzt kommt hier der interessante Teil, wenn Sie den Patch an den Master zurück Zweig zu fusionieren haben (dh öffentlich). Betrachten Sie den folgenden Revisionsbaum, wo C* die aufgebrachte Patch von C im Master-Zweig ist:

A---B---C---D          master, public/master
     \
      E---C*---F       feature_foo

Sie können mit git-rebase dem Thema Zweig aktualisieren (in diesem Beispiel genannt feature_foo) mit seiner vorgeschalteten Kopf. Was das bedeutet, ist, wenn Sie in den folgenden Typ:

git rebase master feature_foo

Git wird den Revisionsbaum wie folgt neu anordnen und gilt auch den Patch selbst:

A---B---C---D          master, public/master
             \
              E*---F*  feature_foo

an den Upstream-Zweig Merging wird nun eine einfache vorspulen merge sein. Prüfen Sie auch, dass die neue Commits E* und F* Arbeit wie die vorherige E und F sind.

Sie können die gleiche Sache gegen einen anderen Zweig Entwickler tun die gleichen Schritte verwenden, sondern es auf einem öffentlichen Repo zu tun, Sie werden Revisionen aus der Entwickler-Repository abgerufen werden. Auf diese Weise werden Sie die anderen Entwickler für einen Patch nicht fragen müssen, wenn sie bereits vorhanden sind von dem, was er an seinem Repo veröffentlicht.

Bitte beachten Sie auf rebase nie ein öffentlicher Zweig , weil der Befehl git Geschichte umschreiben das ist etwas, was Sie wollen nicht auf Zweige zu tun, die Menschen davon ab, und ein Chaos erzeugen, wenn auf Remote-Fusion Repositorys. Auch nie oft integrieren so andere in Ihrem Team kann Teil Ihrer Änderungen übernehmen.

Andere Tipps

In SVN können Sie einfach Ihre Änderungen dann vornehmen, bevor commiting, Rohr die Ausgabe des svn diff auf eine Datei als solche

svn diff > mypatch.diff

Sie können dann Ihre Änderungen rückgängig machen und den Patch zu einem späteren Zeitpunkt gelten mit

patch -p0 -i mypatch.diff

Wie immer nicht blind Patches zu Ihrem Code anwenden und sie immer kontrolliert zuerst.

Sie können auch feststellen, dass der Patch den Quellcode brechen, wenn die Quelldateien deutlich genug geändert haben, seit dem Patch genommen wurde.

Sie können garantiert auch nicht, dass es keine Konflikte zusammenführen, wenn Sie in dem Code zu überprüfen versuchen.

Bzr behandelt eine „Merge-Richtlinie“ zu senden, was bedeutet es den Patch für Sie sendet, so dass die andere Partei einfach „OK“ auf klicken können fusionieren und es gibt weniger futzing um mit Patch / anwenden usw.

gerade:  $ Bzr -o mycode.patch senden

In Subversion gibt es keine schöne Art und Weise, dies zu tun. Ja, können Sie svn diff + Patch verwenden, aber dies wird nur Ihre Probleme verschieben, bis Sie und dann fusionieren werden die Chancen, dass Sie es vergessen haben.

So wie du es in Subversion tun würde, wäre ein Zweig zu erstellen, nicht auf dem Zweig der Commit und bitten Sie den Empfänger des Pflasters auf dem Zweig zu wechseln. Dann können Sie den Zweig mit dem Stamm in der üblichen Art und Weise zusammenführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top