Como muchas personas, administro muchos de mis archivos de puntos a través de un repositorio de control de versiones (Mercurial en Bitbucket, privado, en mi caso). Esto es útil cuando se configura una nueva máquina o se propagan configuraciones entre diferentes máquinas.
Así que, naturalmente, agregué mi .emacs
y .emacs.d
a esta configuración.
Luego instalé algunos paquetes y terminé agregando *.elc
a mi .hgignore
, al igual que omito *.pyc
archivos de mis repositorios de Python.
¿Hay otras cosas que no debería rastrear, por ejemplo, archivos generados que son específicos del entorno y que no serán útiles / correctos cuando se clonen a otra plataforma? (Uso Linux y OS X en el escritorio y FreeBSD en el servidor).
¿Hay algún truco de configuración que se use comúnmente para hacer que este tipo de intercambio sea más valioso? Con la configuración de mi archivo de shell, todavía estoy buscando buenas formas de seleccionar archivos individuales a través de ramas, por ejemplo.
fuente
*.elc
. stackoverflow.com/a/24539894/324105Respuestas:
Almaceno mi configuración de Emacs en Github porque uso dos computadoras diferentes, una en el trabajo y otra en casa.
Aquí hay una lista de cosas que no pongo en el control de código fuente:
Entornos de configuraciones especificadas.
Por ejemplo, mis Emacs abren diferentes archivos de organización al inicio en diferentes máquinas. No desea comprometer esta configuración en el control de origen.
Yo uso
(require 'local nil t)
para cargar estas configuraciones, pero nunca me comprometolocal.el
.Paquetes gestionados por el administrador de paquetes
Cuando los paquetes son administrados por el administrador de paquetes, sugiero no poner esos paquetes en control de origen. Porque :
En lugar de confirmar paquetes, le sugiero que confirme el mecanismo reconocido por su administrador de paquetes.
Por ejemplo, uso Cask para administrar mis paquetes 3, así que solo confirmo el archivo cask, que contiene los paquetes especificados que quiero.
Cuando lo uso
package.el
antes, mi configuración verificará si el paquete está instalado / necesita actualizarse, por lo que no se confirma ningún paquete.Sin embargo , hay algunos paquetes que no existen en ningún repositorio de paquetes, en este caso, lo comprometeré con el control de origen, como en
site-lisp
.Todos los archivos generados por paquetes
Por ejemplo, toda la copia de seguridad automática, los archivos de copia de seguridad,
tramp
,eshell
,recentf
, inclusocustom.el
. Puse estos archivos en~/.emacs/.gen
, por lo que puedo ignorar este directorio.Archivos que cambian con frecuencia pero que deben sincronizarse
Como el archivo de diccionario personal utilizado por
aspell
, la base de datos de archivos utilizada porelfeed
, en este caso, uso Dropbox para sincronizarlo en diferentes computadoras. Entonces no me olvidaré de comprometerme.fuente
prelude-require-packages
función funciona como el Cask de un pobre (con la ventaja de trabajar también con Windows).package-install
mencionado en emacs.stackexchange.com/a/410/184 también puede ser útil.custom.el
control de la fuente.Solo asegúrese de que no haya cosas generadas (como @ rangi-lin notes) en el repositorio y, si está compartiendo sus archivos de puntos con otros, no hay cosas de seguridad relacionadas (como contraseñas y claves API). Para más adelante, he dividido mis personalizaciones en un archivo separado con:
Ocasionalmente muevo personalizaciones "seguras" a una gran
setq
declaración antes del fragmento de arriba.Mi archivo .gitignore se ve así:
fuente
tl; dr
.emacs.d/init.el
lugar de.emacs
.gitignore
lista blanca.emacs.d / init.el
Lo uso en
.emacs.d/init.el
lugar de.emacs
ya que esta configuración me permite ponerlo.emacs.d
bajo git. Tener~/.emacs
te hace crear un enlace simbólico al repositorio de git o tener un repositorio de git en tu directorio de inicio. Si lo usas.emacs.d
, todo está resuelto..gitignore
Mi .gitignore es una lista blanca en lugar de la lista negra predeterminada.
Esta configuración le permite concentrarse en lo que realmente necesita en lugar de lo que no necesita.
.emacs.d
no es como el repositorio de código fuente, lo que significa que no solo reside su código sino que también todos los demás archivos generados automáticamente o temporales van allí. Realmente no sabes lo que pasará. Entonces, " ignora todo de manera predeterminada y agrega los archivos que te interesan " es una mejor estrategia, en mi opinión.Por cierto, mantengo la mayor parte de la configuración en
init.el
, en lugar de usar el esquema de varios archivos. La razón es que un archivo grande me permite a) usar herramientas estándar comooccur
oisearch-forward
moverme a la configuración que quiero, b) usar looutshine
que hace que miinit.el
org-cycle
-able, c) no cambie mi.gitignore
todo el tiempo.Gerente de empaquetación
A menos que tenga necesidades especiales para sincronizar la versión de Emacs y / o la versión de paquetes en todo su sistema, no coloque los paquetes en git.
Package.el
está bien.use-package
También está bien. Barril es agradable. Elija su administrador de paquetes y confirme solo su archivo de configuración, pero no el paquete en sí.es decir. Una de las necesidades especiales en las que puedo pensar sería tener dos sistemas, un desarrollo y una implementación, y deben tener exactamente la misma configuración de Emacs.
fuente
init.el
archivo funciona siempre que ese archivo no sea demasiado grande. Emacs no es bueno en el manejo de archivos grandes, y después de un tiempo simplemente comienza a gatear cuando edita un archivo grandeinit.el
. Otra ventaja de dividir su configuración en varios archivos es que funcionan mejor con git, que en ciertas situaciones puede considerar los cambios en un solo archivo como un conflicto de fusión, pero no es así si los cambios están en archivos separados. Finalmente, es mucho más fácil comentar solo las necesidades individuales que grandes porciones de su archivo de inicio.Tengo las siguientes cosas en mi .hgignore
Si desea compartir su init con otros, puede considerar eliminar cualquier archivo de historial como el creado por el modo savehist. Aparte de eso, no creo que haya ningún truco especial para esto. Todas las pautas que siga para los proyectos de código de versiones funcionan bien aquí también.
fuente
Con el tiempo, los paquetes agregan muchas cosas
~/.emacs
y termino agregándolas una por una a mi.gitignore
. También tengo unoprivate.el
que contiene contraseñas, código específico de la máquina, etc., que no rastreé.Esto es lo que tengo ahora.
fuente
Depende de los paquetes / características que utilice, por lo que puede ser complicado. Además de los archivos mencionados por Vamsi, por ejemplo, si usa dired-immage, crea un directorio allí para almacenar en miniatura las miniaturas. Probablemente quiera ignorar los archivos .elc también.
fuente
Publico mi .emacs.d, pero uso un subrepo con los cambios privados (contraseñas y demás). Para permitir que otros lo clonen, la rama predeterminada apunta a un subrepo de marcador de posición, y cada máquina tiene su propia rama con nombre.
Al fusionar entre máquinas, primero
graft
los nuevos cambios en ladefault
rama y luego fusiono ladefault
rama con las otras ramas del lugar de trabajo.Como ejemplo, puede encontrar mi .emacs.d en bitbucket , incluido un archivo Léame con una breve guía de uso.
Es posible que desee agregar el controlador de combinación del modo org a esta configuración.
fuente
Después de varias iteraciones, he determinado que, si bien el control de versiones es excelente para compartir código y rastrear cambios, no es una excelente solución para sincronizar una configuración que cambia rápidamente en las computadoras. La razón es que hay muchas cosas que deberían sincronizarse y no deberían estar en el control de versiones. Algunos ejemplos:
.elc
archivos (recompilarlos cuando hay un cambio de configuración es una molestia importante, y los errores de loselc
archivos obsoletos a menudo son difíciles de depurar).elpa
directorio (y hasta que la fijación de versiones se vuelva estándar, la reconstrucción automática simplemente no es lo suficientemente confiable).eshell
historial ygnus
archivos.(Tenga en cuenta que los problemas multiplataforma no están en la lista; debería estar perfectamente bien tener una configuración que funcione en múltiples sistemas operativos). En lugar de usar git como una solución de sincronización, lo uso únicamente como una solución de seguimiento de código y sincronizar usando Dropbox. De esa forma, se ocupan todos los archivos molestos que no deberían estar en el control de versiones.
Yo no , sin embargo, tienen el objetivo de tener la configuración de mi ser reparables de la fuente si mi configuración de Dropbox desaparece por cualquier razón, así que mantener un registro de todos los paquetes instalados y otras cosas en la fuente. Mi información privada también se almacena en un submódulo git. Pero para la sincronización diaria, git simplemente no es una gran solución.
fuente