2010-01-24 8 views

Respuesta

12

Puede intentar establecer propiedades automáticas ([1] [2]) en configuración de subversión. Garantizará que durante la operación de agregar archivos nuevos svn: eol-style se establezca correctamente.

AFAIU git-svn solo está utilizando svn en el funcionamiento interno, y debe cargar la configuración de subversión, y configurar auto-props para nuevos archivos.

Ok, lo probé, funciona.

Ejemplo .subversion/config:

[miscellany] 
enable-auto-props = yes 

[auto-props] 
*.cpp = svn:keywords=Id Revision;svn:eol-style=native 
*.cs = svn:keywords=Id Revision;svn:eol-style=native 
+1

Pero tenga cuidado: según mi experiencia, 'git-svn' configurará el atributo' svn: eol-style = native' en commit, como usted describe, pero * no * realmente convertirá los archivos comprometidos en terminaciones de línea LF antes de comprometerse. Por lo tanto, cualquier terminación de línea CRLF se comprometerá con el repositorio de subversión intacto, pero la subversión espera que todos los archivos atribuidos 'svn: eol-style = native' se almacenen con terminaciones de línea LF. El resultado final es que la primera vez que alguien edita y confirma un archivo de una copia de trabajo de subversión, el diff incluirá la conversión de CRLF a LF. – ntc2

7

@silk's answer above es sólo una solución parcial. Una solución completa también incluye la configuración de git para convertir CRLF a LF en commit. Así, además de lo que sugiere @silk, también se debe hacer:

git config --global core.autocrlf input 
git config --global core.safecrlf warn 

O:

git config --global core.safecrlf warn 
git config --global core.attributesfile ~/.gitattributes 
echo '* text=auto' >> ~/.gitattributes 

Explicación:

En mi experiencia, git-svn establecerá el atributo svn:eol-style=native de cometer, como @silk describe, pero no realmente convierte los archivos comprometidos a terminaciones de línea LF antes de confirmar. Por lo tanto, cualquier terminación de línea CRLF se comprometerá con el repositorio de subversión intacto, pero la subversión espera que todos los archivos atribuidos svn:eol-style=native se almacenen con terminaciones de línea LF. El resultado final es que la primera vez que alguien edita y confirma un archivo de una copia de trabajo de subversión, el diff incluirá la conversión de CRLF a LF.

Por lo tanto, una solución completa debe incluir forzar a git para convertir archivos en terminaciones de línea LF antes de confirmar. Puede hacer esto configurando core.autocrlf=input, que significa "convertir todos los CRLF a LF en la confirmación, pero no realice la conversión inversa al finalizar la compra", y core.safecrlf=warn o core.safecrlf=true, que lo advertirán o detendrán cuando intente enviar un archivo con Terminaciones de línea CRLF. La configuración autocrlf asegurará que estos CRLF se conviertan, por lo que el safecrlf=true es probablemente excesivo. Ver git help config.

Como alternativa, puede usar los atributos de git para forzar la conversión, configurando text=auto en todos los archivos. Para hacerlo globalmente, debe especificar un archivo de atributos en core.attributesfile. Ver git help attributes.

+0

Una cosa más: con estas configuraciones, los archivos confirmados retendrán cualquier terminación de línea CRLF en su copia de trabajo de git-svn hasta que los revise nuevamente. Si estás en * nix y quieres terminaciones de líneas LF, entonces puedes forzar la nueva salida cambiando a una rama que no contenga los archivos CRLF y luego alternar nuevamente. Alternativamente, puede usar 'dos2unix' para convertir los finales de línea, y luego' git add' los archivos; no es necesario 'git commit' porque se esperan las terminaciones de línea LF. – ntc2

2

Considere el uso de SubGit.

Desde las primeras compilaciones admite propiedades de Subversion adecuadas para la conversión de .gitattributes/.gitignore (y viceversa). Entre otras cosas, incluye svn: eol-style y 'eol', svn: mime-type y 'text', svn: ignore y .gitignore conversion.

SubGit es una solución del lado del servidor, hay que instalarla en el repositorio de Subversion. Después de eso, uno puede usar cualquier cliente de Subversion o Git para enviar cambios a este repositorio. Consulte SubGit documenration para obtener más detalles.En general es bastante fácil de usar que:

  1. Generar archivo de configuración SubGit:

    $ subgit configure svn_repos 
    
  2. Ajuste archivo svn_repos/conf/subgit.conf según sea necesario para especificar la ubicación del repositorio Git, ramas & etiquetas de diseño , etc.

  3. Finalizar la instalación:

    $ subgit install svn_repos 
    

En este momento, SubGit convierte todas las revisiones de su repositorio Subversion al repositorio Git. Luego instala sus ganchos personalizados para ser activados por las modificaciones entrantes. De esta manera, SubGit convierte continuamente las revisiones de Subversion en cada commit de svn y Git se compromete en cada envío de git.

SubGit es un proyecto comercial, pero es gratuito para pequeños equipos, proyectos de código abierto y académicos. Y soy uno de los desarrolladores de SubGit.

+0

Esta es una respuesta perfectamente razonable, pero por favor, divulgue su asociación con el proyecto SubGit, http://stackoverflow.com/help/behavior –

+0

@DaveBacher Acabo de actualizar mi respuesta, gracias por el aviso. – vadishev

Cuestiones relacionadas