¿Cómo debo controlar la versión de mi perfil bash?

10

Así que me siento muy cómodo con el control de versiones, y solo pensé en comenzar a rastrear versiones de mi perfil de bash: ~/.bash_profilecon el beneficio adicional de poder compartir mis diversos alias y demás en GitHub.

Suponiendo que mi archivo .bash_profile necesita permanecer en mi directorio de inicio (no puedo envolverlo en un directorio para rastrearlo solo como un archivo normal), ¿cuál sería la mejor manera de hacerlo? No quiero inicializar un repositorio git en mi directorio de inicio, y tengo que ignorar cualquier otro archivo presente.

Entonces, ¿cuál podría ser una buena solución?

Supongo que podría hacer una copia de él en un directorio separado y actualizarlo / confirmarlo de vez en cuando, pero tengo curiosidad por saber si hay una buena manera de controlar la versión de un solo archivo en un directorio poblado.

elliotwhitehead
fuente
8
Los enlaces simbólicos son tus amigos.
Blrfl

Respuestas:

10

Afaik, normalmente hay dos formas de hacerlo: a) enlace simbólico b) script de sincronización. En ambos casos, debe crear otro repositorio (nómbrelo a dotfilecontinuación) para bash_profilecontrolar la versión.

Usa enlaces simbólicos

bash_profilese mueve a su versión controlada dir (que contiene .git), $HOME/.bash_profilees un enlace suave soft $HOME/dotfile/bash_profile.

$HOME/dotfile/bash_profilees donde bash_profilereside su actual , vea holman dotfile como un ejemplo.

Usar script de sincronización

bash_profilepermanece en su HOMEdirectorio, pero es solo una copia del 'último'. Lo último bash_profileaún vive $HOME/dotfile.

Sí, es un enfoque de copiar y pegar, es por eso que necesitas un poco syncing scriptpara salvarte del trabajo SECO . vea los archivos de puntos de Mathiasbynens como un buen ejemplo. Su syncing script https://github.com/mathiasbynens/dotfiles/blob/master/bootstrap.sh .

además

Como sospechas:

Tengo curiosidad por saber si hay una buena manera de controlar la versión de un solo archivo en un directorio poblado

El control de versiones de un solo archivo no tiene mucho sentido, copiar y pegar o simplemente colocarlo en algunas unidades en la nube le ahorra muchas molestias.

El punto real es que las cosas no se escalan esta manera, cuando el dotfilesen su $HOMEcrece, cuando se desea el control de versiones su favorito de configuración del editor de texto (por ejemplo vimrc), cuando se utiliza SSHpara el trabajo con la cáscara múltiples de forma remota, es posible que tenga zshrc, bashrc, fishrcetc.

Esto significa que a la larga es posible que desee controlar la versión de todos sus dotfilecorreos electrónicos. El archivo de puntos de Github es un buen punto de partida.

Xlee
fuente
1
¡No había oído hablar de enlaces simbólicos antes! Eso es exactamente lo que estaba buscando. ¡Gracias!
elliotwhitehead
Gracias por la respuesta muy útil. Aquí se pueden encontrar muchas otras buenas ideas para poner este y otros archivos de puntos en un repositorio: dotfiles.github.io
kevinmicke
@kevinmicke Me alegro de que ayude :)
Xlee
2

No quiero inicializar un repositorio git en mi directorio de inicio, y tengo que ignorar cualquier otro archivo presente.

Por qué no? Desea rastrear un archivo en su directorio de inicio, por lo tanto, su directorio de inicio también debe estar bajo control de versión.

Eso no significa que su directorio de inicio deba ser un repositorio git. Dejame explicar:

Los repositorios git constan de dos partes: un árbol de trabajo (a menos que sea un repositorio desnudo, por supuesto) y el .gitdirectorio "base de datos". Por lo general, el último es solo un subdirectorio (oculto) del primero, pero eso no es estrictamente necesario. git admite el uso de un árbol de trabajo separado . Por lo tanto, puede mantener su directorio de inicio bajo control de versiones, pero no es necesario que contenga un .gitdirectorio que pueda confundir las herramientas (vim, emacs, ...) o git.

Configuración:

