de Mohammed Ajmal Siddiqui

Cum să faceți din gestionarea Dotfile o afacere nedureroasă

În primul articol, Am introdus fișierele dot. În aceasta, vom acoperi dezvoltarea și gestionarea lor.

Cum sa faci din gestionarea Dotfile o afacere nedureroasa
Fotografie de Jens Jakob pe Unsplash

Notă: Acesta este al doilea articol din serie și discută despre aspecte mai avansate ale gestionării fișierelor dot. Pentru a afla despre ce sunt fișierele dot și fundamentele gestionării fișierelor dot, citiți primul articol.

În ultimul articol, am adăugat câteva aliasuri și funcții la .bash_profile si .bashrc fişier. De asemenea, am aflat că acestea nu sunt singurele fișiere dot disponibile pentru personalizarea noastră.

Acest articol se concentrează pe îmbunătățirea abordării noastre către gestionarea fișierelor dot dotate și mai scalabile. În acest moment, trebuie să aveți în vedere un lucru important de la acest punct încoace. Dotfile sunt o chestiune de preferință personală, la fel și gestionarea lor. Ar trebui să le gestionezi în felul tău. Acest articol oferă numai îndrumări generale și modalități comune de a face față sarcinilor recurente în gestionarea fișierelor dot.

Configurarea mediului dvs.

Începeți cu crearea unui director pentru fișierele dvs. dot și cd în el. Îmi place să le am pe ale mele în Projects din directorul meu de acasă, dar depinde de tine:

$ mkdir ~/Projects/dotfiles$ cd ~/Projects/dotfiles

Aici vom avea toate fișierele noastre dot. Să începem făcând din acesta un depozit git.

$ git init

Să începem prin mutarea .bash_profile de la HOME director în noul nostru director de fișiere dot.

$ mv ~/.bash_profile ~/Projects/dotfiles/.bash_profile

Să comitem acest fișier.

$ git commit -am "Added .bash_profile"

Și iată-l! Acesta este exact modul în care ați lucra la orice alt proiect și exact așa ar trebui să vă gestionați fișierele dot.

De ce controlul versiunii, s-ar putea întreba. Oamenilor le place să-și consolideze fișierele dot pentru controlul versiunilor din câteva motive:

  • Împingerea fișierelor dot într-o repo la distanță le permite oamenilor să partajeze fișierele lor dot cu alții sau să le acceseze de la distanță atunci când au nevoie de ele. Acesta este, de asemenea, o modalitate sigură de a vă copia fișierele dot.
  • Controlul versiunilor vă permite să vedeți cum evoluează fișierele dvs. dot în timp.

Dar dacă porniți o altă instanță de terminal, veți observa că configurarea dvs. este ruptă! Terminalul nu vă oferă sursa .bash_profile sau .bashrc dintr-un folder personalizat, deoarece se așteaptă ca aceste fișiere să fie găsite în directorul principal.

Deci, avem nevoie de o modalitate de a ne păstra fișierele dot în dotfiles director sincronizat cu directorul nostru principal. Puteți face acest lucru în orice mod doriți, chiar dacă este la fel de simplu ca și copierea tuturor fișierelor din dotfiles director la directorul de start cu un script. Dar există abordări mai elegante. Să ne uităm la două dintre ele.

rsync Abordare

O modalitate de a rezolva problema de a avea fișierele dvs. dot într-un alt director decât directorul principal este copierea fișierelor folosind un script. Dar există o modalitate mult mai bună de a face acest lucru decât folosind cp comanda: rsync comanda.

Rsync, care înseamnă „sincronizare la distanță”, este un instrument de sincronizare de fișiere la distanță și local. Folosește un algoritm care minimizează cantitatea de date copiate prin mutarea doar a porțiunilor de fișiere care s-au modificat. Astfel, această abordare este atât mai eficientă, cât și mai scalabilă atunci când vine vorba de sincronizarea fișierelor dot. Acest articolul acoperă rsync în detaliu.

