2011-12-15 11 views
8

Sto sviluppando con molte persone.Escludere alcuni file su commit da riga di comando svn (non svn: ignore)

I check out repository remoto, ottenere 3 file. Dopo modificare, eseguire:

svn status 

Essa mostra:

M file_1 
M file_2 
M file_3 

ora, voglio commettere solo due file: file_1, file_2, ma non file_3.

Come fare?

I dont' desidera utilizzare

svn revert file_3 

prima di commettere.

Spiegare: Modifica file_1, file_2 per progetto condiviso, file_3 per l'esecuzione solo sulla macchina locale.

risposta

7

ne dite:

$ svn commit file_1 file_2 
+0

grazie per la tua risposta –

+9

Ok, quindi se ho 100 file che voglio impegnarsi e solo da escludere uno. C'è un modo? – hacklikecrack

+1

Basta usare la shell, così come SVN elenca tutti i file modificati e grep -v il singolo. – zoul

10

Espansione alla risposta di Zoul .. di sviluppare il tuo elenco di file utilizza:

svn stat | grep -v ignore.file | perl -ne 'chop; s/^.\s+//; print "$_ "' 

O se avete i nomi di file con spazi usare:

svn stat | grep -v ignore.file | perl -ne 'chop; s/^.\s+//; print "\"$_\" "' 
+0

svn stat, mostraci quali file dobbiamo impegnare e abbiamo solo bisogno di scegliere quelli, thks. –

+0

Grazie per aver effettivamente fornito una risposta utile a questa domanda. – pamphlet

0

Ecco una versione di Windows PowerShell che impegna solo i file che non sono in un elenco modifiche. Crea un changelist chiamato ignore-on-commit (che il Tortoise SVN comprenderà comunque) e metti i file su cui non vuoi impegnarti.

# get list of changed files into targets 
[XML]$svnStatus = svn st -q --xml C:\SourceCode\Monad 
# select the nodes that aren't in a changelist 
$fileList = $svnStatus.SelectNodes('/status/target/entry[wc-status/@item != "unversioned"]') | Foreach-Object {$_.path}; 
# create a temp file of targets 
$fileListPath = [IO.Path]::GetTempFileName(); 
$fileList | out-file $fileListPath -Encoding ASCII 
# do the commit 
svn commit --targets $fileListPath -m "Publish $version" --keep-changelists 
# remove the temp file 
Remove-Item $filelistPath 
3

una riga per bash:

svn ci $(svn stat | grep -v exclude.file) 
+0

Lo cambierei in svn ci $ (svn stat | grep -v ^? | Grep -v exclude.file), solo per filtrare i file che non si trovano nel repository, come i binari creati dai sorgenti. Altrimenti, svn si lamenterà di loro e non commetterà nulla, con messaggi di errore simili a svn: E200009: 'a.file' non è sotto controllo di versione – dmityugov

0

Finii per fare uno script che contiene il seguente:

svn ci $(svn diff --summarize | \ 
    grep -v exclude.file1 | \ 
    grep -v exclude.file2 | \ 
    ... 
    grep -v exclude.fileN \ 
) 

Sono sicuro che qualcuno può rendere ancora più flessibile, rendendo questo script legge un file che conterrebbe un elenco di file da escludere dal commit.

0

forse è possibile utilizzare questo comando.

svn ci `svn st | grep -e "^[A|M]" | grep -v "test.js" | grep -ve "conf\.js$" | awk '{print $2}' | tr "\\n" " "`