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.

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

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"

+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

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.


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 .


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'`

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.