Rulați această comandă pentru a sincroniza directorul dotfiles cu directorul de acasă:

$ rsync . ~

Comanda funcționează exact în același mod ca și cp comanda. Copiază conținutul sursei (directorul curent: .) la destinație (directorul principal: ~).

Cu toate acestea, este posibil să aveți scripturi utilitare în directorul dotfiles pe care poate nu doriți să le copiați în directorul principal. În acest caz, puteți exclude aceste fișiere folosind --exclude steag. De fapt, ați prefera să nu sincronizați fișierul .git director din fișierul dvs. dotfiles cu directorul de acasă. Iată deci comanda actualizată:

$ rsync --exclude ".git/" . ~

Puteți utiliza --exclude semnalizați de mai multe ori pentru a exclude mai multe fișiere. Această abordare este utilizată de mathiasbynens în fișierele sale dot.

Symlinking

O altă abordare a sincronizării fișierelor dot este crearea de link-uri simbolice din fișierele punct din directorul dvs. de fișiere punct în directorul principal. Dacă nu știți ce sunt linkurile simbolice, vă sugerez să citiți despre asta aici.

Aceasta este abordarea pe care o folosesc fișierele mele dot, și o fac din cauza unui avantaj major față de abordările bazate pe copierea fișierelor – actualizarea automată. Link-urile simbolice din director sunt, în esență, pseudonime la fișierele originale din directorul dvs. dotfiles, astfel încât orice modificare pe care o faceți se reflectă automat în acesta. Ceea ce înseamnă că nu trebuie să rulați comanda / scriptul de sincronizare de fiecare dată când faceți o modificare. Este foarte util.

Puteți să vă conectați simbolul .bash_profile la directorul de start folosind ln comanda cu -s steag (și -v steag pentru ao face detaliat):

$ ln -sv ~/Projects/dotfiles/.bash_profile ~

Acum, ori de câte ori salvați modificările pe care le efectuați .bash_profile, acestea vor fi reflectate automat în directorul principal și puteți porni un nou terminal sau source .bash_profile pentru a le vedea în acțiune.

Crearea de scripturi utilitare pentru sincronizare și bootstrapping

În acest moment, executați comenzi de terminal pentru a vă sincroniza fișierele dot cu directorul de acasă. Această abordare este aproape imposibilă de scalat în momentul în care aveți mai mult de 2-3 fișiere de gestionat.

Prin urmare, este mai bine să scrieți câteva scripturi utilitare care vă vor ajuta să vă păstrați fișierele dot sub control. Ar trebui să aveți cel puțin un script în depozitul de fișiere dot, cel pe care îl utilizați pentru sincronizare. Scriptul dvs. de sincronizare ar trebui să utilizeze în esență mecanismul de sincronizare pentru a vă sincroniza fișierele dot cu directorul principal. De asemenea, ar trebui să aibă un mecanism pentru a exclude sincronizarea anumitor fișiere. Fișiere precum scriptul de sincronizare, scriptul bootstrap, fișierul .git directorul, fișierul README.md etc. ar trebui exclus.

În prezent, am un sync funcția mea bootstrap.exclude.sh script care gestionează sincronizarea și exclude orice fișier care are un fișier .exclude în numele fișierului, pe lângă cele menționate mai sus. Acesta este un mecanism destul de sigur. O puteți verifica aici.

Este foarte recomandat să aveți un alt script pentru a porni un sistem nou cu fișierele dot și pentru a vă configura mediul de dezvoltare.

Un lucru important pentru care puteți utiliza scriptul de bootstrap este instalarea pachetelor și instrumentelor pe care le utilizați în mod obișnuit.

De exemplu, sunt dezvoltator Node.js și folosesc un Mac, așa că pot folosi managerul de pachete homebrew pentru a instala instrumente și utilitare pe care le folosesc de obicei. Pot include așa ceva în scriptul meu de bootstrap:

