Erstellen Sie Git-Patches für zwei Dateien über mehrere Umbenennungen

8

Ich möchte zwei Dateien von einem Repository in ein anderes verschieben. Die Dateien wurden ursprünglich hinzugefügt als:

  1. /src/init/Price.cs
  2. /tests/init/PriceTests.cs

Die beiden Dateien wurden später umbenannt in:

  1. /src/init/PriceValue.cs
  2. /tests/init/PriceValueTests.cs

Und dann bewegt nach:

  1. /src/moved/PriceValue.cs
  2. /tests/moved/PriceValueTests.cs

Ich habe versucht, nach Diese Beschreibung , um eine Reihe von Patches für diese Dateien zu erstellen, aber ich bin mir nicht sicher, wie ich die sechs verschiedenen Pfade weitergeben kann, auf denen die Dateien existieren.

Ich habe alle Commit-IDs gefunden, die PriceValue.cs betreffen (bei Umbenennungen und Umzügen), aber die Übergabe dieser IDs an Git schlägt mit der folgenden Fehlermeldung fehl:

%Vor%

Also, wie erstelle ich eine Reihe von Patches für diese, die nur die Änderungen an den erwähnten Dateien enthält, aber enthält es über eine Umbenennung und eine Verschiebung jeder Datei?

    
Asbjørn Ulsberg 27.04.2017, 11:25
quelle

3 Antworten

6

Sie können die Patches einiger spezifischer Dateien erhalten, aber nicht früher als commit sha1 mit

%Vor%

Jede der Dateien kann eine alte Datei (vor einer Umbenennung) oder eine vorhandene Datei sein.

Wenn Sie alle commits bis commit sha1 möchten, können Sie

verwenden %Vor%

Also in Ihrem Fall, alle Commits bis jetzt ( HEAD ) Ihrer sechs Dateien:

%Vor%     
Nils Werner 03.05.2017 05:28
quelle
1
___ antwort43965330 ___

Um das Ziel von der Frage über eine Zusammenführung zu erreichen (statt einzelner Patch-Bewegung über format-patch als die gestellte Frage) kann man alle anderen Dateien in einem neuen Commit entfernen und diesen Commit dann über Repositories hinweg in das Ziel-Repository zusammenführen ( angepasst von Ссылка ):

%Vor%

Das hat den Vorteil, dass der ganze Verlauf da ist, die Commit-IDs gleich bleiben und es nicht nötig ist, einzelne Commits zu jonglieren oder sie zu finden. Dies kann den Nachteil haben, dass eine linearisierte Ansicht (wie %code% ) im Gegensatz zur Diagrammansicht (wie %code% ) wahrscheinlich verwirrender wird, wenn die Anzahl der nicht verwandten Commits größer wird.

Man könnte zusätzlich das Repository %code% vor der Zusammenführung filtern, um damit zusammenhängende Dateien oder Commits zu verbergen. Die Nachteile davon sind jedoch: Wenn Sie dies über eine Repository-Zusammenführung mehr als einmal tun, möglicherweise auch in die andere Richtung, wird die Historie weniger sauber, da der gemeinsame Verlauf nur mehrfach auftritt (einmal für jede Zusammenführung). Dies würde diese Lösung auch schwieriger machen als Ihre anfänglich versuchte Lösung. Dies hätte auch den Nachteil, dass die Commit-IDs nicht gleich bleiben und es daher nicht so einfach wäre, dieselben Commits über Repositories zu finden.

    
___ answer43751727 ___

Sie können die Patches einiger spezifischer Dateien erhalten, aber nicht früher als commit %code% mit

%Vor%

Jede der Dateien kann eine alte Datei (vor einer Umbenennung) oder eine vorhandene Datei sein.

Wenn Sie alle commits bis commit %code% möchten, können Sie

verwenden %Vor%

Also in Ihrem Fall, alle Commits bis jetzt ( %code% ) Ihrer sechs Dateien:

%Vor%     
___ antwort43745084 ___

Hmm ..... Angenommen, ich möchte die Patch-Dateien so behalten, wie sie sind, würde ich die Patch-Datei auf einem Zweig anwenden, damit ich sie dann im rechten Zweig auswählen kann / p>

