Master in den Branch zurückmergen und Änderungen überschreiben?

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Tiles »

Hiho,

Ich habe einen neuen Mitarbeiter der mich fleissig mit Pull Requests füttert. Und der wird langsam ungeduldig weil er immer auf mich warten muss bis ich seine Pull Requests akzeptiere. Er braucht ja einen sauberen Branch damit er die nächsten Änderungen durchführen und den nächsten Pull Request stellen kann. Möglichst ohne die Änderungen des vorherigen Pull Requests.

Wir suchen also nach einem Weg wie er mehrere Pull Requests aus seinem Branch stellen kann ohne sich selber ins Gehege zu kommen. Im Prinzip bräuchte ich ein Merge das alle vorherigen Änderungen überschreibt. Das macht ja ein normaler merge nicht. Und wenn ich das richtig sehe wäre das ein git rebase. Bin ich da auf dem richtigen Pfad?

Aus der Git Manual werde ich mal wieder nicht so recht schlau. Und auch Stack Overflow hat für das Problem tausend Antworten. Ich weiss nur nicht welche die Richtige ist.

Mit anderen Worten: halp ^^

LG Tiles
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Spiele Programmierer »

Was gehen sollte ist, dass der Mitarbeiter für jeden Pull-Request einen neuen Branch anlegt. (Also einfach mit git branch <BRANCH_NAME> oder via diverse GUIs.)

Wenn der Mitarbeiter nicht den neuen Branch als "Working Copy" auscheckt, sollte er ganz normal weiterarbeiten können ohne das irgendwas durcheinander kommt.

Wenn ich dich richtig verstanden habe, ist "rebase" gerade eher nicht was du suchst. Dadurch wird die Versionsgeschichte umgeschrieben und das macht es unmöglich für Git, das sich spätere Änderungen auf frühere beziehen, die sowohl in deinen als auch im Repository deines Mitarbeiters liegen. Beim Merge gibt es dann jede Menge Konflikte.
Zuletzt geändert von Spiele Programmierer am 23.10.2020, 19:59, insgesamt 1-mal geändert.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Tiles »

Ah, verstehe, dann war es gut dass ich noch mal nachgefragt habe. Danke :)

Ich hatte da eh nen Knoten im Gehirn wie ich grade merke. Er kann ja immer weitere Pull Requests machen. Das ist ja jeweils immer ein einzelner Commit. Und dann bräuchte es noch nicht mal einzelne Branches dafür anlegen. Das Problem fängt dann da an wenn ich mal einen Pull Request verweigere oder wir eine Änderung in dem Commit brauchen. Dann läuft der Branch nicht mehr synchron mit dem Master. Das Problem bleibt also.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Spiele Programmierer »

Die Pull Requests bei GitHub beziehen sich doch auf Branches. Wenn dein Mitarbeiter weiterarbeitet ohne einen entsprechenden Branch für den Pull Request anzulegen, dann werden neue Commits auch in alten Pull Requests auftauchen.
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Alexander Kornrumpf »

Tiles hat geschrieben: 23.10.2020, 19:42 Ah, verstehe, dann war es gut dass ich noch mal nachgefragt habe. Danke :)

Ich hatte da eh nen Knoten im Gehirn wie ich grade merke. Er kann ja immer weitere Pull Requests machen. Das ist ja jeweils immer ein einzelner Commit. Und dann bräuchte es noch nicht mal einzelne Branches dafür anlegen. Das Problem fängt dann da an wenn ich mal einen Pull Request verweigere oder wir eine Änderung in dem Commit brauchen. Dann läuft der Branch nicht mehr synchron mit dem Master. Das Problem bleibt also.
Der Beschreibung nach zu urteilen verwendet ihr git nicht wie es verwendet werden will.

Ich bin kein git experte aber hier mal meine (nicht sehr exotischen) Erfahrungen:

Ein Branch ausgehend von Master (im einfachsten Fall gerade nicht von anderen Branches es sei denn man hätte einen guten Grund) pro logischer Arbeitseinheit oder wie auch immer du das nennen willst ist absolut üblich. Es ist üblich den Branch nach Abschluss der logischen Einheit (Merge) zu löschen. Eine neue Einheit im selben Branch anzufangen ist eigentlich nicht üblich. Weitere pull requests aus demselben Branch würde ich nur solange erwarten bis ein pull request akzeptiert wurde. (Ein Grenzfall sind hier vielleicht mehrere Iterationen derselben logischen Einheit)