# Make sure we’re using the latest Homebrew
brew update
# Upgrade any already-installed formulae
brew upgrade
# NodeJS
brew install node
# Heroku
brew install heroku
# Yarn - an alternative to npm
brew install yarn
# Docker for containerization
brew install docker

Acest script instalează Node, Heroku, fire și Docker pe Mac-ul meu. Spuneți că sfârșesc prin formatarea computerului Mac sau cumpăr unul nou. Nu trebuie să instalez toate lucrurile pe care le folosesc manual. În schimb, îmi pot clona fișierele dot din depozitul meu la distanță și pot rula scriptul bootstrap, care îmi stabilește totul. Deoarece este posibil să aveți multe lucruri pe care le utilizați, cel mai bine este să separați acest lucru în propriul său fișier. Verifică-mi brew.exclude.sh descărcați un exemplu.

Scriptul dvs. de bootstrap ar trebui să gestioneze aceste lucruri:

  1. Realizarea oricăror directoare relevante pe care le utilizați (de exemplu ~/Projects director).
  2. Apelați scriptul de sincronizare pentru a vă sincroniza fișierele dot cu directorul principal.
  3. Instalați toate instrumentele, utilitarele, limbile etc. pe care le utilizați în mod obișnuit.

Scriptul meu bootstrap este destul de minim și gestionează toate aceste lucruri, așa că ar putea fi un loc bun pentru a începe.

Împărțirea profilului dvs. .bash

Pe măsură ce adăugăm o mulțime de aliasuri și funcții, începem să ne dăm seama că .bash_profile devine destul de mare și greoaie de gestionat. Să rezolvăm această problemă.

source comanda poate fi utilizată într-un script pentru a executa comenzile din fișierul dat ca argument pentru comandă. Așadar, putem crea fișiere suplimentare pentru a ne păstra funcțiile și pseudonimele și a le obține în sursa noastră .bash_profile. Este o convenție obișnuită să apelați aceste fișiere .functions și .aliases respectiv.

Crea .functions și .aliases utilizând această comandă (în directorul dotfiles):

$ touch .functions .aliases

Acum tăiați și lipiți toate funcțiile din .bash_profile în .functions și toate pseudonimele din .aliases. În cele din urmă, adăugați următoarele rânduri la .bash_profile:

source .functionssource .aliases

Iată ce se întâmplă când deschideți o nouă fereastră de terminal:

  1. .bash_profile este evaluat.
  2. source .functions comanda este executată și astfel vă puteți folosi acum funcțiile.
  3. source .aliases comanda este executată și astfel puteți utiliza acum aliasurile.

Puteți împărți conținutul fișierului .bash_profile în orice fel vă rog și doar source fișierele relevante. Rețineți că veți avea nevoie de .functions și .aliases fișiere din directorul dvs. de domiciliu, deci asigurați-vă că sincronizați folderul dotfiles cu directorul de acasă pentru ca modificările dvs. să aibă efect.

Acum că avem fluxul de lucru de gestionare a fișierelor dot cu un depozit dotfiles, un mecanism de sincronizare a conținutului repo cu directorul principal și posibilitatea de a împărți codul nostru în fișiere gestionabile, ne putem bucura cu bucurie de mediul nostru de dezvoltare.

Deși acest lucru este suficient pentru a vă juca cu fișierele dvs. dot, există un alt aspect important al fișierelor dot care ar trebui abordat: partajarea.

Adăugarea suportului pentru personalizare