Nehmen wir an, ich habe in meinem Master-Zweig eine Datei namens /tests/moved/PriceValueTests.cs, und ich möchte stattdessen einen Patch mit dem Namen /tests/init/PriceTests.cs anwenden. Angenommen, ich möchte die Patch-Datei nicht hacken, was ich tun würde:

  • Erstelle einen temporären Zweig von meinem Master
  • Checkout-Zweig
  • benenne die Datei in denselben Pfad um wie die Patch-Datei (und natürlich commit)
  • Patch-Datei auf temporären Zweig anwenden (sollte jetzt funktionieren, dass der Dateipfad eine passende Datei hat)
  • commit auf temporärem Zweig
  • Kasse Master
  • cherry-pick letzte Überarbeitung von temporären Zweigstelle

Damit kann git die Namensänderung verfolgen und erfolgreich anwenden. Ich habe es schon einige Male gemacht und Git's Umbenennungsalgorithmus tendiert dazu, es richtig zu machen.

    
___ qstntxt ___

Ich möchte zwei Dateien von einem Repository in ein anderes verschieben. Die Dateien wurden ursprünglich hinzugefügt als:

  1. %code%
  2. %code%

Die beiden Dateien wurden später umbenannt in:

  1. %code%
  2. %code%

Und dann bewegt nach:

  1. %code%
  2. %code%

Ich habe versucht, nach Diese Beschreibung , um eine Reihe von Patches für diese Dateien zu erstellen, aber ich bin mir nicht sicher, wie ich die sechs verschiedenen Pfade weitergeben kann, auf denen die Dateien existieren.

Ich habe alle Commit-IDs gefunden, die %code% betreffen (bei Umbenennungen und Umzügen), aber die Übergabe dieser IDs an Git schlägt mit der folgenden Fehlermeldung fehl:

%Vor%

Also, wie erstelle ich eine Reihe von Patches für diese, die nur die Änderungen an den erwähnten Dateien enthält, aber enthält es über eine Umbenennung und eine Verschiebung jeder Datei?

    
___ qstnhdr ___ Erstellen Sie Git-Patches für zwei Dateien über mehrere Umbenennungen ___ tag123patch ___ Ein Patch ist eine Software, die entwickelt wurde, um Probleme mit einem Computerprogramm oder seinen unterstützenden Daten zu beheben oder diese zu aktualisieren. Dies beinhaltet die Behebung von Sicherheitslücken und anderen Fehlern sowie die Verbesserung der Benutzerfreundlichkeit oder Leistung. ___ tag123git ___ Git ist ein Open-Source-Versionskontrollsystem (DVCS). Verwenden Sie dieses Tag für Fragen zur Verwendung von Git und Workflows. Verwenden Sie dieses Tag nicht für allgemeine Programmierfragen, die ein Git-Repository betreffen. ___ tag123gitpatch ___ hilf uns dieses Wiki zu bearbeiten ___ tag123filename ___ rename-file bedeutet, den Namen einer Datei zu ändern ___ tag123filemove ___ Verschieben von Dateien in einem Dateisystem. ___
eftshift0 02.05.2017 18:45
quelle
1
___ antwort43965330 ___

Um das Ziel von der Frage über eine Zusammenführung zu erreichen (statt einzelner Patch-Bewegung über format-patch als die gestellte Frage) kann man alle anderen Dateien in einem neuen Commit entfernen und diesen Commit dann über Repositories hinweg in das Ziel-Repository zusammenführen ( angepasst von Ссылка ):

%Vor%

Das hat den Vorteil, dass der ganze Verlauf da ist, die Commit-IDs gleich bleiben und es nicht nötig ist, einzelne Commits zu jonglieren oder sie zu finden. Dies kann den Nachteil haben, dass eine linearisierte Ansicht (wie git log ) im Gegensatz zur Diagrammansicht (wie gitk ) wahrscheinlich verwirrender wird, wenn die Anzahl der nicht verwandten Commits größer wird.

