2013-03-21 2 views
5

Nehmen wir an, es gibt ein zentrales Repository, in das die Commits von Satelliten übertragen werden. Entwickler A macht einige Commits auf seinem Repo, während B selbst etwas macht.Wie man einen Git Patch anwendet, als ob der Autor zu meinem Repo verpflichtet wäre?

Nun möchte A einen Commit von B in sein Repo einbinden (auf das er nicht direkt zugreifen kann).

Ein Weg ist, B ein Patch zu erstellen und es an A zu senden, aber in diesem Fall gibt es zwei Probleme: 1. Der Patch wird als lokale Änderungen an A erscheinen, die es dann (mit seinem eigenen Namen) begehen müssen) 2. Sobald das zentrale Repo aktualisiert wird, werden die Änderungen konfligieren (von zwei verschiedenen Autoren geschoben).

Gibt es eine Möglichkeit, den Patch direkt als "Commit" auf lokalem A Repo anzuwenden, so dass er so aussieht, als ob er aus dem zentralen Repo (d. H. Ursprung) gezogen würde?

PS: (das gilt möglicherweise nicht: siehe Kommentare: gibt es eine Möglichkeit, Text zu verifizieren, bis verifiziert?) Nach einigen weiteren Untersuchungen und Tests sieht auch git am < git-formatiert-Patch wäre es so, dass der Patch scheint dem lokalen Master verpflichtet zu sein (dann hoffe ich, dass es als das gleiche Commit erkannt wird, wenn B es zum zentralen Repo schiebt). Es sieht aus wie git apply, das den Patch nicht committed ...

+1

'git am' wird ** nicht ** zu einem Commit führen, das identisch mit dem Original ist. Die Autorenidentifikation und die Zeit bleiben erhalten, aber das neue Commit wird eine andere Commit-Zeit haben und (wenn Sie nicht lügen darüber, wer Sie sind) eine andere Committer-Identität haben. Diese Unterschiede führen dazu, dass das resultierende Commit eine andere SHA1 ID hat. – qqx

Antwort

3

B könnte erstellen und senden Sie eine bundle anstatt ein Patch. Dies ermöglicht das Senden von Commits, wenn keiner der für push oder fetch verfügbaren Transporte funktioniert.

13

git am ist, was Sie suchen. Bitten Sie ihn, lokal zu begehen und tun Sie git format-patch. Dies wird einen Patch erstellen. Sie können dann git am verwenden, um es zu Ihrem Repo hinzuzufügen.

Verwandte Themen