2009-07-01 8 views
9

Tengo un repositorio de subversión alojado en Linux, pero solo se accedió a través de clientes de Windows, ya que es para el origen de una gran aplicación de Windows.¿Se puede hacer git-svn para manejar CRLF como clientes de subversión nativos?

Sería increíble si pudiera trabajar en este repositorio usando git-svn (provisto por msysgit).

Estoy teniendo un montón de tiempo tratando de hacer que el repositorio no se enrede en las terminaciones de línea estilo de Windows.

Después de un svn clone contenidos del repositorio git con:

  • core.autocrlf = true muestra modificaciones a cualquier archivo que en realidad no utilizar LF en el repositorio.
  • core.autocrlf = input muestra modificaciones en cualquier archivo que realmente usa LF en el repositorio.
  • core.autocrlf = false muestra modificaciones a todo.

¿Cuál es la mejor opción aquí? ¿Debo usar core.autocrlf = true y confirmar los cambios LF a CRLF para los archivos afectados?

Estoy a punto de arrojar la toalla y poner mi copia de trabajo de Subversion en un repositorio de git. Esta sería una solución pobre, pero al menos permitiría sucursales locales y escondites. Obviamente se convertirá en un gran dolor para seguir agregando archivos cuando se agregan a la subversión.

EDITAR: Para quienes estén interesados. git-svn es un dolor real si estás en Windows. La respuesta de hasen j a continuación es probablemente la correcta, pero no puedo seguir su consejo sin atraer la ira de los otros desarrolladores de mi equipo.

Estoy esencialmente abandonando esta pregunta ya que no va a conducir a un resultado razonable. Esperemos que el próximo Google Summer of Code atraiga a alguien que quiera retirar su proyecto "Propia git-svn en Windows". Ver http://git.or.cz/gitwiki/SoC2009Ideas#Propergit-svnsupportonWindows

+0

Bueno, estoy realmente desconcertado. Empecé a tratar de arreglar esto de nuevo, pero la baja velocidad del clon svn en Windows me hizo comenzar a hacerlo en Linux. Llevé a Repo a Windows, deshabilité CRLF e hice un reinicio --duro. Ahora parece que tengo un repositorio de git-svn que funciona correctamente ... Ahora para descubrir qué pasos son realmente necesarios para hacer que esto funcione todo el tiempo ... Afortunadamente esto realmente funcionó y no voy a tener problemas cuando empiezo usándolo – toholio

Respuesta

1

Desde mi otra respuesta no se aplica bien a usted, aquí es otra manera de lidiar con la situación:

uso tanto SVN y GIT; en el mismo directorio de trabajo.

Principalmente trabajará con git, extrayendo del repositorio aguas arriba, haciendo cambios locales, sucursales locales, etc .; todo lo que normalmente haces cuando trabajas en un proyecto local de git.

Luego, cuando quiera comprometerse con el repositorio svn central, use el cliente svn.

Tenía algo de experiencia haciendo esto, solo que no haría un svn commit, sino que en su lugar creé un parche con svn diff y lo envié (ya que no tenía acceso de confirmación).

+0

Eso es una idea inteligente. Voy a experimentar con esto. – toholio

+0

* bastante, me refiero obviamente. – toholio

+1

Al final he terminado usando un repositorio de git totalmente local y haciendo actualizaciones (a la rama principal de git) y me comprometo con el repositorio remoto usando SVN. No obtengo una historia local muy útil, pero obtengo ramas de características y otras características de git de esta manera.Espero que en el futuro tenga algo de tiempo para tratar de arreglar lo que está realmente mal con git-svn. – toholio

1

Tuve un problema similar. Para resolverlo, después del clon git-svn, apliqué unix2dos a todos los archivos porque, en mi caso, todos los archivos del repositorio SVN usaban CRLF. Entonces, supongo que deberías probar la conversión CRLF-LF manualmente después de git-svn.

+0

Esta parece ser mi mejor opción por ahora. Puedo usar el resultado del "estado de git" para listar los archivos modificados y ejecutarlos a través de un script para "arreglarlos". Se necesitó configurar "core.fileMode = false" y un "git reset --hard" para hacer que las cosas vuelvan a ser como deberían haber sido. Kludgy, pero parece haber hecho el truco. – toholio

+0

En realidad, esto todavía parece alterar la diferencia de git. Regresaré a mi plan menos atractivo original de simplemente poner mi copia de trabajo en un repositorio git. – toholio

0

Normalmente, usted desea establecer la opción core.autocrlf así:

git config core.autocrlf true 

Pero de acuerdo con this article, todo apunta a que no juega bien con git-svn específicamente. Puede valer la pena tomar una segunda copia segura de su repositorio SVN para ver si funciona.

0

Suelo limpiar mi clon git-svn con git-filter-branch sobre recode dos..ascii -f. (Esto también ha ayudado a la conversión latin1..utf8, también.)

+0

¿Pero eso no destruye la historia de anotaciones de git? Tengo un problema similar al OP, creo, y "arreglar" archivos manualmente después del clon solo significa que estoy escribiendo todo el historial de esos archivos, dejándolos inútiles. – Enno

6

Hazte un favor y no te metas con los finales de línea, mantenlos tal como están. establecer autocrlf en false.

Cualquier editor de texto medio decente en Windows debería ser capaz de manejar terminaciones de línea estilo Unix.

core.autocrlf = false muestra modificaciones en todo.

creo que si sólo haces que después del hecho, no te va a hacer ningún bien.

Tienes que eliminar este repositorio, establecer autocrlf en falso, y luego hacer el clon.

+0

Tristemente editores decentes no incluye todos los que se necesitan para construir el proyecto. Estúpido, pero es un objeto inamovible por el momento. Experimenté con diferentes configuraciones antes del clon, incluido el clon en una máquina Linux. Todavía no podía poner las cosas en un estado en el que ni el git ni las herramientas de compilación causaban demasiadas cosas para marcarse como cambiadas cuando solo se afectaban las terminaciones de línea. Sin embargo, te daré un voto positivo, ya que parece que esto funcionaría para la mayoría de las personas. – toholio

+0

En ese caso, convierta todas las terminaciones de línea en CRLF y comprométase con el repositorio maestro svn. – hasen

+0

Aparentemente, eso no se permitirá. Suspiro. – toholio

0

Otra buena conversations here acerca de core.autocrlf.

+0

No creo que esto ayude con el problema de git-svn. Hay algo tonto pasando por ahí que hace que descargar Windows sea doloroso. – toholio

Cuestiones relacionadas