Domanda

CVS e Subversion hanno entrambi una comoda funzione di unione in modo che quando aggiorni un file sorgente che hai modificato, si fonde con le modifiche che altri hanno apportato sullo stesso file.

Tuttavia, se le tue modifiche e le altre sono incompatibili, generalmente se hai modificato entrambe le stesse parti del codice, creerà un conflitto. Entrambi i tratti di codice sorgente verranno inclusi nel file unito ed è necessario ordinare manualmente quali modifiche conservare. Tutto bene finora.

Il mio problema è che alcuni di noi usano ambienti di sviluppo diversi (Netbeans contro vi se è necessario saperlo) e Netbeans ha una funzione di rientro automatico che rientra nel rientro del codice. Pertanto, quando uniamo le modifiche, a volte si verificano enormi conflitti che sono principalmente causati da semplici modifiche al rientro e non sono autentiche modifiche al codice. Spesso questi creano centinaia di linee di conflitti apparenti che devono essere risolti manualmente, ma di solito si riducono a poche linee di cambiamenti reali. Una situazione simile si verifica quando l'editor di qualcuno modifica unix in newline di Windows o viceversa.

Quindi - posso impostare unisci per ignorare questi "conflitti" quando si confrontano le due versioni? Diff ha l'opzione --ignore-space-change o -b e vorrei avere essenzialmente la stessa funzione disponibile in cvs o svn. Usiamo ogni strumento su progetti diversi, quindi sarei felice di avere la risposta per uno o entrambi.

Due note finali:

  • chiaramente il processo di unione dovrebbe fare una scelta arbitraria su quale versione dello spazio bianco usare nel file unito. Sto bene, possiamo sempre riformattarlo di nuovo in seguito.
  • Potrei evitare un po 'di tutto questo essendo più disciplinato e controllando più spesso - riconosciuto e compreso. Ma non sono perfetto.
È stato utile?

Soluzione

Per SVN: nello strumento da riga di comando, c'è l'opzione -x che puoi impostare su " b " o " w " ignorare i cambiamenti di spazio resp. tutti gli spazi.
Puoi anche fornire uno strumento di terze parti per eseguire le fusioni. Quindi, se hai una fusione che ignora gli spazi bianchi, puoi usare questa. TortoiseSVN, come sempre, è un frontend per tutti i parametri, quindi supporterà anche l'ignoranza degli spazi bianchi.

Il comando svn merge è descritto qui . L'opzione che ti serve è --diff3-cmd

Altri suggerimenti

Per gli utenti di Windows, puoi utilizzare TortoiseSVN (un'estensione della shell di Windows Explorer per Subversion) che viene fornita con unisci funzionalità che supportano ciò che stanno descrivendo:

  

Ignora le terminazioni di riga esclude le modifiche   che sono dovuti esclusivamente alla differenza   stile di fine linea.

     

Confronta gli spazi bianchi include tutto   cambiamenti nel rientro e in linea   spazi bianchi come linee aggiunte / rimosse.

     

Escludi le modifiche agli spazi bianchi esclude   cambiamenti dovuti esclusivamente a   modificare la quantità o il tipo di   spazi bianchi, ad es. cambiando il   rientro o modifica delle schede in   spazi. Aggiunta di spazi bianchi lì   era nessuno prima o rimuovere un   lo spazio bianco è ancora mostrato   come cambiamento.

     

Ignora tutti gli spazi bianchi esclude tutto   modifiche solo per gli spazi bianchi.

TortoiseMerge non ha alcun CLA (Command Line Arguments) per ignorare lo spazio bianco e il caso. Dopo aver cercato molto, sembra che sia possibile ottenerlo modificando i valori del registro.

/* 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();
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top