Man könnte zusätzlich das Repository project-a vor der Zusammenführung filtern, um damit zusammenhängende Dateien oder Commits zu verbergen. Die Nachteile davon sind jedoch: Wenn Sie dies über eine Repository-Zusammenführung mehr als einmal tun, möglicherweise auch in die andere Richtung, wird die Historie weniger sauber, da der gemeinsame Verlauf nur mehrfach auftritt (einmal für jede Zusammenführung). Dies würde diese Lösung auch schwieriger machen als Ihre anfänglich versuchte Lösung. Dies hätte auch den Nachteil, dass die Commit-IDs nicht gleich bleiben und es daher nicht so einfach wäre, dieselben Commits über Repositories zu finden.

    
___ answer43751727 ___

Sie können die Patches einiger spezifischer Dateien erhalten, aber nicht früher als commit %code% mit

%Vor%

Jede der Dateien kann eine alte Datei (vor einer Umbenennung) oder eine vorhandene Datei sein.

Wenn Sie alle commits bis commit %code% möchten, können Sie

verwenden %Vor%

Also in Ihrem Fall, alle Commits bis jetzt ( %code% ) Ihrer sechs Dateien:

%Vor%     
___ antwort43745084 ___

Hmm ..... Angenommen, ich möchte die Patch-Dateien so behalten, wie sie sind, würde ich die Patch-Datei auf einem Zweig anwenden, damit ich sie dann im rechten Zweig auswählen kann / p>

Nehmen wir an, ich habe in meinem Master-Zweig eine Datei namens /tests/moved/PriceValueTests.cs, und ich möchte stattdessen einen Patch mit dem Namen /tests/init/PriceTests.cs anwenden. Angenommen, ich möchte die Patch-Datei nicht hacken, was ich tun würde:

  • Erstelle einen temporären Zweig von meinem Master
  • Checkout-Zweig
  • benenne die Datei in denselben Pfad um wie die Patch-Datei (und natürlich commit)
  • Patch-Datei auf temporären Zweig anwenden (sollte jetzt funktionieren, dass der Dateipfad eine passende Datei hat)
  • commit auf temporärem Zweig
  • Kasse Master
  • cherry-pick letzte Überarbeitung von temporären Zweigstelle

Damit kann git die Namensänderung verfolgen und erfolgreich anwenden. Ich habe es schon einige Male gemacht und Git's Umbenennungsalgorithmus tendiert dazu, es richtig zu machen.

    
___ qstntxt ___

Ich möchte zwei Dateien von einem Repository in ein anderes verschieben. Die Dateien wurden ursprünglich hinzugefügt als:

  1. %code%
  2. %code%

Die beiden Dateien wurden später umbenannt in:

  1. %code%
  2. %code%

Und dann bewegt nach:

  1. %code%
  2. %code%

Ich habe versucht, nach Diese Beschreibung , um eine Reihe von Patches für diese Dateien zu erstellen, aber ich bin mir nicht sicher, wie ich die sechs verschiedenen Pfade weitergeben kann, auf denen die Dateien existieren.

Ich habe alle Commit-IDs gefunden, die %code% betreffen (bei Umbenennungen und Umzügen), aber die Übergabe dieser IDs an Git schlägt mit der folgenden Fehlermeldung fehl:

%Vor%

Also, wie erstelle ich eine Reihe von Patches für diese, die nur die Änderungen an den erwähnten Dateien enthält, aber enthält es über eine Umbenennung und eine Verschiebung jeder Datei?

    
___ qstnhdr ___ Erstellen Sie Git-Patches für zwei Dateien über mehrere Umbenennungen ___ tag123patch ___ Ein Patch ist eine Software, die entwickelt wurde, um Probleme mit einem Computerprogramm oder seinen unterstützenden Daten zu beheben oder diese zu aktualisieren. Dies beinhaltet die Behebung von Sicherheitslücken und anderen Fehlern sowie die Verbesserung der Benutzerfreundlichkeit oder Leistung. ___ tag123git ___ Git ist ein Open-Source-Versionskontrollsystem (DVCS). Verwenden Sie dieses Tag für Fragen zur Verwendung von Git und Workflows. Verwenden Sie dieses Tag nicht für allgemeine Programmierfragen, die ein Git-Repository betreffen. ___ tag123gitpatch ___ hilf uns dieses Wiki zu bearbeiten ___ tag123filename ___ rename-file bedeutet, den Namen einer Datei zu ändern ___ tag123filemove ___ Verschieben von Dateien in einem Dateisystem. ___
Jan Zerebecki 14.05.2017 14:55
quelle