Синхронизирайте вашите dotfiles и конфигурации с Git на всяка система

  • Централизирането на dotfiles в едно или повече Git хранилища ви позволява бързо да клонирате средата си към нови машини, включително конфигурации на обвивката, редактори и инструменти за разработка.
  • Има два основни подхода: хранилища със символни връзки и методът на голо хранилище в директорията HOME, който избягва преместването на файлове и опростява версиите.
  • Синхронизацията може да бъде разширена до програми и услуги чрез списъци с пакети, инсталационни скриптове и поддръжка за мениджъри на пакети като apt, brew, winget, pip, npm или snap.
  • Сигурността е от решаващо значение: препоръчително е да се използват частни хранилища, да се управляват тайните в криптирана форма и да се адаптират конфигурациите към всяка система (Linux, macOS, Windows или Codespaces).

Синхронизирайте вашите dotfiles и конфигурации на Windows, използвайки Git хранилища

Ако работите ежедневно с няколко машини или често преинсталирате системата сиВероятно сте се сблъсквали с една и съща история хиляди пъти: инсталиране на програми, настройване на терминала, конфигуриране на редактора, клавишни комбинации (например, използване на преки пътища с AutoHotkey), клавишите, подканата… и повтарянето му отново и отново. Това е истинска мъка, а освен това е лесно да се загубят малки детайли за конфигурацията, които са правили средата ви особено удобна сред толкова много преинсталации.

Съвременният подход за избягване на това главоболие е да се централизират вашите dot файлове и конфигурации. в едно или повече Git хранилища. По този начин можете да клонирате средата си на всяка машина (Linux, macOS и дори Windows, с някои нюанси) и да прилагате най-добрите практики, за да я защитите, както е обяснено в ръководствата за Поддържайте Windows 11 защитенВерсиониране на всяка промяна и автоматизиране на голяма част от инсталирането на програми и услуги. В тази статия ще разгледаме доста задълбочено как работи всичко това, какви методи съществуват, какви инструменти можете да използвате и как да го комбинирате с инсталиране на софтуер и управление на тайни.

Какво точно представляват dotfiles и каква роля играе Windows в тях?

Традиционно наричаме скритите файлове и папки, които започват с точка, „dotfiles“. на Unix-подобни системи: Linux, macOS и BSD. Класически примери са .bashrc, .zshrc, .vimrc, .gitconfig, .nanorc или директории като ~/.config/nvimТе съхраняват конфигурацията на обвивки, редактори, конзолни инструменти, имейл клиенти, мениджъри на пакети и много други.

В Windows концепцията не е съвсем същата, но идеята е.Имате конфигурационни файлове, разпръснати навсякъде %USERPROFILE%, AppDataVS Code файлове, Git конфигурации, PowerShell скриптове, WSL настройки… Въпреки че не започват с точка, можете да ги третирате като „dotfiles“ за практически цели и да ги версионирате точно както бихте направили в Linux.

Номерът е да мислите за средата си като за набор от преносими конфигурации.Част от него се намира във файлове (които могат да бъдат добавени към Git хранилище), част в инсталирани програми и част в тайни (ключове, токени, пароли), които не бива да качвате некриптирани. Имайки това предвид, Git се превръща в централния компонент за синхронизиране на всичко, което не е строго зависимо от хардуера или вашата конкретна операционна система.

Защо си струва да синхронизирате вашите dotfiles

Синхронизирането на dotfiles има смисъл, след като се преместите от един „основен“ компютър.Ако използвате два лаптопа, няколко сървъра или комбинирате Mac, Linux и Windows машина, наличието на една и съща позната среда във всички тях спестява много време и намалява неудобството при смяната на машини.

Най-често споменаваните предимства от потребителите, които са се решили на това Това са: същите клавишни комбинации, същите псевдоними, същата тема на обвивката, същите Git функции, същите Vim/Neovim конфигурации, SSH и терминални инструменти. На практика това означава, че вече не се чувствате неловко всеки път, когато отваряте нова сесия на друга машина.

