Pergunta

Por uma série de razões, a fonte canônica de alguns arquivos que eu tenho não pode ser uma cópia de trabalho do repositório (o servidor Subversion está atrás de um firewall inacessível, e os dados não nativamente existe no sistema de arquivos em minha estrutura preferida). Então, eu escrevi uma ferramenta que baixa os dados, gera uma estrutura de diretório a partir dele, e então usa SharpSvn para importar o resultado para o repositório. Isso funciona ... pela primeira vez. O segundo tempo, é claro, um diretório com esse nome já existe no repositório, e eu não posso importar novamente.

Em vez disso, eu poderia:

  1. Exclua o diretório, então importação. Eu não testei isso, mas além de soar estúpido, ele provavelmente também apaga o histórico de revisão dos respectivos arquivos, em relação aos novos como totalmente diferente.
  2. ver se existe o diretório, check it out, remotamente apagar os arquivos que não existem mais na fonte canônica, em seguida, substituir o restante e cometem. Isso provavelmente funcionaria, mas sons propenso a erros e desnecessariamente difícil.

É minha suposição correto que a exclusão de arquivos irá marcar novos da mesma forma como diferentes arquivos? Existe uma maneira mais fácil do que a segunda abordagem?

Foi útil?

Solução

Para 1), não irá apagar o histórico de revisão, mas os novos arquivos serão tratados como completamente alheios aos antigos. Você ainda pode obter os arquivos antigos novamente embora.

Para 2), que seria a maneira recomendada. Mas depois de 'svn delete'ing os arquivos existentes e adicionando os novos, você também tem que 'svn add' esses novos arquivos antes de cometer.

Mas parece que você deve considerar o uso do script svn-load-dirs.pl. Você pode ler sobre isso no livro do Subversion, o capítulo " Vendedor ramos ".

Outras dicas

Subversion tem uma conexão solta aos arquivos. Para arquivos dentro de uma pasta, você pode facilmente fazer um get / atualização, fazer mudanças maciças (incluindo apagar, substituir ou adicionar arquivos), em seguida, confirmar as diferenças. Que o comportamento ao nível dos ficheiros é típico de uso do Subversion.

Os diretórios são ligeiramente diferentes. Subversion armazena as informações de repositório no nível da pasta. Então, se você criar uma nova pasta, ele não terá automaticamente uma conexão com o Subversion. (Usando algo como TortoiseSVN, ele cuida de muito do que para você.)

Se você estiver indo para ser adicionar e excluir diretórios durante o processo de geração, você terá algumas questões ligeiramente diferentes do que com os próprios arquivos. Mas, você ainda pode realizar seu objetivo através da linha de comando, SharpSvn, TortoiseSVN, ou outras ferramentas semelhantes.

Uma vez que você não pode substituir os diretórios ou você vai destruir o diretório .svn e perder todas as informações repositório, você tem que copiar os arquivos, mas apenas criar novos diretórios. Isto é como eu faria isso, de dentro do trabalho de subversão cópia que você deseja atualizar:

(cd <newdirectory> ; tar -cf - * ) | tar -xf -

Com certeza você precisa de um sistema Unix-y. Ele deve funcionar com Cygwin , a menos que o Windows faz algo particularmente bizarra com substituição de pastas no nível do sistema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top