Wenn du einen pull request verweigerst, kann man den Grund entweder fixen oder der Branch stirbt. Es sollte da nichts drin sein, was nicht logisch zu dem (dann abgelehnten) pull request gehört. Wenn doch kann man das auch da rausoperieren (cherrypicking) aber man will das eigentlich vermeiden. Also im Zeifel lieber einen Branch mehr anlegen als hinterher den halben branch zu brauchen und die andere Hälfte nicht.

Ein Commit sollte mMn klein genug sein, dass man ihn normalerweise nicht ändern, sondern nur behalten oder ganz rückgängig machen will. Bzw. kann man auch größere Commits ja theoretisch vorwärts fixen, also unklar was du damit eigentlich meinst.

"Synchron mit Master" soll es ja gerade nicht laufen. Diese Entkopplung ist ja gerade der Sinn der Übung. Was passieren soll ist dass es viele parallele branches gibt, du merged die in beliebigem Tempo und Reihenfolge in Master und den neuen Master dann wieder in die anderen Branches, die noch offen sind.
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Alexander Kornrumpf »

Ich sehe gerade dass Spiele Programmierer noch ein anderes Modell vorgeschlagen hat, was mir aber intuitiv (noch aus SVN Zeiten?) falsch erscheint.

Um es explizit zu machen, mein Vorschlag war zu branchen, wenn ich _anfange_ an irgendwas zu arbeiten und zu mergen, wenn ich damit fertig bin.

Spiele Programmierers Vorschlag ist anscheinend immer im selben Branch zu arbeiten und an Zwischenständen rauszubranchen um den Zwischenstand zu für den Pull request zu konservieren. Das hat in der Tat die Probleme, die du nennst, deswegen würde ich das auch nicht tun.

Was das Lehrbuch dazu sagt weiß ich leider nicht. Vielleicht ist die Version die ich beschrieben habe nicht so allgemein üblich wie ich dachte.
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Spiele Programmierer »

Wenn die Änderungen unabhängig sind, dann ist das Modell von Alexander Kornrumpf sicherlich besser. Da stimme ich auf jeden Fall zu. Es gibt weniger Chaos wenn man an den alten Commits nochmal was ändert (z.B. wegen neuem Feedback bei einem alten Pull Request).

Mein Vorschlag war eher für den Fall, in dem sich die Änderungen aufeinander beziehen und man kein "Riesen-Pull-Request" stellen will oder man mit dem Merge der ersten Änderungen nicht so lange warten will.

Ich bin implizit davon ausgegangen, dass Tiles in der 2. Situation steckt.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Tiles »

Ja. Ich stecke in Situation 2. Mein Kompagnon hat einen Dev Branch an dem er seine Änderungen durchführt. Und von dem aus stellt er dann seine Pull Requests :)

Sollte ich einen Pull Request verweigern hat er halt einen Commit in seinem Branch den es im Master nicht gibt. Und den würde ich dann gern loswerden. Bzw er muss den dann loswerden. git revert wäre natürlich wohl eine Möglichkeit. Es muss halt an einem Punkt möglich sein den Branch auf den gleichen Stand wie den Master zu bekommen. Denn am Master ändert sich natürlich auch dauernd was.

Für jeden Merge bzw für jede Issue einen eigenen Branch machen wäre natürlich möglich. Aber dann würde es uns doch den Master mit Branches flooden, oder nicht?

Ich muss mir morgen mal den Link noch mal durchlesen. Danke Leute :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Tiles »

Spiele Programmierer hat geschrieben: 23.10.2020, 19:58 Die Pull Requests bei GitHub beziehen sich doch auf Branches. Wenn dein Mitarbeiter weiterarbeitet ohne einen entsprechenden Branch für den Pull Request anzulegen, dann werden neue Commits auch in alten Pull Requests auftauchen.
Argl. War mein erster Gedanke wohl doch richtig. Ich lass den das einfach mal ausprobieren ^^

Git ...
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Spiele Programmierer »

In dem Fall, dass die Arbeit aufeinander aufbaut und du einen alten Pull Request komplett ablehnst, müssen natürlich auch die neueren Sachen angepasst werden.

Sollte dieser Fall eintreten, gibt es mehrere Möglichkeiten. Wenn die Sachen wirklich stark aufeinander aufbauen, muss man vlt. auch einfach wieder von vorne anfangen. Das ist wohl das allgemeine Lebensrisiko wenn man schonmal vorausprogrammiert, bevor man Feedback zu den Grundlagen eingeholt hat. ;)