Освен това, синхронизацията става ключова, когато трябва да подготвите няколко отбора подред.Това е много често срещано в среди за разработка, университети или компании. Ако вече сте настроили всичко фино на основния си лаптоп, искате новият компютър (или облачното кодово пространство) да приеме това базово състояние възможно най-бързо, без да се налага ръчно да помните какво да инсталирате и какво да настройвате.

Важно е обаче да се поставят ограничения.Не всичко е разумно да се синхронизира. Някои конфигурации са обвързани с конкретен хардуер (графични карти, специфични дискови пътища, външни устройства) или с определени версии на драйвери и услуги. Има и чувствителни конфигурации, които е най-добре да се държат отделно и да се третират като криптирани тайни.

Конфигурация на dotfile за различни платформи

Какво трябва да се синхронизира (и какво не чак толкова)

Реалността е, че към днешна дата няма магическо решение за клониране на цяла система на 100%. само с dotfiles. Това, което можем да направим, е да покрием много висок процент от нашата „работна среда“ и да оставим настрана това, което е строго свързано с хардуер или много специфични локални услуги.

Много често срещани примери за файлове, които хората синхронизират звук:

  • .gitconfig и файлове .gitignore глобален.
  • .zshrc, .bashrc, .p10k.zsh, .zimrc и други настройки на обвивката.
  • .vimrc или конфигурация на Неовим (~/.config/nvim/init.vim o init.lua).
  • Конфигуриране на имейл клиенти в терминала, като например .muttrc.
  • Конфигурационни файлове за инструменти от командния ред, AWS CLI, Docker и др.

Има обаче елементи, които могат да причинят проблеми, ако се опитате да ги клонирате без да мислите.Конфигурации с абсолютни пътища до дискове, които съществуват само на една машина, параметри на графичния драйвер, неща, тясно свързани с конкретен лаптоп, USB устройства и др. Копирането им без филтриране може да повреди приложенията или най-малкото да генерира досадни грешки.

И тогава има чувствителни данни.Частни SSH ключове, API токени, пароли за услуги, GPG ключове… Те никога не трябва да се изпращат в обикновен текст до публично хранилище. Дори в частни хранилища се препоръчва използването на инструменти като git-крипта, SOPS или криптирани с GPGИли съхранявайте тези тайни във външен мениджър на пароли (Bitwarden, 1Password и др.). За повече съвети относно поверителността, свързани с настройките на Windows, вижте [линк към съответната документация]. Защитете поверителността си в Windows 11.

  Obsidian, най-добрата система за водене на бележки за вашата продуктивност

Класически подход: папка dotfiles и символни връзки

Един от най-простите и най-стари методи за управление на точкови файлове Състои се от събиране на всички конфигурационни файлове в специална директория (например, ~/.dotfiles) и след това създайте символни връзки от вашия $HOME към тази папка.

Основният работен процес би бил горе-долу такъв:

  1. Намерете конфигурационните файлове или папки чиито версии искате да се конфигурират в домашната ви директория (включително тези, които започват с точка; можете да използвате ls -a да ги видя).
  2. Преместете тези файлове или директории в папката .dotfiles така че те да са централизирани.
  3. Създавате символни връзки от вашия $HOME към новия маршруттака че приложенията да продължат да намират файловете там, където очакват, но действителното съдържание да е вътре .dotfiles.

Бърз пример за Linux или macOS:

mv ~/.bashrc ~/.dotfiles/
ln -s ~/.dotfiles/.bashrc ~/.bashrc

Ако направите грешка със символна връзка Или ако промените решението си къде да хоствате файл, можете да го отмените с unlink:

unlink ~/.bashrc

След като имате структурата ~/.dotfilesКонвертирате тази папка в Git хранилище (или клонирате съществуващо). Оттам нататък е просто въпрос на използване на стандартни Git команди: добавяне на файлове, правене на commit-и, качване в GitHub, GitLab и т.н. Можете дори да организирате съдържанието с подпапки за shell-ове, редактори, езици, скриптове и т.н.

