Frage

CVS und Subversion beide haben eine praktische Druckfunktion, so dass, wenn Sie eine Quelldatei aktualisieren, die Sie geändert haben, verschmilzt sie in Veränderungen, die andere auf der gleichen Datei gemacht haben.

Allerdings, wenn Sie Ihre Änderungen und die anderen nicht kompatibel sind - in der Regel, wenn Sie haben beide die gleichen Teile des Codes geändert - es wird einen Konflikt schaffen. Beide Strecken der Quellcode wird in die zusammengefügte Datei aufgenommen werden und Sie müssen manuell aussortieren, was zu halten ändert. Alles in Ordnung so weit.

Mein Problem ist, dass einige von uns verschiedene Entwicklungsumgebungen verwenden (Netbeans gegen vi, wenn Sie wissen müssen) und Netbeans verfügt über eine automatische Einrücken Funktion, die den Code wieder einrückt. Deshalb, wenn wir Änderungen zusammenführen, manchmal wir große Konflikte bekommen, die durch einfache Änderungen in Vertiefung meist verursacht werden und sind keine echten Änderungen am Code. Oft schaffen diese Hunderte von Zeilen der scheinbaren Konflikte, die manuell aufgelöst werden müssen, aber in der Regel kommen sie nur ein paar Zeilen realen Veränderungen nach unten. Eine ähnliche Situation tritt auf, wenn jemand Editor Unix auf Windows Zeilenumbrüche oder umgekehrt ändert.

So - kann ich fusionieren diese „Konflikte“ zu ignorieren, wenn die beiden Versionen zu vergleichen? Diff hat die --ignore-Raum-Änderung oder -b-Option und ich würde im Wesentlichen die gleiche Funktion in cvs oder SVN haben möge. Wir nutzen jedes Werkzeug an verschiedenen Projekten, so würde ich gerne für einen oder beide die Antwort zu haben.

Zwei abschließende Anmerkungen:

  • eindeutig der Mergeprozesses müßte eine willkürliche Wahl treffen, welche Version des Leerzeichen in der fusionierten Datei zu verwenden. Mir geht es gut mit, dass - wir können es immer umformatieren es später noch einmal
  • .
  • Ich konnte einige dies vermeiden, diszipliniert zu sein und in häufiger Kontrolle - anerkannt und verstanden werden. Aber ich bin nicht perfekt.
War es hilfreich?

Lösung

Für SVN: In Kommandozeilen-Tool, gibt es die Option x , die Sie einstellen können " b " oder " w " zu Raum Änderungen bzw. ignorieren. alle Räume.
Sie können auch ein Drittanbieter-Tool für das Erledigen des Merges liefern. Wenn Sie also eine Fusion haben die Whitespaces ignoriert, können Sie diese benutzen. TortoiseSVN, wie immer, ist ein Frontend für alle Parameter, so wird es für das Ignorieren Whitespaces als auch zu unterstützen.

Die Svn merge Befehl beschrieben hier . Die Option, die Sie brauchen, ist - diff3-cmd

Andere Tipps

Für Windows-Benutzer, können Sie TortoiseSVN (eine Shell-Windows Explorer-Erweiterung für Subversion), die mit kommt fusionieren Funktionen dieser Unterstützung, was Sie beschreiben:

  

Ignorieren Zeilenende schließen Änderungen   die sich allein auf Differenz aufgrund in   Line-End-Stil.

     

Vergleiche Leerzeichen enthält alle   Änderungen in Vertiefung und Inline   Leerzeichen als hinzugefügt / entfernt Linien.

     

Ignoriere Änderungen in Leerzeichen schließt   Änderungen, die sich ausschließlich auf eine fällig   Änderung in der Menge oder die Art der   Leerzeichen, zB. wechseln   Einbuchtung oder Ändern Tabs   Räume. Hinzufügen von Leerzeichen, wo es   keine vorher war, oder ein Entfernen   Leerzeichen vollständig ist noch gezeigt   als eine Änderung.

     

Ignoriere alle Leerzeichen alle ausschließt   die nur aus Leerzeichen Änderungen.

TortoiseMerge hat keinen CLA (Befehlszeilenargumente), um die Leerzeichen zu ignorieren und den Fall zu ignorieren. Nach viel suchen scheint es, dass es immer noch Werte von zwicken die Registry erreicht werden kann.

/* DisableWhitespaceDifferences and DisableCaseDifferences. 
* The settings for TortoiseMerge is stored in Registry in CurrentUser\Software\TortoiseMerge\
* DWORDS stored the property values.
* 
* IgnoreWS         :   Set to 1 to ignore the whitespace differences. 
*                      Set to 0 to allow the whitespace differences.             
* IgnoreEOL        :   Set to 1 to ignore the End of Line differences. 
*                      Set to 0 to allow the End of Line differences.             
* CaseInsensitive  :   Set to 1 to ignore the Case differences. 
*                      Set to 0 to allow the Case differences.             
*/

// Get the key from the registry
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\TortoiseMerge", true))
{
   if (key != null)
   {
        // Set the IgnoreWS and IgnoreEOL DWORDs based on DisableWhitespaceDifferences is set or not
        key.SetValue("IgnoreWS", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord);
        key.SetValue("IgnoreEOL", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord);

        // Set the CaseInsensitive DWORD based on DisableCaseDifferences is set or not
        key.SetValue("CaseInsensitive", DisableCaseDifferences ? 1 : 0, RegistryValueKind.DWord);

        // close key
        key.Close();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top