Găzduirea fișierelor dvs. dot într-un depozit public este rareori suficientă pentru ca acestea să poată fi partajate. Dacă doriți ca alții să experimenteze cu fișierele dvs. dot, trebuie să faceți câteva lucruri:

  1. Asigurați-vă că există o documentație despre modul de instalare și utilizare a fișierelor dvs. dot. Acest lucru merge de obicei în README.md al proiectului dvs. Mecanismul pe care îl utilizați pentru a exclude sincronizarea fișierelor cu directorul principal ar trebui să excludă și acest fișier. De asemenea, ar trebui să aruncați o privire la fișierele README ale repozitelor populare dotfile pentru a avea o imagine a ceea ce oamenii pun acolo. Iată un link către al meu.
  2. Dacă este posibil, sprijiniți un mecanism pentru ca oamenii să vă personalizeze cu ușurință fișierele dot fără a fi nevoie să vă adânciți în ele. Acest mecanism este complet alegerea dvs., deși o voi împărtăși pe a mea mai jos.

Notă: Restul acestei secțiuni discută despre abordarea mea de a permite personalizarea nedureroasă a fișierelor dot. Personal îmi place abordarea mea (și de aceea o folosesc, duh), dar fiecare persoană are propriul său mod de a face lucrurile. Vă sugerez să verificați alte repozitii dotfile pentru inspirație. Aș fi bucuros să aud despre abordările dvs. în secțiunea de comentarii.

Pentru a susține personalizarea, toate fișierele mele punctuale principale se încheie cu așa ceva (puteți găsi un exemplu al meu .functions fişier aici).

# This should be the last line of the file# For local changes# Don't make edits below this[ -f ".functions.local" ] && source ".functions.local"

Practic, fiecare fișier numit .filename (de exemplu) se termină cu ceva de genul:

[ -f ".filename.local" ] && source ".filename.local"

Această comandă verifică dacă un fișier cu același nume de fișier, dar o extensie de .local există și, dacă există, îl obține.

Deoarece aceasta este ultima linie a fișierului, fișierul .filename.local fișierul este ultimul care se obține și astfel toate setările și configurațiile definite în acesta persistă și pot înlocui cele puse în alte fișiere.

Acest lucru permite oamenilor să experimenteze fișierele mele dot să le personalizez fără să trebuiască să-mi modific codul! Frumos, nu?

De asemenea, toate .local fișierele sunt ignorate în fișierul meu .gitignore.

Pasii urmatori

În acest moment, știți aproape tot ce trebuie să știți despre gestionarea fișierelor dot, dar există câteva lucruri pe care acest lucru și articolul anterior pierdeți:

  • Personalizarea promptului dvs. (aceasta este cu adevărat o artă și ar trebui să investiți timp în asta)
  • Utilizarea unui manager de fișiere dot, cum ar fi dotty (sau autodot, ceea ce am inventat)

Aș recomanda să vă uitați la aceste lucruri când puteți.

Concluzie

Asta este tot pentru această serie de gestionare a fișierelor dot. Mi-ar plăcea să vă aud părerile despre acest articol și, mai mult decât atât, să văd cât de creativi sunteți băieți cu fișierele dvs. dot. Contactați-mă în comentarii pentru a-mi spune cum v-a plăcut acest articol și împărtășiți orice alte trucuri de gestionare a fișierelor dot despre care știți. De asemenea, aș fi foarte fericit dacă îți dai un minut pentru a-mi da feedback fișierele mele dot, sau sugerați îmbunătățiri utilizând problemele GitHub.

Mi-a plăcut atât de mult ideea de fișiere dot încât m-a inspirat să creez un cadru de bază de gestionare a fișierelor dot – autodot. Cadrul este la început, așa că caut oameni entuziaști care să-mi poată oferi feedback pentru cadru, să contribuie la el spunându-mi despre erori și făcând cereri de caracteristici și să contribuie la cod și documentație. Luați ceva timp pentru asta! 🙂

ajmalsiddiqui / autodot
autodot – Un sistem de gestionare a fișierelor dot care facilitează partajarea fișierelor dvs. dot, păstrându-vă în același timp.github.com

De asemenea, conectează-te cu mine pe GitHub și LinkedIn.

Mult succes și Happy Coding! 🙂