Dotfile хранилище със символни връзки

Автоматизирайте символни връзки, структура и изключения

Създаването на символни връзки ръчно за всеки файл работи, но е много досадно. Ако имате много конфигурации, най-практичното нещо, което можете да направите, е да напишете един или повече скриптове, които автоматизират този процес и които можете да изпълнявате всеки път, когато започнете да използвате нова машина.

Типичен модел е да се съхранява инсталационен скрипт във вашето хранилище dotfiles който преглежда списък с файлове и папки, проверява дали те вече съществуват, прави резервни копия, ако е необходимо, и след това създава символните връзки. По този начин е необходимо само да изпълните нещо подобно ./install.sh и го оставете да свърши мръсната работа.

Вътрешната организация също е важнаНяма строг стандарт, но много потребители използват схеми, вдъхновени от референтни хранилища (като тези от CodelyTV или други популярни GitHub dotfiles): групиране по програма (shell/, vim/, git/, apps/) или по тип (config, bin, langs…). Важното е да разбирате къде се намира всичко.

За да предотвратите проследяването на нежелани файлове от Git (компилирани кешове, временни кешове, лични файлове), имате нужда от .gitignore фино настроен. Например, можете да му кажете да игнорира всички файлове .zwc от Zsh или директории, съдържащи лични данни:

shell/zsh//.zwc
shell/zsh//.zwc.old
//private-*

Най-големият недостатък на този подход, базиран на символни връзки Проблемът е, че трябва да запомните какво е свързано и къде. Ако някога решите да отмените синхронизацията, ще трябва да изтриете връзките и да върнете файловете в първоначалното им местоположение. Освен това, някои приложения не работят добре със символни връзки и изискват физически файл в очаквания път.

Разширен метод: голо Git хранилище на вашата НАЧАЛНА страница

За много хора управлението на символни връзки е досадно и те предпочитат по-изчистен подход.Ето къде се намесва използването на Git хранилище в [mode]. гол сочейки директно към вашата домашна директория. Това е много популярен метод, защото избягва преместването на файлове и не изисква символни връзки.

Голото хранилище е Git хранилище без работна директория.: съдържа само метаданните и обектите на Git (това, което обикновено е вътре .git), но не и „нормално“ копие на файловете. Това ни позволява да поставим това голо хранилище например в ~/.dotfiles и кажете на Git, че работното дърво е вашето $HOME.

Основните стъпки за сглобяване на тази система биха били:

  1. git init --bare за да създадете хранилището в $HOME/.dotfiles.
  2. Дефиниране на псевдоним което сочи към хранилището и работното дърво, за да улесни изпълнението на команди.
  3. Конфигурирайте да не се показват непроследени файлове за да се избегне шум в $HOME.
  4. добави файловете, които искате да версионирате и направите commit.
  5. Connect дистанционно и push за резервно копие.

Оттам нататък, работата с вашите dotfiles е толкова проста, колкото използването на псевдонима: dotfiles status, dotfiles add, dotfiles commit, dotfiles pullи т.н., от произволен път. Няма символни връзки, файловете остават на обичайното си място и Git обработва контрола на версиите „невидимо“.

Клонирайте вашите dotfiles на други машини (Linux, macOS и Windows)

Когато получите нов компютър и искате да репликирате вашата средаМетодът с голото хранилище е особено елегантен: клонирате хранилището, пресъздавате псевдонима и след това... checkout да разположи всичко.

Във втори отбор стъпките биха били нещо подобно::

  1. Клонирайте хранилището като голо на същото скрито място:
    git clone --bare :tuusuario/dotfiles.git $HOME/.dotfiles
    
  2. Предефиниране на псевдоним на новата машина:
    alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
    
  3. За да направите checkout на версираните файлове:
    dotfiles checkout
    

