Muchos repositorios svn requieren que los archivos nuevos tengan un atributo svn: eol-style. ¿Hay alguna forma de garantizar que esto ocurra con git-svn?¿Puedo hacer que git-svn maneje svn: eol-style?
Respuesta
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
@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
.
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
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:
Generar archivo de configuración SubGit:
$ subgit configure svn_repos
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.
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.
Esta es una respuesta perfectamente razonable, pero por favor, divulgue su asociación con el proyecto SubGit, http://stackoverflow.com/help/behavior –
@DaveBacher Acabo de actualizar mi respuesta, gracias por el aviso. – vadishev
- 1. ¿Cómo puedo hacer que mi comparer genérico (IComparer) maneje nulos?
- 2. Cómo hacer que MySQL maneje UTF-8 correctamente
- 3. ¿Cómo puedo hacer que Ruby on Rails maneje errores de registro duplicados de MySQL?
- 4. ¿Cómo puedo bifurcar en SVN y hacer que bifurque mi svn: carpetas externas también?
- 5. Esperando que se maneje el evento
- 6. ¿Cómo hacer que Git Merge maneje cambios no confirmados en mi árbol de trabajo?
- 7. ¿Cómo decirle al depurador de LLDB que no maneje SIGBUS?
- 8. ¿Cómo puedo hacer que git-svn elimine las sucursales remotas que ya no existen?
- 9. ¿Cómo hacer que svn diff produzca el archivo que aplicaría el parche, cuando se usaba svn cp o svn mv?
- 10. Cómo hacer que SVN ADD ignore los binarios
- 11. ¿Cómo puedo escribir una mónada de estado que también maneje errores?
- 12. Cómo hacer svn interno: externos
- 13. ¿Cómo puedo hacer que la búsqueda de archivos Eclipse no incluya directorios svn?
- 14. ¿Hay una colección java ordenada que maneje duplicados?
- 15. ¿Hay un IDE de C++ que maneje bien las plantillas?
- 16. ¿Cómo puedo hacer que Subversion ignore un directorio?
- 17. ¿Cómo hacer que 'svn log' ignore los cambios de propiedad?
- 18. ¿Cómo hacer que diff se vea como svn diff?
- 19. Hacer que la carpeta no sea administrada por el SVN
- 20. ¿Cómo hacer que svn diff muestre cambios remotos?
- 21. ¿Es posible hacer que git svn dcommit resulte en una única confirmación svn?
- 22. ASP.Net MVC - Maneje múltiples casillas de verificación
- 23. ¿Puedo usar git-svn y parecer que estaba usando SVN, si es así cómo?
- 24. ¿Cómo puedo determinar el tipo de repositorio SVN que tengo?
- 25. ¿Cómo hacer svn commit como usuario diferente?
- 26. ¿Cómo puedo hacer que OData DELETE funcione?
- 27. ¿Puedo hacer que JUnit sea más detallado?
- 28. ¿Cómo puedo hacer que Eclipse muestre archivos *.
- 29. ¿Puedo hacer que un TTreeNode sea invisible?
- 30. ¿Cómo puedo hacer que parpadee una elipse?
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