¿Cómo usar Github para administrar archivos de puntos?


Almacené mis archivos de puntos en github, con muchos dolores, debido a la falta de automatización. Tengo que actualizarlo yo mismo.

¿Hay alguna forma de instalar/actualizar/sincronizar automáticamente los archivos dotfiles? Quiero decir, en un servidor nuevo, descargo dotfiles y ejecutoun script install para copiar dotfiles al local. Después de algún tiempo, puedo ejecutar un script updateToRemote para enviar cambios locales al repositorio remoto, y en otro servidor, puedo ejecutar un script updateToLocal para enviar cambios remotos a local.

Algo así.

Author: nfpyfzyf, 2013-04-30

7 answers

La principal fuente de información sobre dotfiles es dotfiles.github.io.

Hace referencia a publicaciones de blog como Usando Git y Github para Administrar Sus Archivos de Puntos, basado en un método de enlace simbólico.

Para empezar, vamos a poner todos nuestros dotfiles en una carpeta llamada dotfiles, así: /home/smalleycreative/dotfiles/vimrc.
Luego, simplemente enlazaremos a ellos desde nuestro directorio personal.


Jaime menciona el tutorial de Atlassian " La mejor manera de almacena tus dotfiles: Un repositorio Git desnudo "

La técnica consiste en almacenar un repositorio Git bare en una carpeta "lateral" (como $HOME/.cfg o $HOME/.myconfig) utilizando un alias especialmente diseñado para que los comandos se ejecuten contra ese repositorio y no contra la carpeta local habitual .git/, lo que interferiría con cualquier otro repositorio Git alrededor.
(y luego la carpeta dotfiles se administra como un repositorio git)

 28
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-15 15:48:32

Las respuestas anteriores son excelentes y son exactamente cómo lo haría en "sistemas operativos reales".

Me encontré con un problema con esto en un conocido sistema operativo comercial que utiliza cygwin/msys por lo que el uso de enlaces simbólicos a veces puede ser problemático con los puertos "nativos" de algunos de mis programas favoritos.

Para solucionar esto experimenté con solo hacer que la carpeta HOME HOME sea un repositorio git directamente. Después de algunos fracasos me encontré con la clave es todo en el .archivo gitignore.

Así que la configuración He estado usando por un tiempo fue creado haciendo HOME HOME un repositorio, haciendo un .archivo gitignore, y añadiendo los archivos "dotfiles" requeridos individualmente. También agregué un repositorio en una unidad de copia de seguridad (z: en este caso) como upstream solo para obtener las copias de seguridad automáticas. Si su carpeta ya está respaldada, agregar un upstream es una complicación innecesaria. Por lo tanto, asumiendo "/z/Backups/Dotfiles.git " es un repositorio "desnudo" preexistente, en msys shell, los pasos para configurar las cosas son:

$ cd $HOME
$ git init
Initialised empty Git repository in $HOME
$ git add .bashrc .emacs .gitconfig # for example
$ git commit -m "Initial import of dotfiles"
[master (root-commit) xxxxxxxx] Initial import for dotfiles
 3 files changed, xxx instertions(+)
 create mode 100644 .bashrc
 create mode 100644 .emacs
 create mode 100644 .gitconfig

# The following two lines just add an "upstream" purely for backup purposes.
$ git remote add origin /z/Backups/Dotfiles.git
$ git push -u origin master
<< snip >>

A continuación pongo lo siguiente en HOME HOME/.gitignore:

# First exclude everything.
*
# then re-include all "dotfiles"
!/.*
# then a bunch of specific excludes as they are more-or-less "cache" data rather than configuration.
/.bash_history
/.dbus-keyrings/
/.emacs.d/
/.gimp-2.8/
/.git/
/.gitk
/.idlerc/
/.lesshst
/.saves/
/.thumbnails/

Finalmente los siguientes comandos (disculpas no capturé la salida de estos) agregan el .gitignore al repositorio:

$ cd $HOME
$ git add .gitignore
$ git commit -m "Added some rules so git status on the dotfiles is useful."
$ git push

Ahora cualquier archivo "normal" que añadas a tu directorio de inicio es ignorado por el repositorio dotfiles, pero cualquier archivo dotfiles nuevo aparece en el estado de git, por ejemplo:

$ cd $HOME
$ touch NewFile.txt
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean

$ touch .funkychicken
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .funkychicken

nothing added to commit but untracked files present (use "git add" to track)

Hasta ahora esto ha estado funcionando bien, incluso con algunos subdirs siendo su propio repositorio git (no relacionado). A veces hay "peculiaridades" con subdirs que no son de git, pero hasta ahora nada problemático.

 5
Author: user6092647,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-11 03:31:07

Bien, tres años después, nadie ha llegado con algo grande, así que tomó una puñalada en este problema. Es independiente de la plataforma y del shell sin dependencias distintas del shell compatible con bourne que tiene disponible (bash, zsh, ksh, etc.). Funciona en mac, linux y windows:

Dotsys

Sincronizará automáticamente los cambios en sus archivos de puntos con github y varias máquinas, junto con muchas otras características.

 3
Author: arctelix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-05 17:41:49

Estoy usando el repositorio git (github) y el script bash para crear enlaces simbólicos. Pero ahora encontré esta herramienta que parece ser más poderosa. Compruébelo: https://github.com/shanx/python-dotfiles .

 1
Author: Marek Fajkus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-04 20:56:29

Actualizas/sincronizas tus dotfiles con comandos git push/pull (GitHub actúa como repositorio 'central'). Cuando se trata de enlaces simbólicos dotfiles escribí un artículo al respecto. Échale un vistazo: administra tus dotfiles con facilidad.

 0
Author: Gee-Bee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-19 13:41:34

La idea principal es tener un directorio separado (normalmente llamado .dotfiles) con todos los dotfiles reales que desea mantener un seguimiento en git y tener enlaces simbólicos en el directorio home.

Ya hay mucho trabajo hecho para este enfoque, así que le recomendaré que verifique DFM (dotfiles manager):

 0
Author: Vicente Adolfo Bolea Sánchez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-13 16:04:32

Encontré una forma interesante de usar git simple para administrar tus archivos de puntos, no se necesitan enlaces simbólicos. De esta manera, usted debe ser capaz de hacer empujar y tirar de la manera habitual:

Configuración

git init --bare $HOME/.myconf
alias config='/usr/bin/git --git-dir=$HOME/.myconf/ --work-tree=$HOME'
config config status.showUntrackedFiles no

Donde mi ~/.el directorio myconf es un repositorio git bare.

Uso

Los comandos habituales de git se pueden usar con el alias de git, por ejemplo, config o lo que usted elija.

config status
config add .vimrc
config commit -m "Add vimrc"
config push

Beneficios

  • Sin herramientas adicionales
  • no enlaces simbólicos

Más información

 0
Author: lorey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-01 23:13:21