Lernpfad:Einführung in Git/4: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Zeile 36: Zeile 36:
Wenn eine Datei gleichzeitig von mehreren Entwicklern bearbeitet wurde, dann kann es zu einem ''Konflikt'' kommen. Normalerweise würden die Änderungen des einen Entwicklers die des anderen überspeichern. {{Git}} erkennt diesen Konflikt aber und erlaubt es dem zweiten Programmierer, das Problem zu beheben.
Wenn eine Datei gleichzeitig von mehreren Entwicklern bearbeitet wurde, dann kann es zu einem ''Konflikt'' kommen. Normalerweise würden die Änderungen des einen Entwicklers die des anderen überspeichern. {{Git}} erkennt diesen Konflikt aber und erlaubt es dem zweiten Programmierer, das Problem zu beheben.


Wenn ein Konflikt in einer Datei aufgetreten ist wird in {{GitHub Desktop}} ein Hinweis angezeigt.
=== Konflikte in Fork auflösen ===


[[Datei:GitHub_Desktop_conflictMsg.png|center|frame]]
Wenn ein Konflikt in einer Datei aufgetreten ist, wird in {{Fork}} ein Hinweis angezeigt.


Die Meldung weist auf den Konflikt hin und das zunächst ein ''fetch'' vom Server ausgeführt werden muss, um die aktuellen Änderungen herunterzuladen. Klicke dazu in der Meldung auf "Fetch".
[[Datei:Fork conflict 1.jpg|center|frame]]


Oben wird nun angezeigt, dass es sowohl Änderungen auf dem zentralen Server gibt, als auch in der lokalen Kopie (Pfeile und Zahlen nach oben/unten). Um das Problem zu beheben klicke oben auf "Pull origin", damit die geänderten Dateien in dein lokales Repository geladen werden.
Links wird angezeigt, dass es sowohl Änderungen auf dem zentralen Server gibt, als auch in der lokalen Kopie. Um das Problem zu beheben, klicke oben auf "Resolve".


[[Datei:GitHub_Desktop_ResolveMsg.png|center|frame]]
Wähle eine Datei mit einem Konflikt und dann "Merge in Fork".


Es gibt nun verschiedene Möglichkeiten, den Konflikt aufzuheben. Du kannst die entsprechende Datei einfach in einem Texteditor öffnen und von Hand bearbeiten, oder ein spezielles Tool mit einer grafischen GUI benutzen.  
[[Datei:Fork merge 1.jpg|center|frame]]


==== Konflikte mit dem Texteditor lösen ====
Es wird nun ein zwei geteiltes Fenster angezeigt, in dem die beiden in Konflikt stehenden Versionen der Dateien nebeneinander angezeigt werden. Du kannst für jede Zeile entscheiden, welche Version in der Datei behalten werden soll. Du kannst auch beide Versionen einfügen oder im unteren Teil des Fensters das Resultat von Hand bearbeiten.
Öffne die Datei in einem Texteditor deiner Wahl (zum Beispiel ''Notepad++''). Alle Konflikte in der Datei sind mit speziellen Markierungen versehen:
 
[[Datei:Fork merge 2.jpg|center|frame]]
 
Klicke schließlich auf "Resolve" und dann "Commit". Der Konflikt wurde aufgelöst und die zusammengefügte Datei direkt ''committed''.
 
{{Erfolg|Hast du alle Konflikte aufgehoben, kannst du erneut versuchen deine Änderungen zu "pushen".}}
 
=== Konflikte mit dem Texteditor lösen ===
Da es sich bei allen Dateien um Textdateien handelt, kannst du die entsprechende Datei auch einfach in einem Texteditor öffnen und von Hand bearbeiten.
 
Öffne die Datei in einem Texteditor deiner Wahl (zum Beispiel {{Notepad++|link}}). Alle Konflikte in der Datei sind mit speziellen Markierungen versehen:


<pre>
<pre>
Zeile 60: Zeile 70:
</pre>
</pre>


Die Zeile <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD</code> markiert den Beginn eines Konfliktes. Dahinter steht der Inhalt, der aktuell im Repository gespeichert ist. Dahinter folgt, durch <code>=======</code> getrennt der neue Inhalt, den du gerade commiten möchtest und der den Konflikt verursacht. <code>&gt;&gt;&gt;&gt;&gt;&gt;&gt; main</code> kennzeichnet das Ende des Konfliktes. (Statt <code>main</code> kann hier auch etwas anderes stehen.)
Die Zeile <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD</code> markiert den Beginn eines Konfliktes. Dahinter steht der Inhalt, der aktuell im Repository gespeichert ist. Dahinter folgt, durch <code>=======</code> getrennt der neue Inhalt, den du gerade ''commiten'' möchtest und der den Konflikt verursacht. <code>&gt;&gt;&gt;&gt;&gt;&gt;&gt; main</code> kennzeichnet das Ende des Konfliktes. (Statt <code>main</code> kann hier auch etwas anderes stehen.)


