Как использовать Github для управления dotfiles?

Я сохранил свои dotfiles в github, с большим количеством боли, из-за отсутствия автоматизации. Я должен обновить его сам.

есть ли способ автоматической установки/обновления / синхронизации dotfiles? Я имею в виду, что на новом сервере я загружаю dotfiles и exec a install скрипт для копирования dotfiles в local. Через некоторое время я могу exec updateToRemote скрипт для перемещения локальных изменений в удаленное РЕПО, а на другом сервере я могу выполнить updateToLocal скрипт для извлечения удаленных изменений в local.

что-то в этом роде.

7 ответов


основным источником информации о dotfiles составляет dotfiles.github.io.

Он ссылается на сообщения в блоге, такие как использование Git и Github для управления Dotfiles, на основе метода символической ссылки.

для начала мы поместим все наши dotfiles в папку под названием dotfiles, например:/home/smalleycreative/dotfiles/vimrc.
Затем, мы просто symlink к ним из нашего домашнего каталога.


Хайме упоминает учебник Atlassian"лучший способ сохранить ваши dotfiles: голый репозиторий Git"

техника заключается в хранении голого репозитория Git в" боковой " папке (например,$HOME/.cfg или $HOME/.myconfig) используя специально созданный псевдоним, чтобы команды запускались против этого репозитория, а не обычного .git/ локальная папка, которая будет мешать любым другим репозиториям Git.
(и тогда папка dotfiles управляется как РЕПО git)


приведенные выше ответы превосходны и именно так, как я бы сделал это на "реальных операционных системах".

я столкнулся с проблемой с этим на известной коммерческой ОС, используя cygwin / msys, в результате чего использование символических ссылок иногда может быть проблематичным с" родными " портами некоторых из моих любимых программ.

чтобы обойти это, я экспериментировал с тем, чтобы папка $HOME была репозиторием git напрямую. После некоторых неудач я обнаружил, что ключ все в том .гитюдного файл.

так, Настройки я через некоторое время был создан составив $дом хранилища, делая .файл gitignore и добавление необходимых файлов "dotfiles" по отдельности. Я также добавил репозиторий на резервном диске (z: в этом случае) в качестве восходящего потока, чтобы получить автоматическое резервное копирование. Если вы уже создали резервную копию папки, добавление вверх по течению является ненужным усложнением. Итак, предполагая "/z / Backups / Dotfiles.git "- это уже существующий" голый " репозиторий, в msys shell, шаги к настроить вещи:

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

далее я помещаю следующее в $HOME/.пример:

# 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/

наконец, следующие команды (извинения, что я не захватил вывод из них) добавляют .gitignore сам в хранилище:

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

теперь любые "нормальные" файлы, которые вы добавляете в свой домашний каталог, игнорируются РЕПО dotfiles, но любые новые dotfiles отображаются в статусе git, например:

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

до сих пор это работает хорошо, даже с некоторым подкаталоги быть их собственный (несвязанный) репозиторий git. Иногда бывают "закидоны" с ГИТ подкаталоги, но пока ничего не проблематично.


Ну, это три года спустя, и никто не придумал ничего, поэтому я принял удар на эту проблему. Это платформа агностическая и оболочка агностическая без каких-либо зависимостей, кроме совместимой оболочки bourne, которую вы имеете в наличии(bash, zsh, ksh и т. д.). Он работает на mac, linux и windows:

dotsys

он автоматически синхронизирует изменения в ваших dotfiles с github и несколькими машинами, а также многими другими функциями.


Я использую репозиторий git (github) и скрипт bash для создания символических ссылок. Но теперь я нашел этот инструмент, который, кажется, более мощный. Проверить его: https://github.com/shanx/python-dotfiles.


вы обновляете / синхронизируете свои dotfiles с git push/pull команды (GitHub, действующий как "центральный" репозиторий). Когда дело доходит до symlinking dotfiles, я написал об этом статью. Проверьте это: управление dotfiles с легкостью.


основная идея состоит в том, чтобы иметь отдельный каталог (обычно называемый .dotfiles) со всеми реальными dotfiles, которые вы хотите отслеживать в Git и имеющие символические ссылки в домашнем каталоге.

для этого подхода уже проделана большая работа, поэтому я рекомендую вам проверить DFM (диспетчер dotfiles):

  • вот мой выбор dotfiles с помощью dfm (вы можете рассмотреть его в качестве примера):Висенте dotfiles
  • Github официальный репозиторий сайт DFM

Я нашел интересный способ использовать простой git для управления вашими dotfiles, никаких символических ссылок не требуется. Таким образом, вы должны иметь возможность делать толчок и тянуть обычным способом:

настройка

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

где мой ~/.каталог myconf-это голый репозиторий git.

использование

обычные команды git могут использоваться с псевдонимом git, например config или что угодно выбирать.

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

преимущества

  • нет дополнительных инструментов
  • нет ссылки

Более Подробная Информация