Стаття з'явилася завдяки Flavio Wuensche

Чому саме так

  • Ніяких допоміжних інструментів

  • Не використовуються сімлінки

  • Усі зміни автоматично відслідковуються git-ом

  • Просто використовуйте інші бранчі, якщо у вас інші настройки у профілі чи ОС

  • Легко "поширити" якийсь файл на декілька конфігурацій

Попередження

Я вже був "обнулив" декілька раз свої настройки тільки тому, що виконав якусь команду git не подумавши, що саме вона зараз поміняє або видалить з комп'ютера. Особливість саме цього варіанту трекінгу файлів, що git сінхронізує або видаляє файли, щоб привести їх до відповілності з знімком. Тому будьте обережні, особливо при перших коммітах та пулах. I пам'ятайте - я вас попередив, тому вся відповідальність на Вас!

GO!

Якщо ви починаєте з нуля...

  • Додаємо нову git директорію, де будуть відслідковуватись ваші файли

    $ git init --bare $HOME/.dotfiles
  • Створюємо аліас dotfiles y .bash_aliases, що знадобиться нам далі

    alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
  • Git не повинен відслідковувати не індексовані файли

    $ dotfiles config --local status.showUntrackedFiles no

Використання

Взагалі, використання виглядає якось так

$ dotfiles status
$ dotfiles add .vimrc
$ dotfiles commit -m "Add vimrc"
$ dotfiles add .bashrc
$ dotfiles commit -m "Add bashrc"
$ dotfiles push

Чарівно, правда? Магія GIT!

Якщо треба відновити якусь конфігурацію

Git повинен бути встановлений

  • клонуємо репозиторій

    $ git clone --bare https://github.com/USERNAME/dotfiles.git $HOME/.dotfiles
  • Додаємо новий алиас до .bash_aliases

    alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
  • Вибираемо потрібний бранч

    $ dotfiles checkout LinuxOS
  • "Заливаємо" файли конфігураціі

    $ dotfiles pull

Ще раз, обережно з "тупим" копіюванням та виконанням git комманд у такій конфігураціі!!

Коли потрібна нова конфігурація

Взагалі, для мене це найвідповідальніший варіант. Коли наступає момент і ми розумієм, що потрібна нова конфігурація, ми вже маєм набор ключових конфігураційних файлів, яких нам не потрібно переписувати ни при яких обставинах. І, навіть більше, нам не потрібно ніякої історіі змін. Але ж ім'я, наприклад, .bashrc - це типове ім'я 90% конфігурацій. І ми ні в яякому разі, ні при яких розкладах не повинні нічого переписати. Я рекомендую наступне. Це може здатися overhead-ом, але я тепер роблю саме так.

  • Додаємо новий алиас до .bash_aliases

    alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
  • клонуємо репозиторій, але в іншу папку!

    $ git clone --bare https://github.com/USERNAME/dotfiles.git $HOME/.dotfiles_new
  • переходимо до директоріі

    $ cd ~/.dotfiles_new
  • Додаємо новий бранч взагалі без історіі

    $ git checkout --orphan new-config
  • Очищуємо індекс і "working tree" (Не обов'язково. Виходячи з конкретних обставин)

    $ git rm -rf .
  • додаємо пустий комміт

    $ git commit --allow-empty -m "Initial Commit"
  • Публікуємо новий бранч на git сервері

    $ git push
  • Тепер можем "запускати" dotfiles механизм

    $ cd ~
    $ mv ~/.dotfiles_new/.git ~/.dotfiles

Важливо! Ключ --git-dir повинен вказувати саме на .git фолдер

  • Git не повинен відслідковувати не індексовані файли

    $ dotfiles config --local status.showUntrackedFiles no

Далі, додаємо любі файли, що нам потрібні через аліас dotfiles, як завжди

Дякую, якщо дочитали цю статтю, і якщо вона здалася Вам корисною.