it-swarm-pt.tech

Como eu digo ao Subversion para tratar um arquivo como um arquivo binário?

Como eu digo ao Subversion (svn) para tratar um arquivo como um arquivo binário?

62
Nick

É possível identificar manualmente um arquivo localizado dentro de um repositório como binário usando:

svn propset svn:mime-type application/octet-stream <filename>

Isso geralmente não é necessário, pois o Subversion tentará determinar se um arquivo é binário quando o arquivo é adicionado pela primeira vez. Se o Subversion está etiquetando incorretamente um determinado tipo como "texto" quando deve ser tratado como binário, é possível configurar o recurso auto-props do Subversion para marcar automaticamente esse arquivo com um tipo MIME que não seja de texto. Independentemente das propriedades configuradas no arquivo, o Subversion ainda armazena o arquivo em um formato binário no repositório.

Se o Subversion identifica o tipo MIME como um tipo "texto", ele habilita certos recursos que não estão disponíveis em arquivos binários, como svn diff e svn culpa . Ele também permite a conversão automática de final de linha, configurável cliente a cliente.

Para mais informações, consulte Como o Subversion lida com arquivos binários?

81
stormlash

Da página 367 do livro do Subversion

No sentido mais geral, o Subversion lida com arquivos binários com mais elegância do que o CVS. Como o CVS usa o RCS, ele pode armazenar apenas cópias completas sucessivas de um arquivo binário alterado. O Subversion, no entanto, expressa diferenças entre arquivos usando um algoritmo de diferenciação binário, independentemente de conterem dados textuais ou binários. Isso significa que todos os arquivos são armazenados diferencialmente (compactados) no repositório.

Os usuários do CVS precisam marcar arquivos binários com sinalizadores -kb para impedir que os dados sejam distorcidos (devido à expansão de palavras-chave e às traduções de final de linha). Eles às vezes esquecem de fazer isso.

O Subversion segue a rota mais paranóica. Primeiro, ele nunca executa nenhum tipo de palavra-chave ou tradução de final de linha, a menos que você o solicite explicitamente (consulte a seção "Substituição de palavras-chave" e a seção "Sequências de caracteres de final de linha" para obter mais detalhes). Por padrão, o Subversion trata todos os dados do arquivo como cadeias de bytes literais, e os arquivos são sempre armazenados no repositório em um estado não traduzido.

Segundo, o Subversion mantém uma noção interna de se um arquivo é "texto" ou "binário", mas essa noção existe apenas na cópia de trabalho. Durante uma atualização svn, o Subversion executará mesclagens contextuais nos arquivos de texto modificados localmente, mas não tentará fazê-lo nos arquivos binários.

Para determinar se uma mesclagem contextual é possível, o Subversion examina a propriedade svn: mime-type. Se o arquivo não possui a propriedade svn: mime-type, ou possui um tipo MIME em texto (por exemplo, texto/*), o Subversion assume que é texto. Caso contrário, o Subversion assume que o arquivo é binário. O Subversion também ajuda os usuários executando um algoritmo de detecção binária nos comandos svn import e svn add. Esses comandos dão um bom palpite e, em seguida, (possivelmente) definem uma propriedade binária svn: mime-type no arquivo que está sendo adicionado. (Se o Subversion achar errado, o usuário sempre poderá remover ou editar manualmente a propriedade.)

A edição manual seria feita por

svn propset svn:mime-type some/type filename.extension
21
Evil Andy

Basicamente, você deve definir o tipo mime como octet-stream:

svn propset svn:mime-type application/octet-stream <filename>
15
KTamas

Se 'svn add' adivinha o tipo incorreto e gera um erro como o seguinte:

svn: E200009: File 'qt/examples/dialogs/configdialog/images/config.png' has inconsistent newlines
svn: E135000: Inconsistent line ending style

a solução alternativa é adicionar o arquivo sem propriedades e, em seguida, defina as propriedades em uma segunda etapa:

svn add --no-auto-props qt/examples/dialogs/configdialog/images/config.png
svn propset svn:mime-type image/png qt/examples/dialogs/configdialog/images/config.png
13
user1454388

Por exemplo:

svn propset svn:mime-type image/png foo.png
8
Jan Krüger

Embora o Subversion tente detectar automaticamente se um arquivo é binário ou não, você pode substituir o tipo MIME usando svn propset . Por exemplo, svn propset svn:mime-type application/octet-stream example.txt. Isso fará com que seu arquivo atue como uma coleção de bytes, e não como um arquivo de texto. Veja também, o manual svn em Portabilidade de Arquivo .

4
grammar31

Se você estiver usando o tortoise svn no Windows, clique com o botão direito do mouse no arquivo e vá para Propriedades. Clique em novo e adicione uma nova propriedade do tipo svn: mime-type. Para o valor colocado: application/octet-stream

3
Brian R. Bondy

De acordo com a FAQ do Subversion , você pode usar o svn propset para alterar a propriedade svn: mime-type para aplicativo/fluxo de octetos

2
Adrian Petrescu

o svn procura por uma propriedade do tipo MIME, supondo que seja texto se não existir. Você pode definir explicitamente essa propriedade, consulte http://svnbook.red-bean.com/en/1.5/svn.forcvs.binary-and-trans.html

2
Paul Dixon

Geralmente isso é feito por padrão para você, mas se não for, é necessário examinar as propriedades e o propset do arquivo.

0
Frank Wiles