cd ~
mkdir .dotfiles
cd .dotfiles
git init .

Ahora hay un ~/.dotfiles/.gitdirectorio. Use eso pero especifique el directorio de inicio como árbol de trabajo. Esto requiere una línea de comando bastante larga, por lo tanto, un alias es una buena idea:

alias dotfiles='git --git-dir ~/.dotfiles/.git --work-tree=$HOME'

Para usarlo solo use el alias anterior en lugar de git, por ejemplo dotfiles status.

Beneficios:

  • no se necesitan otras herramientas, solo git
  • no es posible el enlace simbólico / situaciones fuera de sincronización
  • los repositorios git en subdirectorios debajo de inicio no se ven afectados de ninguna manera

Obtuve esto de esta publicación de blog (que tiene algunas informaciones adicionales) y lo estoy usando sin ningún problema. Yo no, pero con una simple línea *en la .gitignoreque usted puede deshacerse de la posiblemente enorme cantidad de archivos sin seguimiento y protegerse a sí mismo un poco en contra de añadir archivos al repositorio que no están destinados a ser añadido.

Daniel Jour
fuente
¡Buen punto! Además, podría necesitar redefinir algunos alias git * existentes, supongo.
Xlee
1

Otra solución sería deportar su configuración específica (como establecer sus propios alias o definir sus propias funciones) a un archivo diferente que .bash_profile. De esta manera, solo su configuración específica será versionada y solo tendrá que obtenerla de su .bash_profile.

Hazlo manualmente

Digamos que este .bash_profilearchivo de extensión se nombra bash_profile_exty se incluye en el /path/to/bash/profile/ext/directorio:

Al final de su .bash_profilearchivo tendrá:

source /path/to/bash/profile/ext/bash_profile_ext

Y solo su /path/to/bash/profile/extdirectorio será versionado.

Hazlo usando una aplicación de terceros

Aún más simple (supongo :-)), estoy desarrollando shprofile que le ayuda a administrar su perfil de shell, al centrarse solo en la configuración específica de su perfil. shprofile le permite definir toda la configuración de su perfil específico en un solo directorio, que luego puede ser versionado. Tenga en cuenta que también puede administrar varios perfiles para el mismo usuario.

Nuevamente, no es necesario versionar toda su .bash_profileconfiguración, sino solo sus valores agregados.

Aurélien Bourdon
fuente
0

Para la gestión de la configuración de TI a nivel empresarial, muchos usan Puppet. Recomiendo Puppet a los clientes como una medida de contención de costos y confiabilidad. Aquí en el laboratorio, lo mantenemos simple.

Nuestro repositorio principal contiene los archivos necesarios para reconstruir completamente un sistema bloqueado o crear una nueva cuenta de usuario, y el control de versiones ha sido útil en varias ocasiones. Git está bien con archivos y directorios que comienzan con un punto siempre que git no esté configurado para ignorarlos.

Estas son rutas de repositorio para la instalación y configuración de sistemas y aplicaciones.

knowledge.resources / install.linux / std.fedora.dnf.sh (instalaciones dnf) knowledge.resources / install.linux / font.install.info.te (instalación de fuentes) knowledge.resources / install.linux / std.fedora. te (otra instalación y configuración)

Estos son archivos de configuración de usuario general.

startup / linux.basic.user / .bash_profile startup / linux.basic.user / .bashrc startup / linux.basic.user / .vimrc startup / linux.basic.user / .gitmessage startup / linux.basic.user / .gitconfig startup / linux.basic.user / use.ls.al.to.see.dot.files.here

Estos son para cuentas remotas en servidores.

startup / linux.remote / .bash_profile startup / linux.remote / .bashrc startup / linux.remote / .vimrc startup / linux.remote / .gitmessage startup / linux.remote / .gitconfig startup / linux.remote / use.ls. al.to.see.dot.files.here

Estos son para la cuenta raíz.

startup / linux.root / .bash_profile startup / linux.root / .bashrc startup / linux.root / .vimrc startup / linux.root / use.ls.al.to.see.dot.files.here

Utilizo archivos de tamaño cero llamados use.ls.al.to.see.dot.files.here para recordarme que el directorio solo PARECE vacío.

Douglas Daseeco
fuente