Estou procurando uma boa maneira de 'svn add' automaticamente todos os arquivos não versionados em uma cópia de trabalho no meu repositório SVN.
Eu tenho um servidor ativo que pode criar alguns arquivos que devem estar sob controle de origem. Eu gostaria de ter um script curto que eu possa executar para adicioná-los automaticamente, em vez de passar e adicioná-los um de cada vez.
Meu servidor está executando o Windows Server 2003, portanto, uma solução Unix não funcionará.
svn
command-line
windows-server-2003
JerSchneid
fonte
fonte
Respostas:
svn add --force * --auto-props --parents --depth infinity -q
Ótima dica! Uma observação: meu Eclipse adiciona novos arquivos à lista de ignorados automaticamente. Pode ser uma questão de configuração, mas de qualquer maneira: existe a
--no-ignore
opção que ajuda.Depois disso, você pode confirmar:
fonte
alias magic="svn add --force * --auto-props --parents --depth infinity -q"
- Explicado:svn help add
*
no final, então ele não iria funcionar (pelo contrato de arrendamento para mim)Esta é uma pergunta diferente da minha, mas há uma resposta que pertence a esta pergunta:
fonte
O que funciona é isso:
Adiciona o conteúdo dos subdiretórios.
Não adiciona arquivos ignorados.
Lista quais arquivos foram adicionados.
O ponto no comando indica o diretório atual, que pode ser substituído por um nome ou caminho de diretório específico, se você desejar adicionar um diretório diferente do atual.
fonte
.\*
ou se o svn root estiver em um diretório diferentestuff\svn_root\*
.stuff\svn_root
não adiciona arquivos em subdiretórios (por exemplo, emstuff\svn_root\already_in_svn\not_in_svn.txt
). Daí a estrela no final.Isso funcionou para mim:
( Fonte )
Como você já resolveu seu problema para o Windows, esta é uma solução UNIX (após o Sam). Eu adicionei aqui, pois acho que ainda é útil para quem chega a essa pergunta solicitando a mesma coisa (pois o título não inclui a palavra-chave "WINDOWS").
Nota (fev 2015): Conforme comentado por "bdrx", o comando acima pode ser mais simplificado desta maneira:
fonte
awk '/^[?]/{print $2}'
; Não há necessidade do processo grep extra.Isso adicionará qualquer arquivo não versionado no diretório atual e todos os diretórios filhos com versão.
fonte
Este método deve lidar com nomes de arquivos com qualquer número / combinação de espaços neles ...
Aqui está uma explicação do que esse comando faz:
Use o argumento -i para xargs, para poder importar nomes de arquivos com espaços para 'svn add' - basicamente, -i define {} para ser usado como espaço reservado para que possamos colocar os "caracteres ao redor do nome do arquivo usado por 'svn adicionar'.
Uma vantagem desse método é que ele deve lidar com nomes de arquivos com espaços neles.
fonte
O TortoiseSVN possui esse recurso incorporado, se você estiver disposto a usar uma solução que não seja da linha de comando. Apenas clique com o botão direito do mouse na pasta de nível superior e selecione Adicionar ...
fonte
Isso é como documentado no svn book e o mais simples e funciona perfeito para mim
http://svnbook.red-bean.com/en/1.6/svn.ref.svn.c.add.html
fonte
Usar:
fonte
svn status | cut -d ? -f 2 -s | xargs svn add
Eu sempre uso:
Copiar colar
fonte
Como esta postagem está marcada como Windows, pensei em encontrar uma solução para o Windows. Eu queria automatizar o processo e criei um arquivo bat. Resisti a criar um console.exe em C #.
Eu queria adicionar quaisquer arquivos ou pastas que não sejam adicionados ao meu repositório quando eu iniciar o processo de confirmação.
O problema com muitas das respostas é que eles listarão arquivos não-versionados que devem ser ignorados conforme minha lista de ignorados no TortoiseSVN .
Aqui está a minha configuração de gancho e arquivo em lote que faz isso
Script de gancho de tartaruga:
svnadd.bat
fonte
Nessa implementação, você terá problemas caso suas pastas / nomes de arquivos tenham mais de um espaço, como abaixo:
tais casos são cobertos por simples:
fonte
Se você usa Linux ou Cygwin ou MinGW no Windows, pode usar soluções semelhantes ao bash, como a seguir. Contrastando com outros similares apresentados aqui, este leva em consideração os espaços de nome de arquivo:
fonte
Depois de passar algum tempo tentando descobrir como adicionar recursivamente apenas alguns dos arquivos, pensei que seria válido compartilhar o que funcionou para mim:
Aqui vai uma explicação.
O primeiro comando adiciona todos os diretórios. O segundo comando adiciona apenas os arquivos de acordo com os padrões especificados.
Deixe-me dar mais detalhes:
No segundo comando, as únicas diferenças são o comando dir e o comando svn, acho que é claro o suficiente.
fonte
Você pode usar o comando
ou
Se seus arquivos / diretórios não estiverem adicionando recursivamente. Então verifique isso.
A adição recursiva é propriedade padrão . Você pode ver no livro SVN .
O problema pode estar na sua lista de ignorados ou nas propriedades globais.
Tenho solução rastreador de problemas do google
Verifique as propriedades globais para ignorar as estrelas (*)
TortoiseSVN > Properties
.svn:global-ignores with a value of *
star(*)
, ele ignorará a adição recursiva. Portanto, remova essa propriedade.Verifique o padrão de ignição global para ignorar as estrelas (*)
TortoiseSVN > Settings > General
.star(*)
, remova esta propriedade.Esse cara também explicou por que essa propriedade foi adicionada ao meu projeto.
A maneira mais parecida com isso foi que alguém clicou com o botão direito do mouse em um arquivo sem nenhuma extensão e selecionou TortoiseSVN -> SVN Ignore -> * (recursivamente) e, em seguida, o fez.
fonte
Você pode inserir o seguinte comando no Linux:
fonte
Desde que ele especificou o Windows, onde awk & sed não são padrão:
ou em um arquivo em lotes:
fonte
Esta é a maneira lenta e perigosa de sincronizar um diretório com o SVN, incluindo novos arquivos:
Embora isso possa funcionar muito bem, também pode ter sérias conseqüências. Por exemplo, o SVN geralmente perde o controle do histórico de um arquivo.
A maneira ideal de sincronizar um diretório seria poder diferenciar e usar o patch svn, no entanto, isso se desvia dos formatos no comando diff e o comando svn diff comparará as diferenças do diretório de trabalho em vez das diferenças no nível do sistema de arquivos.
fonte
Eu acho que fiz algo semelhante com:
mas não tenho certeza se minha memória está correta ;-p
fonte