Domanda

Come posso ignorare i file in Subversion?

Inoltre, come posso trovare i file che non sono sotto il controllo della versione?

È stato utile?

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 entrambe HKLM E HKCU.
    • Linux/Unix- ~/.subversion/config

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.

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.
  • 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

https://github.com/github/gitignore

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:

  1. Ottiene i file di stato da 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

Inoltre, se usi Tortoise SVN puoi fare questo:

  1. Nel menu contestuale seleziona "TortoiseSVN", quindi "Proprietà"
  2. Nella finestra visualizzata fare clic su "Nuovo", quindi su "Avanzate"
  3. 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"
  4. OK.OK.
  5. 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:

  1. Ottiene i file di stato da 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
  1. cd ~/.subversion
  2. apri 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 .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.

  1. apri per utilizzare il prodotto JetBrains (ad es.Pycharm)
  2. quindi fai clic sul pulsante "Conferma" nella barra degli strumenti in alto o utilizza la scorciatoia "ctrl + k"screenshot_toolbar
  3. nell'interfaccia di commit, sposta i file indesiderati in un altro elenco di modifiche come segue.screenshot_commit_change
  4. la prossima volta potrai confermare solo l'elenco delle modifiche predefinite.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top