Ansonsten kann man mit "rebase" alte Commits ändern bzw. auslassen. Oder man kann neu anfangen und mit Cherry Picking Änderungen in den neuen Branch übernehmen, wenn die Grundlagen ausgebessert sind. Es gibt da viele Möglichkeiten.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Tiles »

Jepp. Danke. Dann muss ich wohl meine Strategie mit dem Devbranch noch mal überdenken. Für jeden Pull Request einen neuen Branch den man nach getaner Arbeit einfach löscht scheint da fast sinnvoller.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Jonathan
Establishment
Beiträge: 2352
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Jonathan »

Tiles hat geschrieben: 23.10.2020, 20:45 Git ...
Meine These ist ja, dass Versionskontrolle ein inhärent kompliziertes Problem ist. Sprich selbst die besten Tools können einem das Leben nur bequemer und schneller, aber nicht simpler machen, man wird immer mitdenken müssen.
Ich arbeite aktuell an einem Projekt, das nur über Seafile synchronisiert wird. Das ist einfach zu benutzen, aber hin und wieder fehlen mir doch die ganzen Features die git mit seinen händisch erstellten Logs und explizitem Mergen (und all den anderen Dingen) hat. Aber so dringend um alle zu nötigen mal richtige Versionsverwaltung (z.B. git) zu lernen, ist es dann doch nicht. Oh well...
Aber was dabei eben hilft ist die Perspektive, dass man da gerade kein simples Problem löst und es daher ruhig anspruchsvoll und auch mal nverig sein darf. Das ist nichts, was komplett automatisch passiert, sondern ein echter Teil der Arbeit. Vielleicht hilft das gegen Frustration.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Tiles »

Ja, ich bin mir dieser Komplexität durchaus bewusst. Das hält mich aber nicht vom Fluchen ab :D

Wr haben das jetzt auf einen neuen Branch für jeden neuen Commit umgestellt. Das läuft prima. Danke noch mal :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Alexander Kornrumpf »

Tiles hat geschrieben: 25.10.2020, 07:35 Ja, ich bin mir dieser Komplexität durchaus bewusst. Das hält mich aber nicht vom Fluchen ab :D

Wr haben das jetzt auf einen neuen Branch für jeden neuen Commit umgestellt. Das läuft prima. Danke noch mal :)
Ich weiß nicht ob ich das richtig verstehe, dass dein Mitstreiter früher in jedem Commit einen Pull-Request gestellt hat, und ihr jetzt auf Branch-Commit-Pull Request umgestiegen seid.

Falls ja sind die Einheiten, die er commited vielleicht zu groß oder die Pull Requests zu klein.

Es geht jedenfalls, ansonsten nach demselben Schema, auch Branch-Commit-...-Commit-Pull Request.

Falls eurer alter Workflow das nicht konnte, könnt ihr damit ja auch mal experimentieren. Ich mag es wenn die Commit History wirklich so eine art Dokumentation ist und nicht ein großer Commit mit Message "Implemented Feature".
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Tiles »

Genau. Das war früher deswegen ein Commit pro Pull Request weil früher einfach nicht so viele Leute Code gestiftet haben. Und es war meist jemand anders. Aber jetzt habe ich gerade jemanden der regelmässig mitarbeitet. Der haut auch gern mal 10 Issues am Tag weg. Deswegen fiel es ja jetzt erst auf dass unsere bisherige Methode nichts taugt.

Wir haben das jetzt so umgestellt dass es jeweils einen neuen Branch für eine Issue gibt. Und mit dem Branch macht man dann den Pull Request. Und da kann man auch nachcommitten und nachfixen so lange der Branch existiert. Und wenn getan wird der Pull Request akzeptiert und der Branch gelöscht.

Und ja, ich mag es auch wenn ein Commit jeweils nur ein Problem behandelt, und nicht ein Wust von Sachen die auch noch nebenher gefixt wurden beinhaltet.
Zuletzt geändert von Tiles am 26.10.2020, 08:16, insgesamt 1-mal geändert.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Specialist
Establishment
Beiträge: 135
Registriert: 29.08.2003, 14:22
Kontaktdaten:

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Specialist »

Übliche Praxis ist ein Branch pro Feature.
Während der Arbeit an dem Feature kann man in dem Branch beliebig viele Commits machen.
Sobald fertig, werden die einzelnen Commits gesquasht (zusammengeführt zu wenigen, logischen Commits) und dann der Pullrequest erstellt.
Schau dir mal Squashing in Git an, bzw. interactive rebasing.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Master in den Branch zurückmergen und Änderungen überschreiben?

Beitrag von Tiles »

Danke fürs bestätigen :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Antworten