Subversion: extraia o diff + log e repete

1

Estou me encontrando na situação em que um cliente nos forneceu um computador que eu posso usar para VPN em sua rede para acessar seu repositório SVN. Mas nem todos podemos estar fazendo nosso desenvolvimento nesse computador, então exportamos "nosso ramo" e depois o importamos para o nosso próprio repositório SVN. Uma vez que o cliente realmente não se preocupa com o nosso trabalho diário, estamos planejando simplesmente colocar grandes mudanças em horários convenientes. Isso tudo funcionaria, tenho certeza disso.

Ultimamente tenho me perguntado se existe alguma maneira fácil de obter changesets (ou seja, diff + message) fora do nosso SVN, e então repetir isso no SVN do cliente. Semelhante ao que git format-patch e git am permite.

Olhando para svn log --diff parece que seria possível, mas eu teria que preparar algum script para separar a saída em um patch (a ser aplicado usando svn patch ) e uma mensagem de commit (para ser fornecido para svn commit -F ). Eu espero que haja uma solução que não me obrigue a escrever um roteiro como esse;)

    
por Magnus 20.03.2014 / 23:49

2 respostas

3

  1. LAST_MOVED foi movido pela última vez por confirmação. no começo é 0, depois aumentará.

  2. obter lista de confirmações:

    svn log -q -r $LAST_MOVED:HEAD | grep -o ^r[0-9]*

    isso produzirá algo como

    r10
    r12
    r16
    r22

  3. para cada REVISÃO você precisa obter o diff:

    svn diff -c $REVISION > $ REVISION.diff

    e envie a mensagem:

    svn log -c $REVISION | tail -n -2 | head -n -1 > $ REVISION.txt

    você terá:

    r10.diff
    r10.txt

    r12.diff
    r12.txt

    r16.diff
    r16.txt

    r22.diff
    r22.txt

  4. obtenha esses arquivos para segmentar a máquina,

  5. execute svn update

  6. para cada r*.diff e r*.txt arquivos executados:

    • patch -p0 -i r{number}.diff

    • svn commit -a -m --file r{number}.txt

Existe um problema que o svn não difere dados binários , portanto, quaisquer dados binários não serão transferidos usando este método. Para cada arquivo binário você irá obter:

Index: caminho / para / file / something.jar
  ================================================== =================
  Não é possível exibir: arquivo marcado como um tipo binário.
  svn: mime-type = application / octet-stream

Você deve detectar essa string em arquivos diff e para esses arquivos você pode usar o comando diff externo descrito no link

    
por 21.03.2014 / 14:42
0

reprovado, veja minha outra resposta

  1. alterar arquivos
  2. executar svn add *
  3. executar svn diff > file.diff
  4. copie file.diff para o pc do cliente
  5. no computador do cliente executando svn update
  6. executar patch -p0 -i file.diff
  7. executar svn commit -a
  8. divirta-se!
por 21.03.2014 / 00:06

Tags