Jak zachować „pliki kropek” pod kontrolą wersji?

30

Etckeeper to świetne narzędzie do śledzenia zmian w plikach konfiguracyjnych w /etc. Wyróżnia się kilka kluczowych rzeczy. Może być używany z szeroką gamą VCS: git, mercurial, darcs lub bzr. Automatycznie zatwierdza także codziennie i za każdym razem, gdy instalujesz, usuwasz lub aktualizujesz pakiet. Śledzi także uprawnienia do plików i metadane własności użytkowników / grup.

Chciałbym również trzymać moje „pliki kropkowe” w moim katalogu domowym również pod kontrolą wersji, najlepiej bazar. Czy ktoś wie, czy do tego celu istnieje narzędzie takie jak etckeeper?

Najgorszy przypadek, wyobrażam sobie, że proste zadanie cron działa bzr add && bzr ciraz lub dwa razy dziennie wraz z dodawaniem ~/Documents, ~/Musicitp do .bzrignore Ktoś już robi coś podobnego w skrypcie?

Chociaż wolałbym bazar, inne opcje mogą być interesujące.

andrews coś
źródło
4
Powiązana dyskusja na Unix Stack Exchange: Wskazówki dotyczące poddania ~ kontroli źródła . Nie odpowiada na twoje pytanie, ale może jednak dostarczyć użytecznych informacji.
Gilles „SO- przestań być zły”
1
Teraz jest na to wiele narzędzi. Zobacz dotfiles.github.io w sekcji „Ogólne narzędzia dotfile”.
Robin Green,
@RobinGreen Jeśli wypracowałeś właściwą odpowiedź, mógłbym ją zaakceptować. bzrz pewnością nie jest to dobra droga w 2015 r.
andrewsomet

Odpowiedzi:

7

Nie wiedziałem, czy coś takiego to zrobiło, więc pobrałem trochę kodu, aby osiągnąć dokładnie to, czego chcesz, korzystając z mojego repozytorium tutaj: http://github.com/robertmassaioli/config-files

Mam plik z informacją, gdzie należą wszystkie pliki, a program generator_links po prostu je tam umieszcza. Jeśli wiesz, co robisz i potrafisz skompilować kod Haskell, jest to naprawdę proste i łatwe. Ostrzegam jednak, że tak naprawdę powstał na własny użytek.

Robert Massaioli
źródło
3
+1 dla haskell! -1 dla haskel! lol. nie, ale naprawdę.
Derek
Słyszę cię. Wybrałem Haskell, ponieważ się go uczę, może to być najlepszy język odpowiedni do pracy. :)
Robert Massaioli,
3

Cóż, poszedłem dalej i zrobiłem to ręcznie, dopóki nie znajdę lepszego rozwiązania. Równie dobrze mógłbym wyjaśnić, co zrobiłem.

Najpierw zrobiłem bzr init ~, ale następną rzeczą było bzr ignore "*". Zdecydowałem, że nie chcę mieć kontroli nad wersją. To po prostu nie było tego warte, szczególnie gdy weźmiesz pod uwagę, że istnieją pewne rzeczy, których naprawdę nie powinieneś trzymać w VCK jak klucze. Więc musiałem mieć bzr addokreślone pliki, które chciałem. Możesz także dodać wyjątki do .bzrignore. Przydatne są tam również wyrażenia regularne w języku Python. Na razie utrzymuję ją dość szczupłą. Jeśli wszystko pójdzie dobrze, dodam wszystko ~/.configi ~/.gconfzbyt.

Napisałem też szybki skrypt, który uruchamiam jako zadanie crona. Sprawdza, czy pliki się zmieniły, a jeśli tak, następuje automatyczne zatwierdzenie:

#! /bin/bash

set -e

TIME=$(date)
STATUS=$(bzr status)

if [ -n "$STATUS" ]; then
    if [ -n "$1" ]; then
         bzr ci ~ -m "$1"
    else
        bzr ci ~ -m "Automatic commit on $TIME"
    fi
fi

exit
andrews coś
źródło
Wybrałem własną odpowiedź, kiedy ją opublikowałem, ale postanowiłem ją cofnąć. Z pewnością nie jest to najlepsza odpowiedź na to pytanie w 2015 r.
andrews
2

Zamieniłem cały ~katalog w repozytorium Bazaar. Przechowywanie metadanych nie stanowi problemu dla plików w katalogu domowym: wszystko jest własnością tego samego konta i grupy i bzrjuż przechowuje bit wykonania.

