it-swarm-eu.dev

Come ignoro i file in Subversion?

Come ignoro i file in Subversion?

Inoltre, come faccio a trovare i file che non sono sotto controllo di versione?

589
andyuk

(Questa risposta è stata aggiornata per corrispondere al comportamento di SVN 1.8 e 1.9)

Hai 2 domande:

Contrassegnare i file come ignorati:

Con "file ignorato" intendo che il file non verrà visualizzato negli elenchi anche come "non verificato": il tuo client SVN farà finta che il file non esista affatto nel filesystem.

I file ignorati sono specificati da un "modello di file". La sintassi e il formato dei modelli di file sono spiegati nella documentazione online di SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Pattern di file in Subversion ".

Subversion, dalla versione 1.8 (giugno 2013) e successive, supporta 3 diversi modi di specificare i pattern dei file. Ecco un riassunto con esempi:

1 - Area di configurazione runtime - Opzione global-ignores:

  • Questa è un'impostazione solo per client-side, quindi il tuo elenco global-ignores non sarà condiviso da altri utenti e si applica a tutti i repos che effettui il checkout sul tuo computer.
  • Questa impostazione è definita nel file Area di configurazione runtime:
    • Windows (basato su file) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows (basato sul registro) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores in HKLM e HKCU.
    • Linux/Unix - ~/.Subversion/config

2 - La proprietà svn:ignore, che è impostata sulle directory (non sui file):

  • Questo è memorizzato all'interno del repository, quindi gli altri utenti avranno gli stessi file ignorati. Simile a come funziona .gitignore.
  • svn:ignore è applicato alle directory ed è non ricorsivo o ereditato. Tutti i file o immediate sottodirectory della directory superiore che corrisponde al Pattern File saranno esclusi.
  • Mentre SVN 1.8 aggiunge il concetto di "proprietà ereditate", la proprietà svn:ignore stessa viene ignorata nelle directory discendenti non immediate:

    cd ~/myRepoRoot                             # Open an existing repo.
    echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
    
    svn status                                  # Check to see if the file is ignored or not.
    > ?    ./ignoreThis.txt
    > 1 unversioned file                        # ...it is NOT currently ignored.
    
    svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
    svn status
    > 0 unversioned files                       # ...but now the file is ignored!
    
    cd subdirectory                             # now open a subdirectory.
    echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
    
    svn status
    > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
    > 1 unversioned file
    

    (Quindi il file ./subdirectory/ignoreThis non viene ignorato, anche se "ignoreThis.txt" viene applicato alla radice del repository .).

  • Pertanto, per applicare ricorsivamente un elenco di ignori è necessario utilizzare svn propset svn:ignore <filePattern> . --recursive.

    • Questo creerà una copia della proprietà in ogni sottodirectory.
    • Se il valore <filePattern> è diverso in una directory figlio, il valore del figlio sovrascrive completamente i genitori, quindi non vi è alcun effetto "additivo".
    • Quindi, se cambi <filePattern> nella root ., dovrai cambiarlo con --recursive per sovrascriverlo sulle directory figlio e discendente.
  • Prendo atto che la sintassi della riga di comando è contro-intuitiva.

    • Ho iniziato assumendo che ignorassi un file in SVN digitando qualcosa come svn ignore pathToFileToIgnore.txt ma non è così che funziona la funzione ignora di SVN.

3- La proprietà svn:global-ignores. Richiede SVN 1.8 (giugno 2013):

  • Questo è simile a svn:ignore, eccetto che fa uso della funzione "Proprietà ereditate" di SVN 1.8.
  • Confronta con svn:ignore, il pattern del file viene applicato automaticamente in ogni directory discendente (non solo i bambini immediati) .
    • Ciò significa che non è necessario impostare svn:global-ignores con il flag --recursive, poiché i modelli di file ignorati ereditati vengono applicati automaticamente non appena vengono ereditati.
  • Eseguendo lo stesso insieme di comandi come nell'esempio precedente, ma utilizzando svn:global-ignores invece:

    cd ~/myRepoRoot                                    # Open an existing repo
    echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
    svn status                                         # Check to see if the file is ignored or not
    > ?    ./ignoreThis.txt
    > 1 unversioned file                               # ...it is NOT currently ignored
    
    svn propset svn:global-ignores "ignoreThis.txt" .
    svn status
    > 0 unversioned files                              # ...but now the file is ignored!
    
    cd subdirectory                                    # now open a subdirectory
    echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
    svn status
    > 0 unversioned files                              # the file is ignored here too!
    

