2012-01-27 19 views
7

Quando si esegue un svn up che incontro regolarmente questo prompt:Come posso ottenere che SVN esegua una risoluzione specifica per tutti i conflitti binari senza che venga richiesto per ognuno di essi?

Conflict discovered in 'lib/somelibrary.so'. 
Select: (p) postpone, 
     (mf) mine-full, (tf) theirs-full, 
     (s) show all options: 

Colpire s rivela le opzioni mc e tc, mine dei conflitti e il loro conflitto, che presumibilmente mi permetta di prendere o la mia versione o la loro versione per tutti conflitti e non solo somelibrary.so.

Tuttavia, queste opzioni non funzionano. Ottengo questo messaggio:

Invalid option; cannot choose based on conflicts in a binary file. 

risposta di Edwin rende chiaro che ho frainteso come mc e tc lavoro, ma ho ancora voglia di essere in grado di prendere la stessa risoluzione per ogni file che i conflitti. C'è un modo per rendere lo svn usare mf o tf per ogni conflitto senza ricominciare da capo dopo la prima volta?

risposta

10

Per risolvere automaticamente i conflitti su svn update, svn switch, svn merge, utilizzare il flag --accept.

Dal SVN Book - svn options:

--accept AZIONE
specifica un'azione per la risoluzione automatica dei conflitti. Le azioni possibili sono posticipare, base, miniere complete, complete, modificare e avviare.

Significato di ciascuna azione può essere visto nel svn resolvespecification:

È possibile passare i seguenti argomenti al comando --accept seconda sulla risoluzione desiderata:

di base Scegli il file che era la revisione BASE prima di aggiornare la tua copia di lavoro .Cioè, il file che hai estratto prima di ha apportato le tue ultime modifiche.

lavoro Supponendo che hai gestito manualmente la risoluzione dei conflitti, scegliere la versione del file nella sua forma attuale nel vostro lavoro copia.

mine piena Resolve tutti i file in conflitto con le copie dei file come si trovavano immediatamente prima di eseguire svn update.

loro pieno Resolve tutti i file in conflitto con le copie dei file che erano prelevati dal server quando è stato eseguito svn update.

miniera-conflitto Resolve tutti i file in conflitto da parte preferendo locali modifiche oltre i cambiamenti recuperati dal server in contrastanti regioni del contenuto di ogni file.

loro conflitto Resolve tutti i file in conflitto da parte preferendo i cambiamenti recuperati dal server tramite modifiche locali in conflitto regioni del contenuto di ogni file.

Controllare anche la sezione Resolve Any Conflict.

Infine, un esempio. Per risolvere automaticamente tutti i conflitti come mine-full aggiornata, eseguire:

$ svn up --resolve mine-full 
1

mc e tc sono opzioni di unione, in cui si considerano solo le linee in conflitto, quindi una fusione di tali righe dalle origini (mc) o dalle origini "altro" (tc).

file binari non sono generalmente strutturati in modo tale che essi contengono le linee, come in quanto tale, gli algoritmi di risoluzione dei conflitti che si basano sulla sostituzione propria linea di testo con un altro riga di testo non funzionerà correttamente per un file binario. Gli sviluppatori che hanno scritto SVN lo sanno, e quindi quando si ha a che fare con un file binario, le opzioni che hanno senso solo con i file di testo non saranno accettate.

È possibile utilizzare mf e TF, che sono leggermente differenti. Invece di sostituire solo le aree in conflitto di un file, sostituiscono l'intero file con (mf) la "mia" copia del file completo, o (tf) la "loro" copia del file completo).

Se si vuole SVN a "shutup e accettare le opzioni del file di mc/TC", svn modificare il mime-type e impostare in testo. Buona fortuna se questo non è un file di testo, è probabile che otterrai un file che non rientra nelle specifiche del file binario di partenza (l'unione di sezioni continue di due file jpeg, ad esempio, non produrrà un file jpeg valido).

+0

senso, grazie. Con quella conoscenza, quindi, c'è un modo in cui posso ottenere svn per fare 'mf' o' tf' per tutti i file, invece di richiedere me per ognuno? –

+0

Ogni file in conflitto potrebbe richiedere una risoluzione in un modo diverso. Non sono così sicuro che sia saggio decidere in massa un tipo di risoluzione prima ancora di sapere quali file sono in conflitto (o perché). –

+0

La domanda è se sia possibile, non se io debba sempre. So quando ha senso farlo e quando no. –