Estoy usando git para sincronizar con phonegap mientras pruebo en el navegador nativo del teléfono. Como tal, tengo la siguiente línea:
var isPhoneGap = false;
Obviamente, cambio esto al compilar, pero ¿hay alguna forma de configurar git para ignorar esta línea o tengo que ir y ponerlo en su propio archivo e ignorarlo de esa manera?
Estoy usando Gitx y el terminal en OSX 10.6.
Respuestas:
Si su archivo es de un tipo específico, puede declarar un controlador de filtro de contenido , que puede declarar en un
.gitattributes
archivo (como se presenta en la "Expansión de palabras clave" de " Atributos de Git "):(incluso puede configurar ese filtro para un archivo específico , si lo desea)
Implementar:
yourFilterName.smudge
(activadogit checkout
) yyourFilterName.clean
(activadogit add
)Su archivo aparecería sin cambios
git status
, pero su versión extraída tendría el valor correcto paraisPhoneGap
.fuente
git diff or
git status`, pero ignoras los filtros? ¿Entonces todavía puedo ver qué es diferente? Mi caso de uso es para los registros de depuración ... que eventualmente quiero eliminar ... @jthill @VonCsh ".git/helper.sh"
asegurándome de pasar cualquier parámetro a sed con"$@"
(supongo que solo se pasa la ruta del archivo).Puedes usar
para ignorar los cambios de un archivo del que no desea realizar un seguimiento. Utilizo esta solución cuando necesito tener un archivo en el repositorio, pero este archivo tiene algunas partes que cambian que no necesito rastrear siempre.
Cuando el archivo tiene cambios que son importantes, debe hacer esto:
También, ver el Git Doc actualización de índice de
--[no-]assume-unchanged
parámetro.fuente
--skip-worktree
es una mejor opción para la mayoría de los propósitos. stackoverflow.com/a/39583010/4233593git commit -a
es libre de realizar ese cambio). 'Gitx debería permitirte cometer o ignorar líneas individuales (es posible que ya lo sepas), pero tendrías que hacerlo cada vez que confirmes. Creo que sería mejor tener un archivo de configuración por destino de implementación (puede versionarlos) y algún parámetro de tiempo de ejecución para la forma en que esté iniciando el servidor (como
./myserver --config=whatever.js
).fuente
Continuando con https://stackoverflow.com/a/20574486/4935114 , @Mike propuso crear un
pre-commit
gancho que se incluirágrep
en los archivos organizados para las líneas que uno podría querer ignorar. El gancho comprueba si esas líneas se organizaron. Si es así,echo
es una advertencia yexit
está con código,1
por lo que el proceso de confirmación no continuará.Inspirado por la respuesta de @ Mike , me encontré usando quizás una versión mejorada de su gancho que automáticamente
reset
envía (con la-p
bandera) la línea específica que queremos ignorar.No estoy seguro de que este gancho funcione para una situación en la que tiene muchos archivos con esta línea para ignorar, pero este
pre-commit
gancho busca un cambio en esta línea en un archivo específicobuildVars.java
. El script de gancho se veía así cuando lo probé en mi máquina.Explicación
Lo que hice fue repetir una secuencia de control que busca la expresión regular
isPhoneGap
durante unreset
proceso interactivo . Así emulando a un usuario que presiona/
para buscarisPhoneGap
, presionay
cuando se le pregunta si quiere descartar este parche y finalmente presionaq
para salir del interactivoreset
.El proceso de parche inverso interactivo se documenta aquí: https://git-scm.com/docs/git-add#git-add-patch
NOTA: El script anterior asumiendo que la variable
interactive.singleKey
esfalse
. Si configuró el suyo paratrue
, elimine cualquiera$'\n'
delecho
comando justo después de la advertencia.fuente
Así es como puedes hacerlo con filtros git :
O
*.rb filter=gitignore
, es decir, ejecutar el filtro nombradogitignore
en todos los*.rb
archivosgitignore
filtro en sugitconfig
:$ git config --global filter.gitignore.clean "sed '/#gitignore$/'d"
, es decir, elimine estas líneas$ git config --global filter.gitignore.smudge cat
, es decir, no hacer nada al extraer el archivo del repositorioNotas:
Por supuesto, esto es para archivos ruby, aplicado cuando una línea termina con
#gitignore
, aplicado globalmente en~/.gitconfig
. Modifique esto como necesite para sus propósitos.¡¡Advertencia!!
Esto deja su archivo de trabajo diferente del repositorio (por supuesto). ¡Cualquier comprobación o rebase significará que estas líneas se perderán! Este truco puede parecer inútil ya que estas líneas se pierden repetidamente en el check out, rebase o pull, pero tengo un caso de uso específico para hacer uso de él.
Solo
git stash save "proj1-debug"
mientras el filtro está inactivo (simplemente desactívelo temporalmentegitconfig
o algo así). De esta manera, mi código de depuración siempre se puedegit stash apply
agregar a mi código en cualquier momento sin temor a que estas líneas se confirmen accidentalmente.Tengo una posible idea para solucionar estos problemas, pero intentaré implementarla en otro momento.
Gracias a Rudi y jw013 por mencionar filtros git y gitattributes.
fuente
Un controlador de filtro de contenido no es una buena solución. Es posible que pueda ocultar esta línea de
git status
/ etc, pero en realidad no se ignora. Tan pronto como cambie el valor, su directorio de trabajo se marcará como sucio aunque el cambio no sea visible.Si realmente desea que esta línea esté fuera del control de versiones, cambiarla a un argumento de línea de comando o colocarla en un archivo de inclusión o compilación ignorado puede ser el único medio práctico.
fuente
Supongo que esto podría ser algo que aparezca en más de una línea de su fuente.
Creo que sería más limpio tener un archivo .userbuildconfig de algún tipo que solo incluya y tenga los valores predeterminados registrados. Entonces puede usar la sugerencia de Carlos de marcar ese archivo solo como asumir sin cambios. De esta manera, no se perderán otros cambios en el archivo donde necesita verificar la configuración.
Esto puede permitirle ajustar las macros del preprocesador localmente (o para java algo como esto https://stackoverflow.com/a/1813873/1270965 ).
fuente
No Solo puede ignorar archivos individuales (y más) ya que las líneas en .gitignore coinciden con los nombres de los archivos y no con el contenido del archivo. Ya ha mencionado la solución a esto, es decir, ignore un solo archivo que contiene ese contenido que desea ignorar.
fuente