Подтвердить что ты не робот

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

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

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

Что-то вроде этого.

4b9b3361

Ответ 1

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

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

Для начала хорошо разместите все наши dotfiles в папке с именем dotfiles, например: /home/smalleycreative/dotfiles/vimrc.
Тогда, просто попробуйте символическую ссылку на них из нашего домашнего каталога.


Jaime упоминает атласский учебник " Лучший способ хранения ваших dotfiles: A голый репозиторий Git

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

Ответ 2

Вышеуказанные ответы являются отличными и точно так же я буду делать это на "реальных операционных системах".

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

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

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

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

Наконец, следующие команды (извинения, которые я не использовал для вывода из них) добавили сам .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. Иногда есть "причуды" с не-w23 > субдирами, но пока ничего не проблематично.

Ответ 3

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

dotsys

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Настройка

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

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

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

Дополнительная информация