siguientes - Git ignora los cambios locales en porciones de archivos rastreados
git pull (4)
Aquí hay una solución alternativa a su problema específico. Coloque la configuración de configuración de la máquina en un archivo ~/.gitconfig.local
, y luego coloque lo siguiente en su ~/.gitconfig
controlado ~/.gitconfig
:
[include]
path = ~/.gitconfig.local
Esto le indicará a Git que trate cualquier cosa que encuentre en ~/.gitconfig.local
como si estuviera en ~/.gitconfig
. Sí, puede anular la configuración. No, no requiere que el archivo exista (Git ignorará silenciosamente la configuración si no hay ~/.gitconfig.local
).
Consulte aquí para obtener más información sobre [include]
.
Sigo esta estrategia en mis configuraciones para Emacs, Zsh, Git, Tmux, etc., de modo que sean personalizables sin la necesidad de modificar los archivos controlados por la versión. Para lograr esto, tengo init.local.el
, .zshrc.local
, .gitconfig.local
, .tmux.local.conf
, y así sucesivamente.
Específicamente, mantengo un repositorio git de mis archivos dotfiles. Recientemente comencé a trabajar en una nueva máquina y cloné mi repositorio en la misma.
Ahora, deseo hacer algunos cambios en mis archivos dotf específicos de este sistema. Estos cambios deseo ignorarlos en mi repositorio.
Otros cambios que haga, deben continuar siendo rastreados y comprometidos.
Por ejemplo, en mi .gitconfig, tengo una configuración como:
[push]
default = simple
Ahora, en mi nueva máquina, la versión de git es muy antigua. Todavía no es compatible con la configuración simple
para empujar. Entonces, me gustaría cambiar esto, pero solo localmente.
Sin embargo, si hago algún otro cambio en mi .gitconfig, me gustaría hacer un seguimiento de ellos. De todos modos, puedo lograr esto?
EDITAR:
Sé de git update-index --assume-unchanged
. El problema es que git ya no rastreará mi archivo hasta que lo revierte. Y luego, rastreará todos los cambios.
Deseo ignorar ciertos cambios y seguir el resto.
Como sugirió Peter, puede mantener esos cambios específicos de la máquina en una rama. Obviamente, tendrá que tener cuidado de separar estrictamente los cambios de los archivos específicos de la máquina de la "línea principal". Hay 2 formas de hacer esto:
- Continúe modificando la rama cada vez que cambie la línea principal (esta sería mi preferencia)
- Siga fusionando los cambios principales en la sucursal (pero obviamente nunca se fusione en la otra dirección)
Intenta usar este comando:
git update-index --assume-unchanged FILENAME_TO_IGNORE
Para revertirlo (si alguna vez desea confirmar cambios), use:
git update-index --no-assume-unchanged
ACTUALIZAR :
A continuación, le mostramos cómo hacer una lista de los archivos ''asumir sin cambios'' en el directorio actual:
git ls-files -v | grep -E "^[a-z]"
Como la opción -v
usará letras minúsculas para los archivos ''asumir sin cambios''.
No creo que haya un comando específico que ''desvele'' ciertos cambios en un archivo. Sin embargo, no hay ninguna razón por la que no pueda crear una sucursal local en la que pueda extraer los cambios de sus controles remotos, pero nunca devuelva ningún cambio.