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:ignore
proprietà 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 dirname
primo. (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:ignore
e non svn::ignore
come 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 project
vedi 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 cache
directory 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 add
ritiene 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 delete
loro, quindi modificare la svn:ignore
proprietà.
So che sembra ovvio, ma continuavano ad apparire come ?
nella mia svn status
lista, 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:ignore
proprietà 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 è:
.svn
cartella nascosta)Quando abbiamo bisogno di più di una cartella da ignorare
svn:ignore
svn pe
dovrai 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 *.tmp
file), è 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_on
nella 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 -u
ha 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:ignore
e 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.