Много е вероятно подобни файлове вече да съществуват .bashrc o .gitconfig Тези файлове са създадени от системата или от вас преди синхронизирането. За да избегнете загуба на каквото и да било, можете да ги преместите в резервна папка, преди да принудите синхронизацията. checkoutАко нещо се счупи, имате и опции за Възстановяване на настройките по подразбиране на WindowsИма трикове с grep, awk y xargs да го автоматизира, но основната идея е:

mkdir -p .dotfiles-backup
# Mover los archivos conflictivos a la copia de seguridad y repetir el checkout

Същата схема работи и върху WSL на Windows. (което в крайна сметка е Linux среда) по почти същия начин. Ако искате да версионирате и чисто „Windows“ конфигурации (PowerShell, VS Code на Windows и др.), можете да ги включите и в хранилището, въпреки че може да се наложи да адаптирате пътища и условия, така че да не пречат на Linux или macOS.

  ShareX: най-добрият инструмент за бързо заснемане и редактиране

Синхронизиране на конфигурации в Windows с Git

Разлики между дистрибуции и системи: Arch, Fedora, Debian, macOS и Windows

Много често задаван въпрос е дали dotfiles могат да се споделят без повече шум. между различни дистрибуции (например Arch и Fedora) или дори между коренно различни системи като Linux и Windows. Краткият отговор е: да, но с повишено внимание.

Повечето от настройките на потребителските инструменти са преносими: Вие .zshrcВашата Vim/Neovim конфигурация, вашите Git псевдоними, вашите shell функции... всичко това обикновено работи по един и същи начин в Arch, Fedora, Debian или Ubuntu, стига да имате инсталирани едни и същи програми.

Разликите се появяват в маршрутите, мениджърите на пакети и някои помощни програми.Например, начинът за инсталиране на софтуер с apt, dnf o pacman Променя се, а понякога и местоположението на определени конфигурационни файлове. Освен това в Windows много от пътищата са различни (C:\Users\usuario, AppData\Roamingи т.н.) и ще трябва да използвате условни изрази или отделни файлове.

