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.
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
@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
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