2013-04-30 13 views
22

Ho archiviato i miei file dot in github, con molti problemi, a causa dell'assenza di automazione. Devo aggiornarlo da solo.Come utilizzare Github per gestire i dotfile?

C'è un modo che può installare/aggiornare/sincronizzare i dotfile? Intendo in un server nuovo, scarico i dotfiles ed eseguo uno script install per copiare i dotfile su locale. Dopo qualche tempo, posso eseguire uno script updateToRemote per inviare modifiche locali al repository remoto e su un altro server, posso eseguire uno script updateToLocal per trasferire le modifiche remote su locale.

Qualcosa del genere.

risposta

26

La principale fonte di informazioni sui dotfile è dotfiles.github.io.

Fa riferimento a post di blog come Using Git and Github to Manage Your Dotfiles, in base a un metodo di collegamento simbolico.

Per cominciare, ci metteremo tutte le nostre dotfile in una cartella chiamata dotfile, in questo modo: /home/smalleycreative/dotfiles/vimrc.
Quindi, ci collegheremo semplicemente a loro dalla nostra home directory.


Jaime menziona l'Atlassian esercitazione "The best way to store your dotfiles: A bare Git repository"

La tecnica consiste nel memorizzare un repository nudo Git in una cartella "laterale" (come $HOME/.cfg o $HOME/.myconfig) utilizzando un alias appositamente predisposte così i comandi vengono eseguiti su quel repository e non sulla solita cartella locale .git/, che interferirebbe con qualsiasi altro repository Git in giro.
(e quindi la cartella dotfile è gestito come un repo git)

+0

Esiste una soluzione nota per sincronizzare automaticamente i dotfile non appena viene apportata una modifica, come se i dotfile fossero file condivisi nel cloud? Non mi piace spingere e tirare i cambiamenti ogni volta che cambio i dispositivi. Potrei implementare il mio ma solo se non esiste già nulla di simile. – ElefEnt

+0

@ElefEnt la maggior parte delle soluzioni di cui sono a conoscenza sono elencate su https://dotfiles.github.io/. Alcuni di essi includono uno script rsync. Hai altre discussioni su quell'argomento su https://www.reddit.com/r/linux/comments/ctlp3/methods_for_keeping_dotfiles_in_sync_across/ – VonC

+0

Atlassian ha un tutorial su [utilizzando un albero di lavoro git invece di symlink] (https: // developer .atlassian.com/blog/2016/02/best-way-to-store-dotfile-git-bare-repo /). – Jaime

1

sto usando repository git (github) e script bash per la creazione di link simbolici. Ma ora ho trovato questo strumento che sembra essere più potente. Dateci un'occhiata: https://github.com/shanx/python-dotfiles.

0

Si aggiorna/sincronizza i file con i comandi git push/pull (GitHub funge da repository "centrale"). Per quanto riguarda i dotfili di symlinking, ho scritto un articolo a riguardo. Scoprilo: manage your dotfiles with ease.

0

L'idea principale è avere una directory separata (di solito denominata .dotfiles) con tutti i dotfile reali che si desidera tenere traccia in git e con collegamenti simbolici nella home directory.

C'è già un sacco di lavoro svolto per questo approccio quindi vi consigliamo di controllare DFM (dotfile manager):

  • Ecco la mia selezione dotfiles usando DFM (si può considerare un esempio): vicente's dotfiles
  • Github repository ufficiale DFM site
5

Le risposte di cui sopra sono eccellenti e sono esattamente come lo farei su "sistemi operativi" reale.

mi sono imbattuto in un problema con questo su un sistema operativo commerciale noto all'utilizzo di Cygwin/msys per cui utilizzando link simbolici a volte può essere problematico con le porte "native" di alcuni dei miei software preferito.

Per risolvere il problema, ho provato a creare la cartella $ HOME come repository git direttamente. Dopo alcuni fallimenti, ho trovato che la chiave è tutto nel file .gitignore.

Così l'installazione che ho usato per un po 'è stata creata rendendo $ HOME un repository, creando un file .gitignore e aggiungendo i file "dotfile" richiesti singolarmente. Ho anche aggiunto un repository su un'unità di backup (z: in questo caso) come upstream solo per ottenere i backup automatici. Se la cartella è già stata sottoposta a backup, aggiungere un upstream è una complicazione inutile. Quindi, supponendo che "/z/Backups/Dotfiles.git" è un pre-esistente repository "a nudo", in MSYS shell, i passaggi per impostare le cose sono:

$ 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>> 

Poi ho messo il seguente in $ 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/ 

Infine i seguenti comandi (scuse non ho catturare l'output di questi) aggiungere il .gitignore sé al repository:

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

Ora tutti i file "normali" si aggiungi alla tua home directory viene ignorata b y la dotfile pronti contro termine, ma tutti i nuovi dotfile visualizzati in git stato ad es .:

$ 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) 

Finora questo ha funzionato bene, anche con qualche subdirs essere il loro (indipendente) repository git. A volte ci sono "stranezze" con sottodiretti non-git, ma finora nulla di problematico.

0

Ho trovato un modo interessante per utilizzare git semplice per gestire i dotfile, senza collegamenti simbolici necessari. In questo modo, si dovrebbe essere in grado di fare tira e molla solito modo:

Setup

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

dove la mia directory ~/.myconf è un git repository nudo.

Uso

I normali comandi git può quindi essere utilizzato con l'alias git, ad esempio config o qualunque cosa tu scelga.

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

Vantaggi

  • No utensili supplementari
  • nessun link simbolici

Maggiori informazioni

3

Beh, è ​​tre anni più tardi e nessuno è venuto in mente nulla grande così ho preso una pugnalata a questo problema. È indipendente dalla piattaforma agnostica e shell indipendente da dipendenze diverse dalla shell compatibile Bourne che hai a disposizione (bash, zsh, ksh, ecc.). Funziona su Mac, Linux, & finestre:

dotsys

Si sincronizza automaticamente le modifiche ai dotfile con github e più macchine, insieme a molte altre caratteristiche.

Problemi correlati