Ręcznie dodaję do niego „interesujące” pliki (nie chcę, aby moja kolekcja muzyki lub pamięć podręczna firefox była pod kontrolą wersji), ale jeśli chcesz zautomatyzować to za pomocą skryptu, myślę, że jest to proste rozwiązanie wykonywanie bzr add && bzr ciwybranych katalogów lub danych wyjściowych findpolecenia wystarczy do wykonania zadania.

Riccardo Murri
źródło
2

Trzymam moje pliki zsh i vim w git, umieszczam na github, w różnych repozytoriach:

na przykład dla zsh utworzyłem „.zsh” i wstawiłem do niego zshrc i zshenv, a także skrypt, który łączy zshrc z ~ / .zshrc i zshenv z ~ / .zshenv, coś takiego.

while true
do
read -p "do you want to link zshenv to ~/.zshenv (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshenv ~/.zshenv; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

while true
do
read -p "do you want to link zshrc to ~/.zshrc (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshrc ~/.zshrc; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

ja również

git clone git://git@github.com:tshirtman/.zsh
cd .zsh
./init.sh

dla .vim jest prawie taki sam, z tym wyjątkiem, że używam submodułów do wtyczek z patogenem, więc dodałem to w init.sh

git submodule init
git submodule update

a kiedy chcę dodać wtyczkę vima, robię to

git submodule add git://github.com/nathanaelkane/vim-indent-guides.git bundle/vim-indent-guides

na przykład.

ok, wymagałoby to trochę pracy, jeśli masz więcej niż kilka kropkowych katalogów, którymi chcesz zarządzać, ale nic nie stoi na przeszkodzie, aby umieścić je wszystkie w tym samym katalogu lub oddzielić od działań (włączone dla wszystkich edytorów graficznych, jeden dla działania w sieci…) lub mniej więcej. zresztą tak właśnie zrobiłem, więc tylko moje dwa centy :).

tshirtman
źródło
1

Używam rozwiązania, które nie jest automatyczne, jak etckeeper (muszę ręcznie zatwierdzić), ale działało dobrze dla mnie. Nie jest tak rozwinięty, jak lubię, ale działa.

Napisałem własne narzędzie podobne do GNU Stow , ponieważ stow nie zrobił wszystkiego, co chciałem. Nazywam to Stow in Home . Po uruchomieniu szuka katalogu o nazwie „HOME”. Następnie bierze wszystko z tego katalogu i dowiązuje symbolicznie do odpowiedniej lokalizacji w $ HOME, tworząc w razie potrzeby katalogi. Przetłumaczy także nazwy plików - jeśli plik zaczyna się od „_”, zostanie zastąpiony przez „.”. Zrobiłem to, ponieważ ładniej jest edytować moje pliki kropek, gdy nie są ukryte (domyślnie zobacz je na listach katalogów). Następnie umieściłoby je w nazwie, której oczekuje ich aplikacja.

Mam więc kilka repozytoriów git dla mojej konfiguracji. Umieszczam w nich tylko pliki kropkowe, które osobiście edytuję. Zaletą tego jest to, że mogę mieć repozytorium plików kropek, które mogę udostępniać innym (takim jak moja konfiguracja Emacsa) i jedno dla innych, które są prywatne (powiedzmy, moja konfiguracja ssh, z nazwami hostów i takimi do pracy). Łączenie symboliczne z funkcją chowania w domu stawia wszystko we właściwym miejscu, ale kontrola źródła dla każdego może być osobna.

To zadziałało dla mnie dobrze. Naprawdę nie ma powodu, dla którego nie mogłem skonfigurować czegoś, aby automatycznie wykonywać zatwierdzenia. Lub przenieś wszystkie pliki kropek do odpowiednich repozytoriów i nadal używaj stow w domu. Ale tak właśnie robiłem.

Travis B. Hartwell
źródło
0

Nie możesz dodać dot filesdo repozytorium używanego w Etckeeper?

txwikinger
źródło
1
Jak mam to zrobić? dowiązać je wszystkie do gdzieś w /etc?
andrewsomething
Cóż ... to jedna opcja
txwikinger
0

Zrobiłem to, kopiując wszystkie moje pliki dot, które lubię mieć pod kontrolą źródła do folderu o nazwie „dotfiles” w moim katalogu / home /. Oczywiście oznacza to przechowywanie duplikatów i kopiowanie tam, gdzie to konieczne, ale uważam, że jest to dla mnie najłatwiejsze rozwiązanie.

Derek
źródło
1
zamiast zarządzać duplikatami, czy nie możesz po prostu utworzyć dowiązań symbolicznych do swoich plików dot?
Ryan,
Myślę, że na pewno możesz!
Derek