Marc Haber
2023-08-25 18:14:34 UTC
Hallo,
ich habe hier die folgende Situation: Gegeben sei eine Webapplikation
S, die von ihren Autoren bevorzugt als git Repository released wird.
Ich habe das Repository im Webspace gecloned, das damals gewünschte
Releasetag 2.3.5 ausgecheckt (git checkout v2.3.5) und in einen branch
"prod" kopiert (git checkout -b prod).
Nun hat die Webanwendung während ihres Betriebs
(1) sowohl Daten nach "prod/uploads" geschrieben,
(2) eine Library in "prod/zend-framework" aktualisiert und
(3) zahlreiche Plugins in "prod/plugins", die ursprünglich auch schon
im ersten Clone enthalten waren, aktualisiert.
Die Verzeichnisse, in die die Applikation während ihres regulären
Betriebs hineinschreibt wie prod/uploads, stehen in einem .gitignore,
das praktischerweise direkt mit dem Clone kam.
Wenn ich jetzt auf die Version 2.4 aktualisieren möchte, mache ich
"git stash save", und habe danach eine saubere working copy, in der
"git checkout master", "git pull", "git checkout v2.4" dann
funktioniert.
Fragenkomplex 1:
Um die Änderungen nun in meinen "prod"-Branch hineinzubekommen,
versuche ich "git checkout prod", "git rebase v2.4" und bekomme eine
Riesenlatte an rebase Konflikten.
Wenn ich git rebase richtig verstanden habe, nimmt sich git rebase die
Commits seit dem "git checkout -b prod", wechselt auf eine Kopie von
v2.4 und versucht meine Commits dann darauf anzuwenden. Mit welchem
Kommando kann ich mir diese Commits ansehen um zu schauen, wo diese
Konflikte herkommen? Oder habe ich da etwas falsch verstanden?
Fragenkomplex 2:
Auch "git checkout prod", "git merge v2.4" endet in einer laaaaangen
Liste von Mergekonflikten.
Kann ich git hier sagen, dass es im Fall eines Mergekonflikts einfach
die komplette Datei aus v2.4 übernehmen soll und "meine" lokalen
Änderungen in prod ignorieren soll? "git merge -s theirs" gibt es
nicht, und git merge -X theirs hilft nicht bei der Problematik, das
gibt auch hunderte von Mergekonflikten.
Die manpage von git merge unter "MERGE STRATEGIES" ist mir zu hoch,
und die im Netz ergooglebaren Texte zu dem Thema besprechen alle nur
den Trivialfall und hören dort auf, wo das Thema interessant wird. Und
das, was auf stackoverflow als Ersatz für git merge -s theirs
vorgeschlagen wird, ist hoffentlich nicht ernst gemeint
(unverständlich).
Fragenkomplex 3:
Diese Aufgabe "nimm alles aus dem anderen Branch was es dort gibt und
lasse nur meine Änderungen da für die es im anderen Branch keine
Neuerungen/Daten gibt" kommt in meiner Git-Welt mehrmals im Jahr vor,
es kann doch kaum angehen dass es für diesen usecase keine einfache
boilerplate-Standardlösung gibt, gerne für jedes Unterverzeichnis
einzeln?
Grüße
Marc
ich habe hier die folgende Situation: Gegeben sei eine Webapplikation
S, die von ihren Autoren bevorzugt als git Repository released wird.
Ich habe das Repository im Webspace gecloned, das damals gewünschte
Releasetag 2.3.5 ausgecheckt (git checkout v2.3.5) und in einen branch
"prod" kopiert (git checkout -b prod).
Nun hat die Webanwendung während ihres Betriebs
(1) sowohl Daten nach "prod/uploads" geschrieben,
(2) eine Library in "prod/zend-framework" aktualisiert und
(3) zahlreiche Plugins in "prod/plugins", die ursprünglich auch schon
im ersten Clone enthalten waren, aktualisiert.
Die Verzeichnisse, in die die Applikation während ihres regulären
Betriebs hineinschreibt wie prod/uploads, stehen in einem .gitignore,
das praktischerweise direkt mit dem Clone kam.
Wenn ich jetzt auf die Version 2.4 aktualisieren möchte, mache ich
"git stash save", und habe danach eine saubere working copy, in der
"git checkout master", "git pull", "git checkout v2.4" dann
funktioniert.
Fragenkomplex 1:
Um die Änderungen nun in meinen "prod"-Branch hineinzubekommen,
versuche ich "git checkout prod", "git rebase v2.4" und bekomme eine
Riesenlatte an rebase Konflikten.
Wenn ich git rebase richtig verstanden habe, nimmt sich git rebase die
Commits seit dem "git checkout -b prod", wechselt auf eine Kopie von
v2.4 und versucht meine Commits dann darauf anzuwenden. Mit welchem
Kommando kann ich mir diese Commits ansehen um zu schauen, wo diese
Konflikte herkommen? Oder habe ich da etwas falsch verstanden?
Fragenkomplex 2:
Auch "git checkout prod", "git merge v2.4" endet in einer laaaaangen
Liste von Mergekonflikten.
Kann ich git hier sagen, dass es im Fall eines Mergekonflikts einfach
die komplette Datei aus v2.4 übernehmen soll und "meine" lokalen
Änderungen in prod ignorieren soll? "git merge -s theirs" gibt es
nicht, und git merge -X theirs hilft nicht bei der Problematik, das
gibt auch hunderte von Mergekonflikten.
Die manpage von git merge unter "MERGE STRATEGIES" ist mir zu hoch,
und die im Netz ergooglebaren Texte zu dem Thema besprechen alle nur
den Trivialfall und hören dort auf, wo das Thema interessant wird. Und
das, was auf stackoverflow als Ersatz für git merge -s theirs
vorgeschlagen wird, ist hoffentlich nicht ernst gemeint
(unverständlich).
Fragenkomplex 3:
Diese Aufgabe "nimm alles aus dem anderen Branch was es dort gibt und
lasse nur meine Änderungen da für die es im anderen Branch keine
Neuerungen/Daten gibt" kommt in meiner Git-Welt mehrmals im Jahr vor,
es kann doch kaum angehen dass es für diesen usecase keine einfache
boilerplate-Standardlösung gibt, gerne für jedes Unterverzeichnis
einzeln?
Grüße
Marc
--
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " |
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " |
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834