Mit der Zeit bin ich bereit , zu verschmelzen in meinen Zweig zurück zu entwickeln (Hervorhebung von mir)
Der Umgang mit Konflikten in git merge
ist oft einfacher als in git rebase
. In Git Merge können Sie die gesamte Liste der Dateien sehen, die auf einmal geändert wurden. Unabhängig davon, wie viele Commits von anderen Mitarbeitern durchgeführt wurden, müssen Sie diese einmal zusammenführen . Bei einem Rebase-Workflow kann es vorkommen, dass Sie immer wieder dieselben Konflikte haben und diese manuell überprüfen müssen. Sie können am Ende das 13. Commit reparieren und das Gefühl haben , kein Licht aus dem Tunnel zu sehen .
Nach meiner Erfahrung habe ich, als ich versuchte, wiederholte Rebase-Konflikte naiv zu lösen, die Änderungen von jemandem oder eine Anwendung verloren, die nicht einmal kompiliert wurde. Oft haben ich und meine Kollegen viel Arbeit geleistet, wurden jedoch von der Komplexität der wiederholten Konflikte so überwältigt, dass wir unsere vorherige Arbeit abbrechen und verlieren mussten, nachdem eine Handvoll Rebase-Commits ausgeführt worden waren.
Ich werde Ihnen ein paar Techniken vorschlagen, die jedoch nur dazu beitragen können, dass das Zusammenführen einfacher wird als das Automatisieren der Aufgabe.
- Ressourcen- / Sprachdateien . Wenn Sie additive Änderungen an einer Ressource - Datei, stellen Sie sicher , dass Sie immer sie bis zum Ende der Datei bewegen , so dass Sie leicht erinnern können Ihre Änderungen gegen andere "Änderungen. Möglicherweise können Sie Ihre Änderungen kopieren und unten einfügen oder einfach die Konfliktmarkierungen entfernen
- Machen. Nicht. ABSOLUT. Erneut formatieren . Weder Sie noch Ihre Mitentwickler dürfen während der täglichen Arbeit eine "massive Code-Neuformatierung" durchführen. Die Code-Neuformatierung fügt eine übermäßige Anzahl von Fehlalarmen beim Konfliktmanagement hinzu. Eine Code-Neuformatierung kann durchgeführt werden
- Inkrementell, z. B. von jedem Entwickler bei jedem Commit, sobald er ein automatisiertes Tool verwendet (z. B. hat Eclipse die Option, beim Speichern neu zu formatieren, Vanilla Visual Studio hat keine). Absolut jeder Entwickler muss dieselben Code-Formatierungsstandards verwenden, die in einer Formatdatei codiert sind, die von Ihrer IDE verwendet wird. Um Ihnen eine Idee zu geben: Wenn es 4 Leerzeichen oder 2 Tabulatoren sind, spielt es keine Rolle, aber es ist wirklich wichtig, wenn alle dasselbe verwenden.
- Kurz vor der Entlassung durch einen Teamleiter. Wenn eine "Code-Neuformatierung" festgeschrieben wird, wenn Benutzer nicht an Zweigen arbeiten, d. H. Bevor sie verzweigen, wird dies einfacher
- Überprüfen Sie die Arbeitsteilung zwischen Mitarbeitern. Dies ist der Teil, an dem die meisten Ingenieure beteiligt sind. Wie andere Antworten zeigen, ist es Design-Geruch, wenn mehrere Entwickler, die unterschiedliche Aufgaben ausführen, dieselben Ressourcen berühren müssen. Möglicherweise müssen Sie mit Ihrem Teamleiter besprechen, welcher Teil von jedem gleichzeitigen Entwickler geändert werden soll.
Ich habe auch einige schlechte Gewohnheiten in Git-Workflows in meinen Teams gesehen. Oft überbeanspruchen Menschen ihre Filialen. Ich habe persönlich gesehen, wie ein Entwickler 10 bis 20 Commits mit der Bezeichnung "fix" hinzufügte, von denen jedes eine oder zwei Zeilen festlegte. Unsere Politik ist, dass Commits mit JIRA-Tickets gekennzeichnet sind, um Ihnen eine Idee zu geben.
@JacobRobbins schlägt vor, git rebase
eine tägliche Aufgabe zu erledigen. Ich möchte seine Annäherung vorantreiben.
Verwenden Sie zunächst einmal rebase, um die Anzahl der Commits auf eine Handvoll zu reduzieren. Und stützen Sie sich nur auf den ursprünglichen Entwicklungszweig, von dem aus Sie verzweigt sind. Wenn ich Handvoll sage, könnte ich 3 oder 4 bedeuten (z. B. alle Frontends, alle Backends, alle Datenbank-Patches) oder jede vom Menschen vernünftige Zahl. Nachdem Sie sie konsolidiert haben, verwenden fetch
und bearbeiten Sie Ihre Rebase über den Upstream-Zweig. Dies wird Sie nicht vor Konflikten bewahren, es sei denn, Ihr Team überprüft seinen eigenen Ansatz, aber Ihr Leben wird weniger schmerzhaft.
Wenn Sie weitere Fragen zu bestimmten Aufgaben haben, können Sie nach Stackoverflow suchen und diese stellen.
[Bearbeiten] über die No-Reformat- und Pfadfinder-Regel. Ich habe das RE-Format leicht umformuliert , um hervorzuheben, dass es meine Aufgabe ist, die gesamte Quelldatei von Grund auf neu zu formatieren, einschließlich des Codes, den Sie nicht berührt haben. Im Gegensatz dazu, dass Sie immer Ihren eigenen Code formatieren, der perfekt für Jungen geeignet ist, wird die gesamte Datei von einer Reihe von Entwicklern, einschließlich mir, mithilfe der IDE-Funktionen neu formatiert. Wenn die Datei von anderen berührt wird, wird sie von Git als Konflikt angesehen, auch wenn der Inhalt und die Semantik der betroffenen Zeilen nicht geändert werden. Nur ein sehr leistungsfähiger, sprachbewusster Editor kann vermuten, dass der Konflikt nur mit der Formatierung zusammenhängt, und führt das am besten formatierte Fragment automatisch zusammen. Aber ich habe keine Beweise für ein solches Werkzeug.
Schließlich verpflichtet Sie die Pfadfinder-Regel nicht, das Chaos anderer Leute zu beseitigen. Nur deins.