Има няколко стратегии за справяне с тези случаи.:

  • Използвайте различни клонове на хранилището за всяка система (например, main (за Linux, друг клон за Windows).
  • Вмъкнете условна логика в самите точкови файлове, като проверите променливи като $OSTYPE, $HOSTNAME или подобен.
  • Организирайте хранилището по системи (linux/, windows/, macos/) и използвайте специфични инсталационни скриптове.

Например в а .bashrc Може да имате нещо подобно:

if ; then
  export EDITOR=nano
fi

Накратко, използването на Arch и Fedora (или смесването на Windows с WSL) не прави вашите dotfiles невалидни.Но това ви кара да помислите малко кои части са общи и кои трябва да са специфични за всяка среда.

Синхронизирайте и програми: списъци с пакети и инсталационни скриптове

Запазването само на конфигурационните файлове е добре, но ви оставя на половината път. Ако след това се наложи ръчно да инсталирате всички програми на всяка машина, добра практика е да допълните хранилището си dotfiles със скриптове или списъци с пакети, за да репликирате и инсталирания софтуер.

Има няколко стратегии, в зависимост от системата.:

  • En macOS, използвайте Homebrew и неговата команда brew bundle.
  • En Дебиан и производни, експортирайте списъка с пакети с dpkg-query и след това инсталирайте с apt.
  • En Windows, да се възползвате от WinGet за експортиране и импортиране на каталога с приложения.
  • за пиукам (Пайтън) и NPM (Node.js), запазете списъка с глобални пакети.
  • Ако използвате щракам, разчитат на своите моментни снимки, за да експортират/извличат данни.

Практически примери за износ:

# macOS - Homebrew
brew bundle dump --file="$HOMEBREW_BUNDLE_FILE_PATH" --force

# Debian/Ubuntu - lista de paquetes instalados
sudo dpkg-query -l | awk '{if ($1 == "ii") print $2}' > packages_list.txt

# Windows - con winget
winget export exported_winget.txt

# Paquetes pip globales
pip freeze > "$DOTFILES_PATH/langs/python/requirements.txt"

# Módulos globales de npm
ls -1 /usr/local/lib/node_modules | grep -v npm > "$DOTFILES_PATH/langs/js/global_modules.txt"

За вноса, обратният поток:

# macOS
brew bundle --file="$HOMEBREW_BUNDLE_FILE_PATH" --force

# Debian/Ubuntu
sudo xargs -a packages_list.txt apt install

# Windows
winget import exported_winget.txt

# pip
pip install -r "$DOTFILES_PATH/langs/python/requirements.txt"

# npm
xargs -I_ npm install -g "_" < "$DOTFILES_PATH/langs/js/global_modules.txt"

Ако използвате snap пакетиМожете да запазвате снимки и да ги местите в рамките на вашия dotfiles проект:

# Limpiar snapshots antiguos
# (para quedarte solo con la última copia de cada app)

snap save                 # genera un ZIP por programa
mv /var/lib/snapd/snapshots ~/.dotfiles/apps/snap
# Hacer symlink de vuelta a /var/lib/snapd/snapshots

snap install app1 app2    # reinstalar apps
snap restore <id>         # restaurar configuración por ID del snapshot

Като алтернатива (или като допълнение) можете да създадете персонализиран скрипт за инсталиране който комбинира мениджъри на пакети и snaps, изисква парола за sudo само веднъж и инсталира всичко наведнъж:

#!/bin/bash
# Obtener privilegios de root una sola vez
echo <password> | sudo -S echo
echo "Ahora puedes usar sudo sin volver a meter la contraseña"

# Instalar via apt
sudo apt install app1 app2 app3 -y

# Intentar arreglar instalaciones fallidas
sudo apt install -f -y

# Instalar via snap
sudo snap install app1 app2 app3

Този тип скрипт се запазва в самото хранилище на dotfiles. И след като му предоставите разрешения за изпълнение, го стартирате на всяка нова машина. И ако срещнете някакви проблеми с опцията за експортиране/импортиране на списък, изрично го добавяте към вашия скрипт.

Dotfiles в GitHub Кодови пространства и синхронизация на настройките на VS Code

Ако използвате GitHub Codespaces, ситуацията е много подобна.Но в отдалечена среда. Там имате два основни механизма за персонализиране: синхронизиране на настройките на VS Code и използване на специално хранилище на dotfile.

  Перфектни видео разговори: усъвършенствани трикове за Zoom и Google Meet

Синхронизиране на конфигурацията на VS Code Това позволява споделянето на теми, преки пътища, фрагменти, разширения и определени състояния на интерфейса между настолното приложение и уеб клиента. Тази конфигурация се запазва в облака и се изпраща/изтегля всеки път, когато активирате опцията „синхронизиране на настройките“. Можете да изберете дали да разрешите на уеб кодовите пространства да използват тази конфигурация или да ги държите отделно.

От друга страна, GitHub Codespaces може автоматично да клонира хранилище на dotfiles. които сте конфигурирали в потребителските си настройки. Когато създавате ново кодово пространство, GitHub клонира това хранилище в средата и търси скриптове със стандартни имена като:

  • install.sh, install
  • bootstrap.sh, bootstrap
  • script/bootstrap
  • setup.sh, setup
  • script/setup

Ако откриете някой от тях, стартирайте го, за да конфигурирате средатаинсталиране на инструменти, псевдоними, настройки на обвивката и др. Ако няма скрипт, той символично се свързва с файлове, които започват с . в това репо към ~ от кодовото пространство, възпроизвеждайки поведението на символните връзки, които обсъдихме по-рано.

Връзката между „доверени“ хранилища, GPG и синхронизацията на настройките Той също играе роля: синхронизира се само в двете посоки (качване към и от облака) в хранилища, които сте маркирали като надеждни. В ненадеждните хранилища синхронизацията е ограничена до еднократно извличане на конфигурацията, без повторно качване на промени от това кодово пространство.

Външни инструменти за управление на dotfiles: Stow, chezmoi, dotdrop и други

В допълнение към „голите“ подходи с Git (нормални или голи)Съществуват специализирани инструменти за оркестриране на dotfiles: GNU Stow, yadm, dotbot, chezmoi, dotdrop… Всеки от тях се справя с проблема по малко по-различен начин: някои генерират символни връзки по много контролиран начин, други работят с шаблони, а трети добавят управление на секрети или интеграция с мениджъри на пароли.

ChezMoi, например, е много мощна и гъвкава опция.Работи със собствена структура, където файловете се преименуват (например от .zshrc a dot_zshrcТе разчитат на шаблони и подкани, за да персонализират инсталацията според системата или хоста. За някои потребители това е идеално; други го намират за досадно, защото инструменти като Neovim спират да разпознават оригиналното файлово разширение и вие губите функции като синтактично оцветяване, освен ако не инсталирате допълнителни плъгини.

Някой, който е управлявал dotfiles на пет или повече машини с различни операционни системи (Gentoo, Ubuntu, Debian, macOS) спомена, че е преминал от просто Git хранилище към dotdrop и накрая към chezmoi, където е успял да създаде много сложна рамка: откриване на инсталирани двоични файлове, унифицирана инсталация чрез apt, brew, cargo и скриптове, интеграция с Bitwarden за получаване на GPG ключове и автоматично попълване authorized_keys чрез URL адреси на сървъри и др.

Ако не искате толкова много сложност, методът с голото репо обикновено е повече от достатъчен.Но ако търсите нещо силно персонализируемо, с шаблони, базирани на операционна система, хост и тип машина, си струва да разгледате инструменти като chezmoi или dotdrop, като имате предвид, че те имат крива на обучение.

Сигурност: частни хранилища, тайни данни и SSH достъп

Докато изграждате цялата тази инфраструктура, сигурността не може да бъде пренебрегната.Вашите dotfiles могат да съдържат много чувствителна информация: вътрешни пътища, имена на хостове, потребители на базата данни и в най-лошия случай, частни ключове или API токени.

Някои основни добри практики които трябва да приложите от първата минута:

  1. Използвайте частни хранилища Ако ще качвате конфигурации, които биха могли да разкрият чувствителна информация, това не е безпогрешно, но е добър филтър.
  2. Никога не качвайте частни ключове или пароли в обикновен текстАко е необходимо да версионирате този тип данни, използвайте криптиране с git-крипта, SOPS o GPGили съхранявайте тези тайни във външен мениджър (Bitwarden, 1Password и др.).
  3. Периодично проверявайте кой има достъп към вашите dotfiles хранилища, сменяйте пароли и подновявайте ключовете, когато е необходимо.
  4. Свържете се с отдалечени хранилища и сървъри, използвайки SSH ключове вместо пароли и активирайте двуетапно удостоверяване с доставчици, които го позволяват.

Бързо търсене на неща като openai_api_key на GitHub Това е добър урок по смирение: откривате тонове тайни, неволно разкрити. Не искате да видите себе си в този списък; по-добре е да бъдете предпазливи и да не добавяте в хранилищата си всичко, което изглежда като удостоверение за самоличност.

В крайна сметка целта е да се изгради и синхронизира стабилно хранилище на dotfiles. — независимо дали с традиционни символни връзки, с голо хранилище на вашия HOMEЧрез използване на инструменти като chezmoi или интегрирането му в GitHub Codespaces, можете да превърнете това, което преди беше кошмар от преинсталации, разхлабени скриптове и загубени конфигурации, в рутина. Ключът е да включите само това, което разбирате, да държите конфигурациите отделно от тайните и да разчитате на Git винаги да има вашата „домашна“ среда готова за клониране на следващата машина, независимо дали е Linux, macOS или Windows.

Конфигуриране на изолация на ядрото и целостта на паметта в Windows
Свързана статия:
Конфигуриране на изолация на ядрото и целостта на паметта в Windows