2012-07-12 16 views
5

Aggiungo alcune modifiche al mio repository locale ed eseguo svn diff, ma l'output diff è vuoto. Ma svn status ha contrassegnato i miei file come modificati. Si tratta di file esterni, come posso usare il comando diff con questo?svn diff non mostra i file esterni modificati

risposta

3

Ecco un preventivo da the manual:

Oltre svn cassa, svn update, svn interruttore e svn export comandi che gestiscono effettivamente l'disgiunto sottodirectory (o scollegato) in cui vengono estratti gli esterni, il comando svn riconosce anche le definizioni esterne. Visualizza un codice di stato di X per le sottodirectory esterne disgiunte e quindi ricorre in quelle sottodirectory per visualizzare lo stato degli elementi esterni stessi. È possibile passare l'opzione --ignore-estero a uno qualsiasi di questi sottocomandi per disabilitare l'elaborazione delle definizioni esterne.

Si può dedurre da quanto sopra che solo i comandi citati supportano gli esterni.

Non so perché sia ​​così, ma la mia impressione è che era relativamente difficile da progettare correttamente e non era in cima alla lista delle caratteristiche.

1

Avrete bisogno di utilizzare un programma esterno per farlo. Ho scritto questo script che sembra fare bene il lavoro.

<?php 
passthru('svn diff'); 
exec('svn propget svn:externals',$externals); 
foreach($externals as $line) { 
    list($local, $path) = explode(' ',$line); 
    passthru('svn diff '.$local); 
} 
?> 
1

Questo è logico perché la ragione è che lo stato svn mostra lo stato rispetto alla ultima revisione del tronco. significa che il tuo locale non è aggiornato all'ultima revisione sul trunk. Prendendo le informazioni svn si vedrebbe che la

Path: /home/.... 
Working Copy Root Path: /home/trunk 
URL: https://svn.***.**/trunk 
Repository Root: https://svn.***.**/ 
Repository UUID: 
Revision: **LAST_UPDATED_REVISION_Nr** 

Tuttavia, il svn diff mostra la differenza tra il vostro file locale e la situazione di file nel LAST_UPDATED_REVISION_Nr. Per vedere la differenza rispetto alla ultima revisione sul tronco:

svn diff -rHEAD address_of_your_file 
1

È possibile utilizzare questo guscio one-liner:

svn st -q | grep '^[AM]' | cut -c9- | xargs svn diff 

Spiegazione:

  1. svn st -q prende l'uscita di stato SVN senza righe aggiuntive ("quiet").
  2. grep '^[AM]' filtri aggiunti e file modificati.
  3. cut -c9- taglia i metadati e passa oltre i percorsi.
  4. xargs svn diff esegue svn diff per ogni file.
Problemi correlati