Com o TortoiseSVN, eu posso mover um arquivo para a lista de alterações ignorar ao confirmar, para que quando eu confirmar uma árvore inteira, as alterações nesse arquivo não sejam confirmadas.
Existe uma maneira de fazer algo assim usando a ferramenta de linha de comando svn?
EDIT: Obrigado pelas sugestões de uso svn:ignore
, mas isso não faz exatamente o que eu estava procurando.
svn:ignore
afeta coisas como svn add
& svn import
. Ele fornece uma lista de padrões de nome de arquivo a serem ignorados.
Eu tenho um arquivo que já está sob controle de origem, mas quero fazer alterações temporárias nesse arquivo que não quero ser confirmadas mais tarde, quando confirmar a árvore de origem inteira. Estou fazendo muitas outras alterações e pude colocar uma nota no meu monitor dizendo para reverter esse arquivo antes de confirmar a árvore, mas seria bom se o svn pudesse pular esse arquivo automaticamente.
fonte
Respostas:
O Subversion não possui um recurso interno "não confirmar" / "ignorar ao confirmar", a partir de fevereiro de 2016 / versão 1.9. Esta resposta é uma solução alternativa da linha de comando não ideal
Como o OP afirma, o TortoiseSVN possui uma lista de alterações incorporada, "ignorar na confirmação", que é automaticamente excluída das confirmações. O cliente da linha de comando não possui isso; portanto, você precisa usar várias listas de alterações para realizar esse mesmo comportamento (com ressalvas) :
Como existe um precedente no TortoiseSVN, uso "ignorar na confirmação" nos meus exemplos para os arquivos que não quero confirmar. Usarei "trabalho" para os arquivos que faço, mas você pode escolher qualquer nome que desejar.
Primeiro, adicione todos os arquivos a uma lista de alterações denominada "trabalho". Isso deve ser executado a partir da raiz da sua cópia de trabalho:
Isso adicionará todos os arquivos da cópia de trabalho recursivamente à lista de alterações denominada "trabalho". Há uma desvantagem nisso - à medida que novos arquivos são adicionados à cópia de trabalho, você precisará adicionar especificamente os novos arquivos ou eles não serão incluídos. Segundo, se você precisar executar isso novamente, precisará adicionar novamente todos os seus arquivos "ignorar ao confirmar" novamente. Não é o ideal - você pode começar a manter sua própria lista de 'ignorados' em um arquivo, como outros fizeram.
Em seguida, para os arquivos que você deseja excluir:
Como os arquivos podem estar apenas em uma lista de alterações, a execução dessa adição após a adição "trabalho" anterior removerá o arquivo que você deseja ignorar da lista de alterações "trabalho" e o colocará na lista de alterações "ignorar ao confirmar".
Quando você estiver pronto para confirmar seus arquivos modificados que deseja confirmar, basta adicionar "--cl work" ao seu commit:
Aqui está como é um exemplo simples na minha máquina:
Uma alternativa seria simplesmente adicionar todos os arquivos que você deseja confirmar a uma lista de alterações 'trabalho' e nem mesmo manter uma lista de ignorados, mas isso também é muito trabalhoso. Realmente, a única solução ideal e simples é se / quando isso for implementado no próprio SVN. Há um problema antigo sobre isso no rastreador de problemas do Subversion, SVN-2858 , caso isso mude no futuro.
fonte
$svn st --- Changelist 'ignore-on-commit': M database.php M config.php
e ainda assim, eles foram enviados para o repositório no commit. Alguma idéia do que eu fiz de errado?Eu também sempre me encontrei nessa situação: e as listas de alterações não funcionam para mim - quero fazer uma pequena lista de arquivos que não quer se comprometer, em vez de manter uma enorme lista de arquivos que eu faço falta comprometer-se!
Eu trabalho na linha de comando do linux: portanto, minha solução é criar um script / usr / bin / svnn (sim, com dois 'n's!) Da seguinte maneira:
Obviamente, isso é adaptado à minha situação - mas apenas altere DIR e IGNORE_FILES para se adequar à sua configuração de desenvolvedor. Lembre-se de alterar o script para executável com:
.. então você apenas usa "svnn" em vez de "svn" para executar o subversion sem medo de verificar mudanças locais nos arquivos da lista IGNORE_FILES. Eu espero que isso ajude!
fonte
svnn ignore configs/*
- com curingas, sinos e assobios. Acho que escrevo algo assim e volto aqui!svnn
, considere chamá-losvn
e colocar esse script em algo que possa estar no início do seu PATH, como${HOME}/bin
. A partir do próprio script, você chamaria/usr/bin/svn
.Não acredito que haja uma maneira de ignorar um arquivo no repositório. Frequentemente, encontramos isso com o web.config e outros arquivos de configuração.
Embora não seja perfeita, a solução que costumo ver e usar é ter um arquivo .default e uma tarefa importante para criar cópias locais.
Por exemplo, no repositório é um arquivo chamado
web.config.default
que possui valores padrão. Em seguida, crie uma tarefa nant que renomeie todos osweb.config.default
arquivos paraweb.config
que possam ser personalizados para valores locais. Essa tarefa deve ser chamada quando uma nova cópia de trabalho é recuperada ou uma compilação é executada.Você também precisará ignorar o
web.config
arquivo que é criado para que não seja confirmado no repositório.fonte
Confira as listas de alterações , que podem fornecer uma opção para filtrar os arquivos que você alterou, mas que não deseja confirmar. O SVN não pulará automaticamente um arquivo, a menos que você o diga - e a maneira como você diz que esse arquivo é de alguma forma diferente de outros arquivos é colocá-lo em uma lista de alterações.
Requer mais trabalho para você, e você só pode aplicar a lista de alterações à sua cópia de trabalho (obviamente, imagine o caos que poderia ocorrer se você pudesse aplicar uma propriedade 'nunca atualizar' a uma revisão!).
fonte
Cheguei a esse segmento procurando uma maneira de fazer um commit "atômico" de apenas alguns arquivos e, em vez de ignorar alguns arquivos no commit, segui o caminho contrário e apenas comitei os arquivos que queria:
Talvez ajude alguém.
fonte
svn ci
é simplesmente alias parasvn commit
. O comando commit permite fazer um commit específico dos arquivos especificadosGente, acabei de encontrar uma solução. Dado que o TortoiseSVN funciona da maneira que queremos, tentei instalá-lo no Linux - o que significa, rodando no Wine. Surpreendentemente, funciona! Tudo o que tem a fazer é:
(A razão pela qual a necessidade de excluir arquivos pela CLI é porque a entrada do menu para fazer isso não foi encontrada, não sei por quê. De qualquer forma, isso funciona muito bem!)
fonte
Arquivos em conflito não podem ser confirmados. Você pode tirar proveito disso para manter suas alterações privadas fora do repositório. Isso funciona melhor com um pequeno número de arquivos.
Para obter um conflito
a-file
, sua cópia de trabalho (WC) não possui as informações atualizadasa-file
do repositório e asa-file
alterações no seu WC estão no mesmo local das alterações no repositório (alterações que você não atualizou ainda). Se você não quiser esperar pelas condições acima, poderá criar um conflitoa-file
como este:Na cópia de trabalho 1 (WC1), adicione uma linha de texto na parte superior
a-file
, como "faça um conflito aqui" . Use a sintaxe necessária para não quebrar o repositório. Confirme aa-file
partir do WC1. No WC2, adicione uma linha de texto diferente na parte superiora-file
, como "eu quero um conflito" . Atualização do WC2 e agora um arquivo deve estar em conflito.fonte
Em vez disso, eu escreveria um script de ajuda do bash que é executado
svn commit
em todos os arquivos que você precisa e em nenhum deles. Dessa forma, você tem muito mais controle.Por exemplo, com uma linha, você pode confirmar todos os arquivos com extensão
.h
e.cpp
nos quais você fez alterações (e que não causariam conflito):Altere / adicione extensões à
[h|cpp]
peça. Adicione uma mensagem de log entre as aspas,-m ""
se necessário.fonte
Algumas das idéias propostas podem ser implementadas assim:
No Windows no PowerShell
adicione tudo ao list.ps1 padrão
adicione para ignorar list.ps1
Agora, você pode usar
svn ci --changelist default
o alias para não precisar especificá-lo sempre. O benefício adicional é que você pode armazenar a lista de ignorar ao confirmar (se desejar) no repositório.Eu faço isso para alguns arquivos que são constantemente regenerados, mas que raramente são alterados manualmente. Por exemplo, adiciono número de revisão aos meus arquivos de configuração em espaços reservados específicos para que os arquivos sejam alterados a cada confirmação, mas as alterações manuais são raras.
fonte
Eu cansei de esperar que isso fosse incorporado ao SVN. Eu estava usando o tortoiseSVN com ignorar ao confirmar, mas isso abre uma caixa de diálogo do usuário que você não pode suprimir na linha de comando, e quando executo meu script de construção e faço uma xícara de chá, odeio quando Volto para descobrir que está aguardando a entrada do usuário em 10% do caminho.
Então, aqui está um script do Windows PowerShell que confirma apenas os arquivos que não estão em uma lista de alterações:
fonte
Atualização do script de user88044.
A idéia é enviar os arquivos na lista de alterações não confirmar e executar o script maligno.
O script extrai os arquivos do-not-commit do comando: svn status --changelist 'do-not-commit'
O script é colocado em / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)
status svnn, svnn commit, etc ...
fonte
Você pode configurar a lista de alterações "ignorar na confirmação" diretamente com o TortoiseSVN. Não há necessidade de configurar nenhuma outra lista de alterações, incluindo todos os outros arquivos
1) Clique em "SVN Commit ..." (não confirmaremos, apenas uma maneira de encontrar um menu gráfico para a lista de alterações) 2) Na lista Clique com o botão direito do mouse no arquivo que você deseja excluir. 3) Menu: vá para lista de alterações> ignorar ao confirmar
Na próxima vez que você fizer um SVN Commit ... Os arquivos aparecerão desmarcados no final da lista, na categoria ignorar ao confirmar.
Testado com: TortoiseSVN 1.8.7, Build 25475 - 64 Bit, 05/05/2014 20:52:12, Subversion 1.8.9, -release
fonte
Está atrasado para o jogo, mas encontrei o comando de linha de comando mais impressionante para esse problema. Feito usando o bash. Aproveitar.
Ok, então aqui está uma explicação do comando. Algumas coisas precisarão ser alteradas com base no seu caso de uso.
Eu recebo uma lista de todos os arquivos. Todos eles começarão com esses caracteres de status (?,!, A, etc). Cada um está em suas próprias linhas
Eu uso grep para filtrar a lista. Pode ser usado normalmente (para incluir) ou com o sinalizador -v (para excluir). Nesse caso, ele está sendo usado para excluir, com a frase "exclusão" sendo o que será excluído.
Agora, removo o caractere de status e os espaços em branco no início de cada linha e depois cito cada linha, usando sed. Alguns dos meus nomes de arquivos têm espaços neles, daí a citação.
Usando tr, substituo todas as novas linhas por espaços. Agora minha lista inteira de arquivos a serem confirmados está em uma linha.
Por fim, uso xargs para executar meu comando de confirmação com a mensagem Ele faz o commit e descarta minha lista de arquivos citados como o último argumento.
O resultado é que tudo funciona da maneira que eu quero. Eu ainda meio que odeio svn por me forçar a pular por esses malditos aros, mas posso viver com isso. Eu acho.
fonte
Como eu estava enfrentando exatamente o mesmo problema, e meu Google continuava me dando nada, acho que encontrei uma solução alternativa. Aqui está o que eu fiz, parece funcionar para mim, mas como estou preso a uma versão antiga do SVN (<1.5, pois ele não tem a opção --keep-local) e não sou especialista nisso , Não posso ter certeza de que é uma solução universal. Se funcionar para você também, por favor me avise!
Eu estava lidando com uma instalação do Prestashop que recebi do SVN, já que outras pessoas já começaram a trabalhar nela. Como as configurações do banco de dados foram feitas para outro servidor, eu as alterei em algum arquivo na pasta / config. Como esta pasta já estava com controle de versão, defini-la em svn: ignore não impediria que minhas modificações locais fossem confirmadas. Aqui está o que eu fiz:
Agora eu posso executar o svn add --force. na raiz do repositório sem adicionar minha configuração, mesmo que não corresponda à versão do repositório (acho que teria que passar por tudo isso novamente se o modificasse mais uma vez, não testasse). Também posso atualizar o svn sem que meus arquivos sejam substituídos ou sem erros.
fonte
Uma solução que não ignora alterações nas propriedades do diretório
Tentei usar a solução com base
changelist
, mas tenho alguns problemas com ela. Primeiro, meu repositório possui milhares de arquivos, portanto a lista de alterações a ser comprometida é enorme, e minhasvn status
saída ficou muito longa e precisava ser analisada para ser útil. O mais importante é que eu queria confirmar alterações que vieram de uma mesclagem, o que significa que elas incluem alterações de propriedade. Ao confirmar uma lista de alterações, as propriedades svn anexadas ao diretório não são confirmadas, então tive que fazer uma confirmação extra:Você pode ter que fazer isso em vários diretórios (aqui, registro as propriedades de
DIR
e do diretório atual.
), basicamente aqueles com umM
na segunda coluna ao emitir osvn status
comando.Solução
Eu usei patches e
svn patch
. No pseudo-código:Como outros pôsteres, acabo usando um script para manter a lista de arquivos a serem ignorados:
Eu normalmente o usei com
ci
erevert -R .
.fonte
svn:ignore
é a sua resposta.Exemplo:
fonte
o
*.xml
é o padrão dos arquivos a serem ignorados; você também pode usar nomes de diretório aqui.fonte