Per gli utenti TortoiseSVN:

L'intero arrangiamento è stato per me fonte di confusione, perché la terminologia di TortoiseSVN (usata nel loro sistema di menu di Windows Explorer) inizialmente mi era fuorviante: non ero sicuro di quale fosse il significato del menu Ignora "Aggiungi ricorsivamente", "Aggiungi *" e "Aggiungi" opzioni. Spero che questo post spieghi come la caratteristica Ignore si collega alla funzione Proprietà SVN. Detto questo, suggerisco di usare la riga di comando per impostare i file ignorati in modo da avere un'idea di come funziona invece di usare la GUI, e solo usando la GUI per manipolare le proprietà dopo che sei a tuo agio con la riga di comando.

Elenco dei file che vengono ignorati:

Il comando svn status nasconderà i file ignorati (ovvero i file che corrispondono a un pattern R__zglobal-ignores, o corrispondono a un pattern svn:ignore della directory madre immediata o corrispondano a uno schema svn:global-ignores di qualsiasi directory di ancesor.

Utilizzare l'opzione --no-ignore per vedere quei file elencati. I file ignorati hanno lo stato di I, quindi reindirizzano l'output a grep per mostrare solo le righe che iniziano con "I".

Il comando è:

svn status --no-ignore | grep "^I"

Per esempio:

svn status
> ? foo                             # An unversioned file
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore
> ? foo                             # An unversioned file
> I ignoreThis.txt                  # A file matching an svn:ignore pattern
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore | grep "^I"
> I ignoreThis.txt                  # A file matching an svn:ignore pattern

ta-da!

690
andyuk

Utilizzare il seguente comando per creare un elenco non in file di controllo della versione.

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

Quindi modifica il file in lascia solo i file che vuoi effettivamente ignorare . Quindi utilizzare questo per ignorare i file elencati nel file:

svn propset svn:ignore -F ignoring.txt .

Nota il punto alla fine della linea. Indica a SVN che la proprietà viene impostata sulla directory corrente.

Elimina il file:

rm ignoring.txt

Finalmente impegnarsi,

svn ci --message "ignoring some files"

È quindi possibile verificare quali file vengono ignorati tramite:

svn proplist -v
76
ulitosCoder

Se si utilizza TortoiseSVN , fare clic con il tasto destro del mouse su un file e quindi selezionare TortoiseSVN/Aggiungi per ignorare l'elenco. Questo aggiungerà il file/carattere jolly alla proprietà svn:ignore.

svn:ignore verrà controllato durante il check-in dei file e i file corrispondenti saranno ignorati. Ho il seguente elenco di ignorare per un progetto di Visual Studio. NET:

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

Puoi trovare questo elenco nel menu di scelta rapida su TortoiseSVN/Proprietà.

47
artur02

Puoi ignorare un file o una directory come .gitignore. Basta creare un file di testo con l'elenco delle directory/file che si desidera ignorare ed eseguire il seguente codice:

svn propset svn:ignore -F ignorelist.txt .

O se non vuoi usare un file di testo, puoi farlo in questo modo:

svn propset svn:ignore "first
 second
 third" .

Fonte: Blog di Karsten - Imposta svn: ignora per più file dalla riga di comando

36
Adrian Enriquez

Ho trovato l'articolo .svnignore Example for Java.

Esempio: .svnignore per Ruby on Rails,

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

Dopodiché:

svn propset svn:ignore -F .svnignore .

Esempi per .gitignore. Puoi usare per il tuo .svnignore

https://github.com/github/gitignore

21
d.danailov

Come nessuno sembra averlo menzionato ...

svn propedit svn:ignore .

Quindi modifica il contenuto del file per specificare i pattern da ignorare, esci dall'editor e hai finito.

15
Yorick

Quando usi propedit assicurati di non avere spazi finali in quanto ciò causerà l'esclusione del file dall'elenco ignorato.

Questi vengono inseriti automaticamente se si utilizza la funzione di completamento automatico della scheda su linux per creare il file con cui iniziare:

svn propset svn:ignore 'file1
file2' .
10
Kenneth

Un'altra soluzione è:

svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt

o linea per linea

svn st | awk '/^?/{print $2}' > svnignore.txt 
svn propget svn:ignore >> svnignore.txt 
svn propset svn:ignore -F svnignore.txt . 
rm svnignore.txt

Cosa fa:

  1. Ottiene i file di stato dalla svn
  2. Salva tutti i file con? al file "svnignore.txt"
  3. Ottiene i file già ignorati e li aggiunge al file "svnignore.txt"
  4. Dice allo svn di ignorare i file in "svnignore.txt"
  5. Rimuove il file
8
bkbilly

Inoltre, se usi SVN Tortoise puoi farlo:

  1. Nel menu di scelta rapida selezionare "TortoiseSVN", quindi "Proprietà"
  2. Nella finestra apparente fai clic su "Nuovo", quindi su "Avanzate"
  3. Nella finestra apparente opposta a "Nome proprietà" selezionare o digitare "svn: ignora", opposto a "Valore proprietà" digitare il nome del file desiderato o il nome della cartella o la maschera del file (nel mio caso era "*/destinazione"), fare clic su "Applica proprietà in modo ricorsivo "
  4. Ok. Ok.
  5. Commettere
7
msangel

Una versione più leggibile di bkbilly's answer:

svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

Cosa fa:

  1. Ottiene i file di stato dalla svn
  2. Salva tutti i file con ? nel file "svnignore.txt"
  3. Ottiene i file già ignorati e li aggiunge al file "svnignore.txt"
  4. Dice allo svn di ignorare i file in "svnignore.txt"
  5. Rimuove il file
5
LivingDust
  1. cd ~/.Subversion
  2. aprire la configurazione
  3. trova la riga come "global-ignores"
  4. imposta ignora il tipo di file in questo modo: global-ignores = * .o * .lo * .la * .al .libs * .so .so. [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. swp .DS_Store output node_modules
4
范陆离

SVN ignore è facile da gestire in TortoiseSVN. Apri TortoiseSVN e fai clic con il pulsante destro del mouse sul menu file, quindi seleziona Aggiungi per ignorare l'elenco.

Questo aggiungerà i file nella proprietà svn:ignore Quando verificheremo i file, allora quei file che sono abbinati a svn:ignore che saranno ignorati e non impegneranno.

Nel progetto Visual Studio abbiamo aggiunto i seguenti file da ignorare:

bin obj
*.exe
*.dll
*.pdb
*.suo

Stiamo gestendo il codice sorgente su SVN di Comparetrap utilizzando questo metodo con successo

3
Slack

svn status ti dirà quali file non sono in SVN e cosa è cambiato.

Guarda le proprietà SVN per la proprietà ignore.

Per tutte le cose SVN, è richiesto il Red Book .

3
DGM

È inoltre possibile impostare un pattern di ignoranza globale nel file di configurazione di SVN.

3
petr k.

Aggiungere una directory a Subversion e ignorare il contenuto della directory

svn propset svn:ignore '\*.*' .

o

svn propset svn:ignore '*' .
3
Al Conrad

Usa il comando svn status sulla tua copia di lavoro per mostrare lo stato dei file, i file che non sono ancora sotto controllo di versione (e non ignorati) avranno un punto interrogativo accanto a loro.

Per quanto riguarda l'ignoranza dei file, è necessario modificare la proprietà svn: ignore, leggere il capitolo Ignorare articoli non analizzati nello svnbook all'indirizzo http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special. ignore.html . Il libro descrive inoltre ulteriori informazioni sull'uso dello stato di svn.

2
  1. apri il prodotto JetBrains (ad esempio Pycharm)
  2. quindi fai clic sul pulsante 'commit' nella barra degli strumenti in alto o usa la scorciatoia 'ctrl + k' screenshot_toolbar
  3. sull'interfaccia di commit, sposta i file indesiderati in un'altra lista di modifiche come segue . screenshot_commit_change
  4. la prossima volta puoi solo salvare la lista delle modifiche di default.
0
G. Googol