Usar Git para trabajar con subversión: Ignorar modificaciones en los files rastreados

Actualmente estoy trabajando con un repository de subversión, pero estoy usando git para trabajar localmente en mi máquina. Hace el trabajo mucho más fácil, pero también hace que algunos de los malos comportamientos ocurran en el repository de subversión bastante evidente y eso crea problemas para mí.

Hay un process de compilation local algo complejo después de extraer el código y crea (y lamentablemente modifica) una cantidad de files. Obviamente, estos cambios no están destinados a ser devueltos al repository. Desafortunadamente, el process de compilation en realidad está modificando algunos files rastreados (sí, muy probablemente porque alguien confió estos artefactos de construcción en algún momento en el repository de subversión). Como estas son modificaciones, agregarlas a mi file de ignorar no sirve para nada.

Puedo evitar revisar estos cambios, sencillamente no los pongo en escena ni los comprometo, pero tener cambios locales sin escenario significa que no puedo volver a establecer la base sin antes limpiarlos.

Lo que me gustaría saber es si hay alguna manera de ignorar los cambios futuros en un set de files rastreados. Alternativamente, ¿hay alguna otra manera de manejar el problema que tengo, o tendré que decirle a quien haya revisado estos files que los limpie?

Como dijo Nathan , limpiar esos files (deshazte de ellos) es la jugada inteligente.

Pero si debe ignorar los files rastreados (que no es el modo nativo de Git cuando se trata de ignorar files: Git solo ignora los files no rastreados ), puede configurar un process para copyr el contenido de los files que desea ignorar y restaurar al confirmar .

Inicialmente, creí que un process de borrado / limpieza , que es un controller de filter de gitattributes podría hacer el truco:

text alternativo http://progit.org/figures/ch7/18333fig0702-tn.png

, dónde:

  • el process de borrado hará una copy de esos files (al actualizar el tree de trabajo)
  • algunas modificaciones tienen lugar durante la construcción
  • el paso de limpieza (durante la confirmación) borrará el contenido de los files con la copy realizada en el paso 1.

PERO, como se indica en esta publicación , eso significaría abusar de esta transformación de contenido de files sin estado al agregar un context con estado (es decir, el nombre completo de la ruta del file borrado / manchado).
Y eso está explícitamente prohibido por JC Hamano:

Aunque al principio consideré interpolar " %P " con pathname, terminé decidiendo en contra, para desalentar a las personas de abusar del filter para la conversión con estado que cambia los resultados dependiendo de la hora, nombre de ruta, confirmación, bifurcación y demás.

e incluso Linus Torvalds tenía algunas reservas en ese momento sobre el mecanismo completo:

Tengo que decir que obviamente no soy un gran fanático de los juegos, pero las diferencias son muy claras.

¿Son realmente útiles? No se. Estoy un poco nervioso acerca de lo que esto significa para cualquier usuario real de la function, pero debo admitir que estoy encantado con una implementación limpia.

Sospecho que esto hace que nos quejemos de nuestras espaldas, pero también sospecho que la gente realmente terminará enganchándose con algo como esto y luego culpándonos y causando un gran dolor en la línea cuando hemos apoyado esto y la gente quiere ". semántica extendida "que ya no está limpia.

Pero no estoy seguro de cuán válido es un argumento que realmente es. Creo que creo en la filosofía de "darles string". Creo que probablemente puedas joderte con esto, pero, oye, cualquiera que haga eso solo tiene que culparse


Así que el lugar correcto para agregar algún tipo de mecanismo de save / restaurar (y efectivamente ignorar cualquier cambio en un set de files rastreados en Git) estaría enganchado :

  • post-checkout : invocado cuando se ejecuta un pago de git después de haber actualizado el tree de trabajo. Allí puede ejecutar un script que recostack todos los files para ignorar y savelos en algún lugar.

  • pre-commit : puede ejecutar un segundo script que restaurará el contenido de esos files, antes de get el post de logging de compromiso propuesto y realizar un compromiso.

A less que haya algún daño político grave en el cerebro, quitar los artefactos del control de la fuente es el paso correcto. (O más bien, el paso "más conveniente", siempre es el paso correcto).

No tengo conocimiento de una forma de decirle a git que ignore los cambios en los files rastreados.