¿Cómo anular localmente un file de configuration controlado por versión de una manera que no sea increíblemente confusa?

Aquí está mi último headscratcher:

~/.gitconfig mi configuration de git global ~/.gitconfig en un repository de files duales. Mi repository real se llama vim-config , y creo que puede continuar siendo nombrado así porque el .vimrc es, con mucho, la pieza central de este repository.

En cualquier caso, el punto es que cuando configuro un nuevo entorno de desarrollo para mí haré algo similar a esto:

 git clone git@github.com:unphased/vim-config ~/.vim ln -s ~/.vim/.gitconfig .gitconfig 

Puedo empezar a usar git desde mi nuevo entorno.

Pero ahora quiero agregar algo nuevo: quiero cambiar mi nombre para cada uno de mis dispositivos, de modo que a partir de ahora, cuando miro en mis loggings de commit de git, quiero poder decir que hice algunos commits desde mi MacBook, o desde mi iPhone, o desde mi CentOS 7 VM comencé a mediados de enero o desde Centos 6.4 VM desde hace un time, o incluso si hice la confirmación mientras estaba SSHd en mi MacBook desde mi escritorio con Windows 7 , o, diablos, voy a ir por todas partes … para labelr commits con coorderadas lat / long. Todo en la búsqueda desesperada de agregar información que de alguna manera podría ayudarme a recordar qué demonios estaba haciendo cuando busco el código de meses en el futuro.

Los últimos tienen desafíos por separado que averiguaré más tarde (para ver si puedo hacer que mi cadena de nombre de git sea condicional en function de una variable de entorno, puedo llamar fácilmente a git config etc. y escribir esto con mis configuraciones de inicio de session de shell), pero hay un problema mayor que obstaculiza mi diferenciación de estas configuraciones.

Me obliga a crear una twig para cada uno de mis entornos, de modo que no pueda realizar cambios en mi repository sin intercambiar twigs dos veces, y posiblemente haciendo una fusión git todo el time. Tengo que crear un macbook sucursal y en esta twig cambiar mi nombre en mi .gitconfig por Steven Lu [rMBP] y así sucesivamente.

El punto es que debo dejar cada uno de mis entornos revisados ​​en sus respectivas sucursales para que mantengan nombres únicos.

Y dado que no quiero extender el rest del contenido real en mi repository, tengo que hacer constantemente git merges. Estoy pensando en ello y no es necesario fusionar los cambios con el maestro y fusionarlos con todos los demás, pero aún así se requiere la fusión (en lugar de un alias gl="git pull" despreocupado alias gl="git pull" ) prácticamente todo el time.

Entonces la pregunta es … ¿Git proporciona algún método para anular temporalmente la configuration global? Es razonable que esto se pueda hacer sobre una base de repository por clonación, pero eso no es satisfactorio, es demasiada contabilidad para que valga la pena. Así que necesito algún tipo de anulación de configuration de git por separado pero aún global.

Sé de más soluciones potenciales. Hay una manera de decirle a git que ignore los cambios realizados en un file que está registrado. git update-index --assume-unchanged . Esto podría funcionar. Lo que no me gusta de esto es que tengo que recordar que tengo que tener mucho cuidado al editar mi configuration de git, porque git solo ignorará los cambios realizados. Pero esto me permite no tener que crear nuevas twigs y hacer ninguna de las tonterías de fusión.

Entonces … ¿hay otra opción por ahí?

Esta respuesta resume muy bien los matices entre las opciones disponibles para instruir a git para que ignore selectivamente ciertos files.

Probablemente no sea realist para mí esperar encontrar algo más útil para la situación que he descrito.

Para mejorar aún más la usabilidad, este es un extracto de mi .gitconfig (¡de todos los files!)

 [alias] ignore = update-index --skip-worktree unignore = update-index --no-skip-worktree ignonetworking = !git ls-files -v | grep "^S" status-with-ignonetworking = "!f() { ignonetworking=$(git ignonetworking); git status; [ -n \"$ignonetworking\" ] && echo \"git skip-worktree:\n$ignonetworking\"; };f" 

(Uso alias de shell para activar mis alias de git …)