2011-12-15 30 views
8

Estoy desarrollando con muchas personas.Excluir algunos archivos en la confirmación de línea de comando svn (no svn: ignorar)

Reviso el repositorio remoto, obtengo 3 archivos. Después de editar, ejecutar:

svn status 

Muestra:

M file_1 
M file_2 
M file_3 

Ahora, yo quiero cometer sólo dos archivos: file_1, file_2, pero no file_3.

¿Cómo hacerlo?

yo no' quieren usar

svn revert file_3 

antes de comprometerse.

Explicación: edito file_1, file_2 para proyecto compartido, file_3 para ejecutar solo en mi máquina local.

Respuesta

7

¿Qué tal:

$ svn commit file_1 file_2 
+0

gracias por su respuesta –

+9

Ok por lo que si tengo 100 archivos Quiero comprometerme y sólo quiero excluir uno. ¿Hay alguna manera? – hacklikecrack

+1

Simplemente use el shell, como let SVN enumere todos los archivos modificados y grep -v el único. – zoul

10

Ampliando la respuesta de Zoul .. para desarrollar su lista de archivos utiliza:

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

O si tiene nombres de archivo con espacios de uso:

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

svn stat, muéstranos qué archivos tenemos que comprometer y solo necesitamos elegir los que quieras. –

+0

Gracias por proporcionar una respuesta útil a esta pregunta. – pamphlet

0

Aquí hay una versión de Windows PowerShell que se compromete únicamente los archivos que no están en una lista de cambios. Cree una lista de cambios llamada ignore-on-commit (que Tortoise SVN entenderá de todos modos) y coloque los archivos que no quiere comprometer.

# 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 línea para bash:

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

Cambiaría esto a svn ci $ (svn stat | grep -v ^? | Grep -v exclude.archivo), solo para filtrar los archivos que no están en el repositorio, como los binarios creados a partir de las fuentes. De lo contrario, svn se quejará de ellos y no confirmará nada, con mensajes de error similares a svn: E200009: 'a.file' no está bajo control de versiones – dmityugov

0

me terminó haciendo un script que contiene lo siguiente:

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

Estoy seguro de que alguien puede hacer que sea aún más flexible al hacer esto script leyó un archivo que contendría una lista de archivos para excluir de la confirmación.

0

quizás pueda usar este comando.

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