Как использовать 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:
он автоматически синхронизирует изменения в ваших 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
преимущества
- нет дополнительных инструментов
- нет ссылки
Более Подробная Информация
- источник:https://news.ycombinator.com/item?id=11071754
- статья с дополнительной информацией: https://developer.atlassian.com/blog/2016/02/best-way-to-store-dotfiles-git-bare-repo/