Um den Konflikt aufzuheben ersetzte du den gesamten markierten Textteil durch den Inhalt, der am Ende in der Datei stehen soll. Dazu musst du beide Versionen vergleichen und gegebenenfalls zusammenfügen. Manchmal ist es aber genug, einfach den unteren Inhalt zu übernehmen.
Um den Konflikt aufzuheben, ersetzte du den gesamten markierten Textteil durch den Inhalt, der am Ende in der Datei stehen soll. Dazu musst du beide Versionen vergleichen und gegebenenfalls zusammenfügen. Manchmal ist es aber genug, einfach den unteren Inhalt zu übernehmen.


==== Spezielle Tools zum Dateivergleich ====
=== Spezielle Tools zum Dateivergleich ===


Es gibt auch spezielle Tools, die extra für das Auflösen von Konflikten erstellt wurden. Diese Dateien zeigen beide Dateiversionen nebeneinander an und erlauben es dir mit einem Klick die passenden Textteile zu übernehmen. Beispiele für solche Tools sind [https://www.sourcegear.com/diffmerge/ DiffMerge], [https://www.fosshub.com/KDiff3.html KDiff3] oder [http://meldmerge.org Meld].
Es gibt auch spezielle Tools, die extra für das Auflösen von Konflikten erstellt wurden. Diese Dateien zeigen beide Dateiversionen nebeneinander an und erlauben es dir, mit einem Klick die passenden Textteile zu übernehmen. Beispiele für solche Tools sind {{DiffMerge|link}}, [https://www.fosshub.com/KDiff3.html KDiff3] oder [http://meldmerge.org Meld].


Es wird ein zweigeteiltes Fenster angezeigt, in dem die beiden in Konflikt stehenden Versionen der Dateien nebeneinander angezeigt werden. Du kannst jetzt für jede Zeile entscheiden, welche Version in der Datei behalten werden soll. Du kannst auch beide Versionen nacheinander einfügen oder das Resultat von Hand bearbeiten.
Es wird ein zweigeteiltes Fenster angezeigt, in dem die beiden in Konflikt stehenden Versionen der Dateien nebeneinander angezeigt werden. Du kannst jetzt für jede Zeile entscheiden, welche Version in der Datei behalten werden soll. Du kannst auch beide Versionen nacheinander einfügen oder das Resultat von Hand bearbeiten.
Zeile 72: Zeile 82:
[[Datei:DiffMerge MergeConflict.png|center]]
[[Datei:DiffMerge MergeConflict.png|center]]


Hast du schließlich alle Konflikte gelöst, erkennt {{GitHub Desktop}} dies.
Hast du schließlich alle Konflikte gelöst, erkennt {{Fork}} dies und du kannst die zusammengeführte Datei ''commiten''.
 
[[Datei:GitHub Desktop ResolvedMsg.png|center|frame]]
 
Klicke schließlich auf "Continue Merge". Der Konflikt wurde aufgelöst und die zusammengefügte Datei direkt committed.  


Hast du so alle Konflikte aufgehoben kannst du erneut versuchen deine Änderungen zu "pushen".
{{Erfolg|Hast du alle Konflikte aufgehoben, kannst du erneut versuchen deine Änderungen zu "pushen".}}

Version vom 12. Februar 2022, 18:34 Uhr

In dem Projekt liegt eine Datei team.txt. Öffne diese in einem Texteditor und trage dich mit deinem Gitea Nutzernamen, vollen Namen und deiner E-Mail-Adresse in diese Datei ein. Speichere die Datei dann ab und schließe sie.

Ngb,J. Neugebauer,ngb@helmholtz-bi.de

Die Änderung auf dem Server speichern

In Fork wird dir nun angezeigt, dass es Änderungen in deinem Projekt gibt (links in der Seitenleiste steht "Local Changes (1)"). Klickst du dort, werden dir alle Dateien angezeigt, in denen Fork Änderungen festgestellt hat.

Fork stageing.jpg

Du befindest dich in der "Stageing Area". Hier markierst du Dateien für einen "Commit" (ein Commit kann mehrere Dateien (oder Teile von Dateien) enthalten, die gemeinsam eine funktionale Änderung am Programm darstellen). Wähle hier die Datei team.txt aus und klicke oben auf "Stage". Die Datei wird jetzt ein Fenster nach unten zu "Staged Changes" geschoben. Rechts kannst du jetzt ein "Commit subject" und eine "Description" für die Änderungen in diesem Commit eingeben. Gib hier ein passendes Subject ein, das deine Änderungen beschreibt. (Bei kleinen Änderungen reicht ein einzeiliges Subject. Größere Änderungen sollten in der Description genauer beschrieben werden.)

Fork commitmessage.jpg

Nun kannst du deine erste Änderung committen. Fork zeigt dir dann an, dass dein lokales Repository zwar keine lokalen Änderungen mehr enthält, aber es neue Änderungen gibt, die bisher nicht auf den zentralen Server ("origin") überspielt wurden.

Fork dirty.jpg

Führe einen "push" aus, indem du oben bei den drei Pfeilen auf den schwarzen nach oben klickst. Es wird ein Dialog angezeigt, den du einfach bestätigen kannst.

Fork pushing.jpg

Nach einem Klick auf "Push" werden deine Änderungen auf den Server übertragen.

Icon Info.png

Wenn du keine Fehlermeldung bekommst, dann kannst du mit dem nächsten Schritt weiter machen. Ansonsten besteht ein Konflikt, weil schon jemand anderes Änderungen an derselben Datei gepushed hat. Wie du damit umgehst, erfährst du unten.


Konflikte beheben

Wenn eine Datei gleichzeitig von mehreren Entwicklern bearbeitet wurde, dann kann es zu einem Konflikt kommen. Normalerweise würden die Änderungen des einen Entwicklers die des anderen überspeichern. Git erkennt diesen Konflikt aber und erlaubt es dem zweiten Programmierer, das Problem zu beheben.

Konflikte in Fork auflösen

Wenn ein Konflikt in einer Datei aufgetreten ist, wird in Fork ein Hinweis angezeigt.

Fork conflict 1.jpg

Links wird angezeigt, dass es sowohl Änderungen auf dem zentralen Server gibt, als auch in der lokalen Kopie. Um das Problem zu beheben, klicke oben auf "Resolve".

Wähle eine Datei mit einem Konflikt und dann "Merge in Fork".

Fork merge 1.jpg

Es wird nun ein zwei geteiltes Fenster angezeigt, in dem die beiden in Konflikt stehenden Versionen der Dateien nebeneinander angezeigt werden. Du kannst für jede Zeile entscheiden, welche Version in der Datei behalten werden soll. Du kannst auch beide Versionen einfügen oder im unteren Teil des Fensters das Resultat von Hand bearbeiten.

Fork merge 2.jpg

Klicke schließlich auf "Resolve" und dann "Commit". Der Konflikt wurde aufgelöst und die zusammengefügte Datei direkt committed.

Icon Accept.png
Hast du alle Konflikte aufgehoben, kannst du erneut versuchen deine Änderungen zu "pushen".

Konflikte mit dem Texteditor lösen

Da es sich bei allen Dateien um Textdateien handelt, kannst du die entsprechende Datei auch einfach in einem Texteditor öffnen und von Hand bearbeiten.

Öffne die Datei in einem Texteditor deiner Wahl (zum Beispiel Notepad++). Alle Konflikte in der Datei sind mit speziellen Markierungen versehen:

<<<<<<< HEAD
0.  Ngb,J. Neugebauer,ngb@helmholtz-bi.de
=======
0.  Ngb,J. Neugebauer,ngb@helmholtz-bi.de
1.  Fred,Fred Mustermann,fred.mustermann@gmx.de
>>>>>>> main

Die Zeile <<<<<<< HEAD markiert den Beginn eines Konfliktes. Dahinter steht der Inhalt, der aktuell im Repository gespeichert ist. Dahinter folgt, durch ======= getrennt der neue Inhalt, den du gerade commiten möchtest und der den Konflikt verursacht. >>>>>>> main kennzeichnet das Ende des Konfliktes. (Statt main kann hier auch etwas anderes stehen.)

Um den Konflikt aufzuheben, ersetzte du den gesamten markierten Textteil durch den Inhalt, der am Ende in der Datei stehen soll. Dazu musst du beide Versionen vergleichen und gegebenenfalls zusammenfügen. Manchmal ist es aber genug, einfach den unteren Inhalt zu übernehmen.

Spezielle Tools zum Dateivergleich

Es gibt auch spezielle Tools, die extra für das Auflösen von Konflikten erstellt wurden. Diese Dateien zeigen beide Dateiversionen nebeneinander an und erlauben es dir, mit einem Klick die passenden Textteile zu übernehmen. Beispiele für solche Tools sind DiffMerge, KDiff3 oder Meld.

Es wird ein zweigeteiltes Fenster angezeigt, in dem die beiden in Konflikt stehenden Versionen der Dateien nebeneinander angezeigt werden. Du kannst jetzt für jede Zeile entscheiden, welche Version in der Datei behalten werden soll. Du kannst auch beide Versionen nacheinander einfügen oder das Resultat von Hand bearbeiten.

DiffMerge MergeConflict.png

Hast du schließlich alle Konflikte gelöst, erkennt Fork dies und du kannst die zusammengeführte Datei commiten.

Icon Accept.png
Hast du alle Konflikte aufgehoben, kannst du erneut versuchen deine Änderungen zu "pushen".