Come posso ignorare i file in Subversion?
Domanda
Come posso ignorare i file in Subversion?
Inoltre, come posso trovare i file che non sono sotto il controllo della versione?
Soluzione
(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 apparirà negli elenchi nemmeno come "senza versione":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 "Modelli di file in Subversion" .
Subversion, a partire dalla versione 1.8 (giugno 2013) e successive, supporta 3 modi diversi di specificare i modelli di file.Ecco un riepilogo con esempi:
1 - Area Configurazione Runtime - global-ignores
opzione:
- Questo è un solo lato client impostazione, quindi il tuo
global-ignores
L'elenco non sarà condiviso da altri utenti e si applica a tutti i repository che estrai sul tuo computer. - Questa impostazione è definita nel file dell'area di configurazione del runtime:
- Windows (basato su file) -
C:\Users\{you}\AppData\Roaming\Subversion\config
- Windows (basato sul Registro di sistema) -
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
in entrambeHKLM
EHKCU
. - Linux/Unix-
~/.subversion/config
- Windows (basato su file) -
2 - Il svn:ignore
proprietà, che è impostata sulle directory (non sui file):
- Questo viene archiviato nel repository, quindi gli altri utenti avranno gli stessi file da ignorare.Simile a come
.gitignore
lavori. svn:ignore
viene applicato alle directory ed è non ricorsivo o ereditato.Qualsiasi file o immediato verrà esclusa la sottodirectory della directory principale che corrisponde al modello di file.Mentre SVN 1.8 aggiunge il concetto di "proprietà ereditate", il file
svn:ignore
la proprietà 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 fascicolo
./subdirectory/ignoreThis
non viene ignorato, anche se "ignoreThis.txt
" viene applicato su.
radice del repository).Pertanto, per applicare ricorsivamente un elenco da ignorare è necessario utilizzare
svn propset svn:ignore <filePattern> . --recursive
.- Ciò creerà una copia della proprietà in ogni sottodirectory.
- Se la
<filePattern>
Il valore è diverso in una directory figlia, quindi il valore del figlio sovrascrive completamente quello dei genitori, quindi non vi è alcun effetto "additivo". - Quindi, se cambi il file
<filePattern>
sulla radice.
, allora devi cambiarlo con--recursive
per sovrascriverlo nelle directory figlio e discendente.
Noto che la sintassi della riga di comando è controintuitiva.
- Ho iniziato dando per scontato che avresti ignorato un file in SVN digitando qualcosa del tipo
svn ignore pathToFileToIgnore.txt
tuttavia non è così che funziona la funzione di ignoranza di SVN.
- Ho iniziato dando per scontato che avresti ignorato un file in SVN digitando qualcosa del tipo
3- Il svn:global-ignores
proprietà.Richiede SVN 1.8 (giugno 2013):
- Questo è simile a
svn:ignore
, tranne che fa uso della funzionalità "proprietà ereditate" di SVN 1.8. - Confrontare con
svn:ignore
, il modello di file viene applicato automaticamente in ogni directory discendente (non solo nei figli immediati).- Ciò significa che non è necessario impostarlo
svn:global-ignores
con il--recursive
flag, poiché i modelli di file ignorati ereditati vengono applicati automaticamente man mano che vengono ereditati.
- Ciò significa che non è necessario impostarlo
Eseguendo lo stesso set di comandi dell'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'intera disposizione mi creava confusione, perché la terminologia di TortoiseSVN (come quella usata nel loro sistema di menu di Windows Explorer) inizialmente mi era fuorviante: non ero sicuro del significato di "Aggiungi ricorsivamente", "Aggiungi *" e "Aggiungi" del menu Ignora. opzioni.Spero che questo post spieghi come la funzione Ignora si collega alla funzione Proprietà SVN.Detto questo, suggerisco di utilizzare la riga di comando per impostare i file ignorati in modo da avere un'idea di come funziona invece di utilizzare la GUI e di utilizzare la GUI per manipolare le proprietà solo dopo aver acquisito dimestichezza con la riga di comando.
Elenco dei file ignorati:
Il comando svn status
nasconderà i file ignorati (ovvero i file che corrispondono a un file RGA global-ignores
pattern o corrispondere a una directory padre immediata svn:ignore
modellare o abbinare qualsiasi directory degli antenati svn:global-ignores
modello.
Usa il --no-ignore
opzione per vedere i file elencati.I file ignorati hanno lo stato I
, quindi reindirizzare 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!
Altri suggerimenti
Utilizzare il comando seguente per creare un elenco non nei 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 usa questo per ignorare i file elencati nel file:
svn propset svn:ignore -F ignoring.txt .
Nota il punto alla fine della riga.Dice a SVN che la proprietà è stata impostata sulla directory corrente.
Elimina il file:
rm ignoring.txt
Infine impegnarsi,
svn ci --message "ignoring some files"
È quindi possibile verificare quali file vengono ignorati tramite:
svn proplist -v
Se stai usando TartarugaSVN, fare clic con il pulsante destro del mouse su un file e quindi selezionare TortoiseSVN / Aggiungi alla lista da ignorare.Ciò aggiungerà il file/carattere jolly al file svn:ignore
proprietà.
svn:ignore
verrà controllato quando si archiviano i file e i file corrispondenti verranno ignorati.Ho il seguente elenco da ignorare per un progetto Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Puoi trovare questo elenco nel menu contestuale all'indirizzo TortoiseSVN / Proprietà.
Puoi ignorare un file o una directory come .gitignore.Crea semplicemente un file di testo con l'elenco delle directory/file che desideri ignorare ed esegui il codice seguente:
svn propset svn:ignore -F ignorelist.txt .
OPPURE se non vuoi utilizzare un file di testo, puoi farlo in questo modo:
svn propset svn:ignore "first
second
third" .
Fonte:Blog di Karsten - Imposta svn:ignore per più file dalla riga di comando
Ho trovato l'articolo .svnignore Esempio per 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 usarlo per il tuo .svnignore
Visto che nessuno sembra averlo menzionato...
svn propedit svn:ignore .
Quindi modifica il contenuto del file per specificare i modelli da ignorare, esci dall'editor e il gioco è fatto.
Quando usi propedit assicurati di non avere spazi finali in quanto ciò causerebbe l'esclusione del file dall'elenco da ignorare.
Questi vengono inseriti automaticamente se hai utilizzato il completamento automatico tramite scheda su Linux per creare il file con cui iniziare:
svn propset svn:ignore 'file1
file2' .
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 riga per riga
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:
- Ottiene i file di stato da svn
- Salva tutti i file con ? al file "svnignore.txt"
- Ottiene i file già ignorati e li aggiunge al file "svnignore.txt"
- Dice allo svn di ignorare i file in "svnignore.txt"
- Rimuove il file
Inoltre, se usi Tortoise SVN puoi fare questo:
- Nel menu contestuale seleziona "TortoiseSVN", quindi "Proprietà"
- Nella finestra visualizzata fare clic su "Nuovo", quindi su "Avanzate"
- Nella finestra visualizzata di fronte a "Nome proprietà" seleziona o digita "svn:ignore", di fronte a "Valore proprietà" digita il nome del file desiderato, il nome della cartella o la maschera del file (nel mio caso era "*/target"), fai clic su "Applica proprietà ricorsivamente"
- OK.OK.
- Commettere
Una versione più leggibile di La risposta di bkbilly:
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:
- Ottiene i file di stato da svn
- Salva tutti i file con ? al file "svnignore.txt"
- Ottiene i file già ignorati e li aggiunge al file "svnignore.txt"
- Dice allo svn di ignorare i file in "svnignore.txt"
- Rimuove il file
- cd ~/.subversion
- apri configurazione
- trova la riga come "global-ignores"
- imposta ignora il tipo di file in questo modo:global-ignores = *.o *.lo *.la *.al .libs *.so .quindi.[0-9] *.pyc *.pyo 88 *.rej ~ ## .#* .*.swp .DS_Store output node_modules
Puoi anche impostare un modello di ignora globale nel file di configurazione di SVN.
svn status
ti dirà quali file non sono in SVN e cosa è cambiato.
Guarda al Proprietà SVN per la proprietà ignora.
Per tutte le cose SVN, il libro rosso è necessaria la lettura.
Aggiungendo una directory a subversion e ignorando il contenuto della directory
svn propset svn:ignore '\*.*' .
O
svn propset svn:ignore '*' .
SVN ignore
è facile da gestire in TortoiseSVN.Apri TortoiseSVN e fai clic con il pulsante destro del mouse sul menu File, quindi seleziona Aggiungi all'elenco da ignorare.
Questo aggiungerà i file nel file svn:ignore
proprietà.Quando effettuiamo il check-in dei file, i file a cui è abbinato svn:ignore
che verrà ignorato e non verrà eseguito il commit.
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 Confrontatrappola utilizzando questo metodo con successo
Usa il comando stato svn sulla tua copia di lavoro per mostrare lo stato dei file, i file che non sono ancora sotto il controllo della versione (e non ignorati) avranno accanto un punto interrogativo.
Per quanto riguarda ignorare i file è necessario modificare la proprietà svn:ignore, leggere il capitolo Ignorare gli elementi senza versione nello svnbook all'indirizzo http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html.Il libro descrive anche ulteriori informazioni sull'utilizzo dello stato svn.
- apri per utilizzare il prodotto JetBrains (ad es.Pycharm)
- quindi fai clic sul pulsante "Conferma" nella barra degli strumenti in alto o utilizza la scorciatoia "ctrl + k"screenshot_toolbar
- nell'interfaccia di commit, sposta i file indesiderati in un altro elenco di modifiche come segue.screenshot_commit_change
- la prossima volta potrai confermare solo l'elenco delle modifiche predefinite.