No se puede enlazar con fuerza el file gitconfig

Estoy intentando crear un repository git para almacenar todos mis files dotfiles y config. Mi idea era simplemente crear enlaces duros a todos los files que me importaban y almacenar esos enlaces en su propio directory que podría convertir en un repository.

Sin embargo, me he topado un poco con mi file ~ / .gitconfig. Parece que cada vez que ejecuto el command 'git config' el enlace que creé ya no apunta a la location correcta, por ejemplo, el file en el repository ya no se actualiza correctamente.

Aquí hay un ejemplo que usa el shell y el Ruby interactivo para determinar el estado vinculado de los files.

# Create the link $ ln .gitconfig .conf_files/gitconfig # Create the link # The files are in fact linked [1] pry(main)> File.identical?('.gitconfig', '.conf_files/gitconfig') => true # Update the gitconfig file by running a 'git config' command $ git config --global alias.last 'log -1 HEAD' # The files are no longer linked. [2] pry(main)> File.identical?('.gitconfig', '.conf_files/gitconfig') => false 

Supongo que esto tiene algo que ver con la forma en que git está escribiendo el file .gitconfig. ¿Alguien sabe por qué sucedería esto, o tiene alguna idea creativa para una solución alternativa?

Pruebe la solución de Eli Barzilay en su comentario en http://www.xxeo.com/archives/2010/02/16/dotfiles-in-git-finally-did-it.html :

Así que finalmente encontré una solución que toma lo mejor de ambas: coloque el repository en un subdirectory, y en lugar de enlaces simbólicos, agregue una opción de configuration para que "core.worktree" sea su directory de inicio. Ahora cuando estás en el directory de inicio no estás en un repository git (así que el primer problema se ha ido), y no necesitas tratar con enlaces simbólicos frágiles como en el segundo caso. Aún tiene la menor molestia de excluir routes que no quiere versionar (por ejemplo, el "*" en el truco ".git / info / exclude"), pero eso no es nuevo.

Esto es completamente normal y, de hecho, es la forma recomendada de sobrescribir los files de configuration. Git crea un file temporal, escribe la configuration y luego mueve el nuevo file sobre el anterior. De esta forma, no se obtiene un file de configuration incompleto (pérdida de datos) si Git se interrumpe.

Siempre puede escribir un script para copyr o vincular sus files de configuration en su repository central.

Verifique esta respuesta, quizás pueda ser de ayuda:

http://sofes.miximages.com/a/3731139/1431696

Mientras tanto, ¿has considerado hacer los enlaces al revés? Cree su repository lleno de files de configuration, etc., y luego, en el lugar donde realmente usa sus files, cree un enlace rígido al file 'real', que se encuentra en el repository.

Gracias a la respuesta y al consejo de Dietrich Epp, he decidido abordar este problema desde un ángulo diferente creando el repository en la raíz de mi sistema de files y usando .gitignore para rastrear solo los files que me interesan.

Mi file .gitignore ahora se ve así:

 /* !/etc/ /etc/* # etc files !/etc/rc.conf !/etc/asound.conf !/etc/mercurial/ !/home/ !/home/matt/ /home/matt/* # Home files !/home/matt/.xinitrc !/home/matt/.gitconfig !/home/matt/.bashrc # Vim files !/home/matt/.vimrc !/home/matt/.vim/ .netrwhist 

Además de no tener que copyr los files por separado y mantenerlos en dos ubicaciones separadas, esto tiene el beneficio que, de ser necesario, puedo revertir fácilmente los cambios sin tener que copyr también los files manualmente.

¡Gracias por la ayuda chicos!