SVN Confirma arquivos específicos

219

Existe alguma maneira de confirmar apenas uma lista de arquivos específicos (eq apenas uma da lista de arquivos que o SVN deseja confirmar).

Estou trabalhando no MAC OS X no Terminal, sem qualquer interface do usuário.

0100110010101
fonte

Respostas:

331

Certo. Apenas liste os arquivos:

$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png

Não conheço uma maneira de dizer a ele para ignorar um determinado conjunto de arquivos. Obviamente, se os arquivos que você deseja confirmar são facilmente listados pelo shell, você pode usar isso:

$ svn ci -m "No longer sets printer on fire" printer-driver/*.c

Você também pode fazer com que o comando svn leia a lista de arquivos a serem confirmados de um arquivo:

$ svn ci -m "Now works" --targets fix4711.txt
descontrair
fonte
1
Então, basicamente, devo nomear os arquivos explicitamente? não posso apenas dizer que não toque nesse arquivo específico?
0100110010101 04/10/2009
16
você poderia fazer: svn st | corte -c 9-> targets.txt, edite o arquivo target.txt para remover o arquivo específico e use o parâmetro --targets para especificar a lista de arquivos.
rédea
17
Acho que meu novo desafio é criar um bug que ative a impressora.
James Webster
3
É patético e ridículo. Nenhuma área de preparação. svn addé usado para adicionar arquivos aos repositórios.
26416 Kandinski
68

Use listas de alterações. A vantagem sobre a especificação de arquivos é que você pode visualizar e confirmar tudo o que você deseja é realmente incluído antes de confirmar.

$ svn changelist fix-issue-237 foo.c 
Path 'foo.c' is now a member of changelist 'fix-issue-237'.

Feito isso, o svn agora mantém as coisas separadas para você. Isso ajuda quando você está manipulando várias alterações

$ svn status
A       bar.c
A       baz.c

--- Changelist 'fix-issue-237':
A       foo.c

Por fim, diga a ele para confirmar o que você queria que fosse alterado.

$ svn commit --changelist fix-issue-237 -m "Issue 237"
jcwenger
fonte
+1 para resposta pontual. Changelists são realmente o caminho a percorrer!
Miro Markaravanes
1
Se você quiser adicionar novos diretórios para uma lista de alterações, não se esqueça de usar svn adicionar primeiro, então usesvn changelist fix-issue-237 --recursive path/to/directory
Fabian Schmengler
Na verdade changelists não pode ser usado com novos diretórios .... "Subversion atualmente não suporta o uso de changelists com diretórios."
Fabian Schmengler
1
@ fschmengler: SVN é uma ferramenta horrível. Eu só estava tentando fazer o melhor do mau trabalho que ele faz. Mude para o git. : P
jcwenger
10
Mudei para o Git há muitos anos e nunca olhei para trás. Foi forçado a usar svn novamente para um cliente, ele se sente como correr com bola e uma corrente em ambas as pernas
Fabian Schmengler
38

Basicamente, você coloca os arquivos que deseja confirmar na linha de comando

svn ci file1 file2 dir1/file3
Wienczny
fonte
1
Então, basicamente, devo nomear os arquivos explicitamente? não posso apenas dizer que não toque nesse arquivo específico?
0100110010101
2
se correr sem argumentos commits SVN todos os arquivos alterados se correr com um arquivo como argumento este arquivo é comprometida se executar com um diretório de todos os arquivos modificados no diretório estão comprometidos
Wienczny
22

Devido ao meu estado de subversão, tive que ser criativo. svn stmostraram M, Ae ~estados. Eu só queria Me Aentão ...

svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt

Este comando diz que encontre todas as linhas de saída svn stque começam com Mou A, corte usando o delimitador de espaço e, em seguida, obtenha as colunas 8 até o fim. Despejar isso em target.txt e substituir.

Em seguida, modifique o target.txt para remover ainda mais a lista de arquivos. Em seguida, execute abaixo para confirmar:

svn ci -m "My commit message" --targets targets.txt

Provavelmente não é o caso de uso mais comum, mas espero que ajude alguém.

Eric
fonte
2
Você também pode usar grep -v '^~'para colocar na lista negra o que deseja.
Martin Konecny
10

Além de listar os arquivos explicitamente, como mostrado por desenrolar e Wienczny , você pode configurar as listas de alterações e verificá-las. Isso permite gerenciar conjuntos de alterações disjuntos na mesma cópia de trabalho.

Você pode ler sobre eles na versão online do excelente livro SVN .

sbi
fonte
7

tente este script ..

#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`; 
     do LIST="${LIST} $f $NULL on"; 
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`
Abhijit Dhariya
fonte
1

Eu faço uma (sub) pasta chamada "hide", movo o arquivo para o qual não quero confirmar. Em seguida, faço o meu commit, ignorando a reclamação sobre o arquivo ausente. Em seguida, mova o arquivo oculto de ocultar para ./

Não conheço nenhuma desvantagem dessa tática.

George Wyche
fonte