Disclaimer: otsikko on hieman liioiteltu, ongelmaan on olemassa muitakin hyväksi havaittuja ratkaisuja. Mielestäni alla oleva tekniikka on kuitenkin erittäin tyylikäs.

Lukaisin hiljattain tästä hämmästyttävästä tekniikasta Hacker Newsin viestiketjusta, jossa käsiteltiin ihmisten ratkaisuja dotfilesiensä tallentamiseen. Käyttäjä StreakyCobra esitteli tyylikkään asetuksensa ja … Siinä oli niin paljon järkeä! Olen siirtymässä omassa systeemissäni samaan tekniikkaan. Ainoa ennakkoedellytys on Gitin asentaminen.

Hänen sanojensa mukaan alla oleva tekniikka vaatii:

Ei ylimääräisiä työkaluja, ei symlinkkejä, tiedostoja seurataan versionhallintajärjestelmässä, voit käyttää eri haaroja eri tietokoneille, voit kopioida kokoonpanosi helposti uudessa asennuksessa.

Tekniikka koostuu Git-paljaan arkiston tallentamisesta ”sivukansioon” (kuten $HOME/.cfg tai $HOME/.myconfig) käyttäen erityisesti muotoiltua aliasta, jotta komennot ajetaan kyseistä arkistoa vastaan eikä tavanomaista .git paikallista kansiota vastaan, joka häiritsisi muita ympärillä olevia Git-arkistoja.

Aloittaminen tyhjästä

Jos et ole aiemmin seurannut konfiguraatioitasi Git-arkistossa, voit aloittaa tämän tekniikan käytön helposti näillä riveillä:

git init --bare $HOME/.cfg
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
config config --local status.showUntrackedFiles no
echo "alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'" >> $HOME/.bashrc
  • Ensimmäisellä rivillä luodaan kansio ~/.cfg, joka on paljas Git-arkisto, joka seuraa tiedostojamme.
  • Sitten luomme aliaksen config, jota käytämme tavallisen git:n sijasta, kun haluamme olla vuorovaikutuksessa konfiguraatio-arkistomme kanssa.
  • Asetamme lipun – joka on paikallinen arkistolle – piilottaaksemme tiedostot, joita emme vielä eksplisiittisesti seuraa. Tämä tehdään siksi, että kun kirjoitat myöhemmin config status ja muita komentoja, tiedostot, joita et ole kiinnostunut seuraamaan, eivät näy untracked:nä.
  • Voit myös lisätä alias-määrityksen käsin .bashrc:ään tai käyttää neljättä riviä, joka on annettu mukavuuden vuoksi.

Paketin yllä olevat rivit pätkäksi Bitbucketiin ja linkitin sen lyhyestä url:stä. Voit siis asettaa asiat seuraavasti:

curl -Lks http://bit.do/cfg-init | /bin/bash

Kun olet suorittanut asetukset, minkä tahansa $HOME-kansiossa olevan tiedoston voi versioida tavallisilla komennoilla korvaamalla git juuri luomallasi config-alasanalla, esim:

config status
config add .vimrc
config commit -m "Add vimrc"
config add .bashrc
config commit -m "Add bashrc"
config push

Asenna dotfilesi uuteen järjestelmään (tai siirry tähän asetukseen)

Jos jo tallennat konfiguraatiosi/dotfilesi Git-tietovarastoon, uudessa järjestelmässä voit siirtyä tähän asetukseen seuraavilla vaiheilla:

  • Varmistu ennen asentamista, että olet tallentanut aliaksen .bashrc:ään tai .zsh:
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
  • Ja että lähdetietovarastosi ei huomioi kansiota, johon kloonaat sen, jotta et aiheuta outoja rekursio-ongelmia:
echo ".cfg" >> .gitignore
  • Kloonaa nyt dotfilesi paljaaseen arkistoon ”dot”-kansiossasi $HOME:
git clone --bare <git-repo-url> $HOME/.cfg
  • Määrittele alias nykyisessä komentotulkin laajuudessa:
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
  • Tarkista varsinainen sisältö paljaasta arkistosta omaan $HOME:
config checkout
  • Ylläoleva vaihe saattaa epäonnistua seuraavanlaisella viestillä:
error: The following untracked working tree files would be overwritten by checkout:
.bashrc
.gitignore
Please move or remove them before you can switch branches.
Aborting

Tämä johtuu siitä, että $HOME-kansiossasi saattaa jo olla joitain varastokokoonpanotiedostoja, jotka Git korvaisi. Ratkaisu on yksinkertainen: varmuuskopioi tiedostot, jos välität niistä, poista ne, jos et välitä. Annan sinulle mahdollisen karkean oikotien, jolla voit siirtää kaikki häiritsevät tiedostot automaattisesti varmuuskopiointikansioon:

mkdir -p .config-backup && \
config checkout 2>&1 | egrep "\s+\." | awk {'print '} | \
xargs -I{} mv {} .config-backup/{}
  • Suorita tarkistus uudelleen, jos sinulla oli ongelmia:
config checkout
  • Säädä lipun showUntrackedFiles arvoksi no tässä nimenomaisessa (paikallisessa) arkistossa:
config config --local status.showUntrackedFiles no
  • Viimeistelty, tästä lähtien voit nyt kirjoittaa config -komennot lisätäksesi ja päivittääksesi pistetiedostoja:
config status
config add .vimrc
config commit -m "Add vimrc"
config add .bashrc
config commit -m "Add bashrc"
config push

Tälleen oikotienä, jotta sinun ei tarvitse muistaa kaikkia näitä vaiheita jokaisella uudella koneella, jonka haluat asentaa, voit luoda yksinkertaisen skriptin, tallentaa sen Bitbucket-snippetiksi kuten minä tein, luoda sille lyhyen url-osoitteen ja kutsua sitä näin:

curl -Lks http://bit.do/cfg-install | /bin/bash

Täydellisyyden vuoksi tämä on se, mihin päädyin (testasin monilla tuoreilla Alpine Linux -kontteilla kokeillakseni sitä):

git clone --bare https://bitbucket.org/durdn/cfg.git $HOME/.cfg
function config {
/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME $@
}
mkdir -p .config-backup
config checkout
if ; then
echo "Checked out config.";
else
echo "Backing up pre-existing dot files.";
config checkout 2>&1 | egrep "\s+\." | awk {'print '} | xargs -I{} mv {} .config-backup/{}
fi;
config checkout
config config status.showUntrackedFiles no

Wrapping up

Toivottavasti tämä tekniikka on sinulle hyödyllinen konfiguraatioidesi seuraamiseen. Jos olet utelias, minun dotfileni elävät täällä. Pidä myös yhteyttä seuraamalla @durdn tai mahtavaa tiimiäni @atlassiandev.

Vastaa

Sähköpostiosoitettasi ei julkaista.