Ho appena iniziato a utilizzare SVN e ho una directory cache che non mi serve sotto il controllo del codice sorgente. Come posso ignorare l'intera directory / cartella con SVN?
Ho appena iniziato a utilizzare SVN e ho una directory cache che non mi serve sotto il controllo del codice sorgente. Come posso ignorare l'intera directory / cartella con SVN?
Risposte:
Imposta la svn:ignoreproprietà della directory principale:
svn propset svn:ignore dirname .
Se hai più cose da ignorare, separate da newline nel valore della proprietà. In tal caso è più semplice modificare il valore della proprietà utilizzando un editor esterno:
svn propedit svn:ignore .
svn rm --keep-local dirnameprimo. (La mia uscita in formato svn stat è stata enorme e ci ho sbattuto la testa per un po '.)
svn propset svn:ignore -F file.txt .
svn:ignoree non svn::ignorecome ho fatto io. È possibile impostare proprietà arbitrarie, quindi quest'ultima verrà impostata su OK e sarà possibile visualizzare e modificare la proprietà, ma SVN non ignorerà i file elencati.
Ecco una struttura di directory di esempio:
\project
\source
\cache
\other
Quando projectvedi che la tua directory della cache non viene aggiunta e si presenta come tale.
> svn st
M source
? cache
Per impostare la proprietà ignore, fare
svn propset svn: ignora la cache.
dove svn:ignoreè il nome della proprietà che stai impostando, cacheè il valore della proprietà ed .è la directory su cui stai impostando questa proprietà. Dovrebbe essere la directory padre della cachedirectory che necessita della proprietà.
Per verificare quali proprietà sono impostate:
> svn proplist
Properties on '.':
svn:ignore
Per vedere il valore di svn:ignore:
> svn propget svn:ignore
cache
Per eliminare le proprietà precedentemente impostate:
svn propdel svn:ignore
dirname. Ad esempio, durante la digitazione svn propset svn:ignore dirname, se si consente alla shell (bash) di compilare il dirname per te, si aggiungerà quella barra finale, lasciandoti con il comando svn propset svn:ignore dirname/, che non comporta che la cartella venga ignorata. Almeno, questa è stata la mia esperienza.
Importante menzionare:
Sulla riga di comando non puoi usare
svn add *
Ciò aggiungerà anche i file ignorati, poiché la riga di comando si espande *e pertanto svn addritiene che si desideri aggiungere tutti i file. Quindi utilizzare questo invece:
svn add --force .
svn add --force *NON funzionerà. Usa il punto, non la stella.
Dal momento che ho trascorso un po 'di tempo a cercare di farlo funzionare, si dovrebbe notare che se i file esistono già in SVN, è necessario per svn deleteloro, quindi modificare la svn:ignoreproprietà.
So che sembra ovvio, ma continuavano ad apparire come ?nella mia svn statuslista, quando pensavo che li avrebbe semplicemente ignorati localmente.
Per espanderlo leggermente, se lo stai facendo con lo strumento da riga di comando svn, devi digitare:
svn propedit svn:ignore path/to/dir
che aprirà il tuo editor di testo preferito, quindi digita '*' per ignorare tutto al suo interno e salva + esci - questo includerà la directory stessa in svn, ma ignora tutti i file al suo interno, per ignorare la directory, usa il percorso del padre e quindi digitare il nome della directory nel file. Dopo aver salvato, esegui un aggiornamento ('svn up'), quindi controlla il percorso appropriato.
Impostare la svn:ignoreproprietà sulla directory principale:
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
Questo sovrascriverà qualsiasi valore corrente di svn:ignore. È possibile modificare il valore con:
$ svn pe svn:ignore .
Che aprirà il tuo editor. È possibile aggiungere più motivi, uno per riga.
È possibile visualizzare il valore corrente con:
$ svn pg svn:ignore .
Se stai usando una GUI dovrebbe esserci un'opzione di menu per farlo.
svn ps svn:ignore . 'cachedir'risultati in cachedir is not under version control. cambiando per svn ps svn:ignore 'cachedir' .lavorare per me
Grazie per tutti i contributi sopra. Vorrei solo condividere alcune informazioni aggiuntive dalle mie esperienze ignorando i file.
Quando le cartelle sono già sotto controllo di revisione
Dopo svn import e svn co i file, cosa facciamo di solito per la prima volta.
Tutta la cache di runtime, le cartelle degli allegati saranno sotto il controllo della versione. quindi, prima di svn ps svn: ignore , dobbiamo eliminarlo dal repository.
Con la versione 1.5 di SVN sopra possiamo usare svn del --keep-local your_folder, ma per una versione precedente, la mia soluzione è:
.svncartella nascosta)Quando abbiamo bisogno di più di una cartella da ignorare
svn:ignoresvn pedovrai modificare il file di testo e puoi usare questo comando se richiesto per impostare il tuo editor di testo usando vi :
export SVN_EDITOR=vi
Il file ha un aspetto simile al seguente:
runtime
cache
attachments
assets
svn propset svn:ignore -F .ignorethesefiles ., che utilizzerà il contenuto del file. Mi piace tenerlo in giro in modo da sapere cosa viene ignorato. Le modifiche richiedono un follow-up.
Se la tua directory fooè già sotto il controllo della versione, rimuovila prima con:
svn rm --keep-local foo
svn propset svn:ignore foo .
... e se si desidera ignorare più di una directory (dire build/ temp/e *.tmpfile), è possibile farlo in due passaggi (ignorando la prima e modificando le proprietà ignora (vedere altre risposte qui) oppure si potrebbe scrivere qualcosa come
svn propset svn:ignore "build
temp
*.tmp" .
sulla riga di comando.
Se stai utilizzando il particolare client SVN TortoiseSVN , quindi su commit, hai la possibilità di fare clic con il tasto destro del mouse sugli elementi e selezionare "Aggiungi per ignorare l'elenco".
Il comando per ignorare più voci è un po 'complicato e richiede barre rovesciate.
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
Questo comando ignorerà qualsiasi cosa di nome cache, tmp, null, e and_so_onnella directory corrente.
svn propset svn:ignore -F .ignorethesefiles .ti permetterà di usare un file. E come detto, hai sempre propedit.
Ho avuto problemi a far ignorare le directory nidificate; la directory principale che volevo ignorare non sarebbe mostrata con 'svn status' ma tutti i sottodir lo facevano. Questo è probabilmente evidente a tutti gli altri, ma ho pensato di condividerlo:
ESEMPIO:
/tronco
/ Trunk / cache
/ Trunk / cache / subdir1
/ Trunk / cache / subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
"Grazie" svn per un modo così orribile, fasullo e difficile di ignorare i file.
Quindi ho scritto uno script svn-ignore-all :
#!/bin/sh
# svn-ignore-all
# usage:
# 1. run svn status to see what is going on at each step
# 2. add or commit all files that you DO want to have in svn
# 3. remove any random files that you don't want to svn:ignore
# 4. run this script to svn:ignore everything marked '?' in output of `svn status`
svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
Inoltre, per ignorare un elenco specifico di file / percorsi, possiamo usare questa variante svn-ignore . Immagino che svn-ignore-all dovrebbe davvero essere come xargs svn-ignore.
#!/bin/sh
# svn-ignore
# usage:
# svn-ignore file/to/ignore ...
for f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
Ancora una cosa: tendo a inquinare i miei checkout svn con molti file casuali. Quando è il momento di eseguire il commit, sposto quei file in una sottodirectory "vecchia" e dico a svn di ignorare "vecchia".
Bash oneliner per più ignori:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
Se la directory del progetto è denominata / Progetto e la directory della cache è denominata / Progetto / Cache, è necessario impostare una proprietà di sovversione su / Progetto. Il nome della proprietà dovrebbe essere "svn: ignore" e il valore della proprietà dovrebbe essere "Cache".
Fare riferimento a questa pagina nel manuale di Subversion per ulteriori informazioni sulle proprietà.
La risposta di Jason farà il trucco. Tuttavia, invece di impostare svn: ignora su "." nella directory della cache, potresti voler includere "cache" nella proprietà svn: ignore della directory principale , nel caso in cui la directory della cache non sia sempre presente. Lo faccio su un numero di cartelle "usa e getta".
PER MANTENERE LE DIRETTIVE CHE SVN NON IGNORA:
svn delete --keep-local path / directory_to_keep / *
svn propset svn: ignora il percorso "*" / directory_to_keep
Se stai usando un frontend per SVN come TortoiseSVN, o una sorta di integrazione IDE, dovrebbe esserci anche un'opzione ignora nello stesso menu dell'operazione commit / add.
Guarda anche le tue barre finali. Ho scoperto che includendo images/*nel mio file di impostazione ignora non ho ignorato ./images/. Quando ho corso svn status -uha mostrato ancora ? images. Quindi, ho appena cambiato l'impostazione ignore in just images, no slash. Ho eseguito un controllo dello stato e questo è stato cancellato.
Risolto con Eclipse nel modo seguente:
Prima di tutto, esegui una sincronizzazione della tua cartella con il progetto:
squadra -> sincronizza
Nella vista successiva, vista squadra, puoi vedere tutte le risorse che puoi impegnare sul server SVN.
Quindi, selezionare la cartella delle risorse della risorsa che si desidera ignorare e quindi è possibile ignorarla utilizzando
squadra -> aggiungi a
svn:ignore.
Successivamente, nella finestra di conferma, seleziona la prima opzione: "ignora per nome".
Ad esempio, se voglio ignorare la cartella di destinazione e le relative risorse .class, eseguirò la sincronizzazione e, nella vista di sincronizzazione, selezionerò la cartella di destinazione. Successivamente, selezionerò
SQUADRA-> add
a svn:ignoree quindi confermo la prima opzione nella finestra di conferma.
Dopo aver perso molto tempo a cercare come fare questa semplice attività, ho deciso di postare non è stato difficile trovare una spiegazione decente.
Prima di tutto lascia che la struttura del campione
$ svn st? progetto / tronco / target? proiettare / trunk / myfile.x
1 - prima configura l'editor, in mycase vim export SVN_EDITOR = vim
2 - "svn propedit svn: ignora project / trunk /" aprirà un nuovo file e puoi aggiungere i tuoi file e la sottodirectory in noi caso tipo "target" salvare e chiudere il file e funziona
$ svn st? proiettare / trunk / myfile.x
Grazie.