SVN: Ignora alcune directory ricorsivamente
-
19-09-2019 - |
Domanda
Non voglio una directory di nome build
o dist
di andare nella mia SVN, non importa quanto in profondità nella struttura che è.
È possibile? In git ho appena messo
build
dist
nel mio .gitignore
alla radice e ignora in modo ricorsivo. Come posso fare questo con svn? Si prega di non dirmi di fare un propset su ogni dir genitore ...
Soluzione
Come di sovversione 1.8, v'è ora la proprietà svn:global-ignores
che funziona come svn:ignore
ma ricorsivamente (quindi impostare questo sulla vostra directory di livello superiore)
Altri suggerimenti
svn propset
prende --recursive
come opzione, in modo da poter fare questo, con due aspetti negativi:
- si controlla l'intero repository (o almeno tutte le directory in essa), e
- si deve ricordare di impostare la proprietà
svn:ignore
ogni volta che si aggiunge una nuova directory
Non è possibile farlo. Ci sono solo due ignorare meccanismi in Subversion, svn:ignore
(che è non ricorsivo) e global-ignores
(che non è specifico per un repository).
Questo funziona per me:
svn propset --recursive svn:ignore *.zip <dir_tree_with_no_zips>
aggiungere al vostro ~ / .subversion / config o etc / / file di configurazione / subversion:
[miscellany]
global-ignores = build dist
E 'possibile ignorare accumulo e dirs dist rimuovendo le directory dal controllo di versione. Il trucco è quello di utilizzare l'opzione --keep-locale per lasciare la directory nella copia di lavoro. Ad esempio:
svn rm dist --keep-local
svn ci -m'removed build directory from version control'
La directory non sarà più monitorata da eversione, ma sarà ancora lì nella copia di lavoro di tenere l'output del compilatore, ecc.
applausi, joe
Ad esempio la struttura delle cartelle:
Project/
Project/dist/
cd Project
svn propset svn:ignore '*' dist/
svn ci -m "content of dist ignored"
E 'bene fare uno svn delete di contenuti dist prima del comando di ignorare, così per i rami dist sarà vuota.
ha funzionato per me, testato oggi. href="http://www.heavymind.net/2007/08/29/the-nightmare-has-returned-with-new-name-svnignore/" Ecco la pagina che spiega che un po '
Al fine di ignorare tutti questi file in tutti i repository, si potrebbe aggiungere un global-ignores
al file di configurazione per ogni utente.
Su sistemi Unix-like, questa zona appare come una directory chiamata .subversion nella home dell'utente directory. Nei sistemi Win32, Subversion crea una cartella denominata Eversione, tipicamente all'interno Applicazione Area dati degli utenti del directory profilo
Purtroppo, non c'è nessuna opzione per-repository per fare questo. E 'fondamentalmente per utente, o per-directory, in modo che il svn:ignores
multipla è probabilmente la strada da percorrere, come fastidioso come può essere.
Per prima cosa dovete spostare nella cartella superiore della vostra copia di lavoro e creare un file lì (diciamo .svnignore), dove è necessario posizionare tutti i modelli che si desidera essere ignorato, per esempio (per un progetto Android):
bin
gen
proguard
.classpath
.project
local.properties
Thumbs.db
*.apk
*.ap_
*.class
*.dex
Poi si esegue il comando seguente (ricordate che devi essere nella cartella principale della vostra copia di lavoro):
svn propset svn:ignore -R -F .svnignore .
Questo funziona solo per le cartelle ei file che non sono ancora sotto il controllo di versione. Se si desidera una cartella (o file) che viene di versione per iniziare a essere ignorati e, rimuoverlo dal controllo di versione eseguendo il comando:
svn rm --keep-local <path>
Hai tutto questo da questo grande articolo che spiega tutto: http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/
in Subversion 1.8 sopra, è possibile impostare a livello mondiale-ignora per repository corrente.
svn propset svn:global-ignores build .
svn propset svn:global-ignores dist .
Inoltre è possibile creare una cartella denominata .svnignore, e le condizioni di scrivere.
build
dist
ricordare una condizione per riga, impostando costruire / * o dist / debug è vano. Poi fate il comando:
svn propset svn:global-ignores -F .svnignore .
Creare un file e aggiungi le ignora in esso
Ingore-list:
file1
directory1
file2
etc...
quindi applicare il seguente comando
for n in directory; do svn propset svn:ignore -F ignore-list $n; done
directory è il nome della directory, è possibile classificare sub e / sub-directory directory. Oppure utilizzare * notare directory corrente si è sotto.
Questo è supponendo che si sta utilizzando bash come shell
svn propset --recursive svn:ignore svn_ignore_rules .
dove svn_ignore_rules è un file contenente le regole ignorano - uno per riga
Naturalmente è necessario rieseguire ogni volta che si aggiunge una nuova directory al tuo repo
svn_ignore_rules possono essere considerati da verificare nel repository, di essere ri-utilizzabile da altri utenti che hanno accesso in scrittura al repository
cd parent_dir #the directory containing folder to be ignored recursively svn propedit svn:ignore . #will open up svn-prop.tmp enlist folder(s) ^X Y commit -m 'ignore targeted direcoty'
Un modo potrebbe essere quella di aggiungere un qualche tipo di controllo sia al pre o post-commit hook, ma è nota dritto in avanti se non si possiede il server di pronti contro termine.
Dato che non sembra esserci alcuna soluzione per questo problema probabilmente comune, vorrei condividere la nostra soluzione. Come gli altri già chiarito, è possibile utilizzare la proprietà svn:ignore
, questo vale per una singola directory (e quindi non per quelli nuovi), o se si utilizza global-ignores
che si applica ad un singolo utente (ma non appartiene al repository) .
Per rendere la vita un po 'più facile che ho creato un file di registro denominato Settings.Svn.reg
e ha aggiunto alla radice del repository. Ora tutti possono doublecklick questo regfile una volta, e ha le impostazioni effettuate.
REGEDIT4
[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany]
"global-ignores"="obj *.suo *.bak *.pdb *.user *.Cache*"
Vorrei davvero apprezzare una soluzione all'interno del repository SVN, quindi se qualcuno lo sa, ti andrebbe di condividere?