2015-08-05 24 views
7

Mam kilka plików "dot" w moim katalogu domowym, które chciałbym śledzić za pomocą git - np. .pryrc, .zshrc, itp. Chcę mieć zdalne repozytorium dla tych plików, tak aby a) istnieje łatwy sposób na odzyskanie moich ustawień konfiguracyjnych, gdybym z jakiegoś powodu stracił swoją maszynę; oraz b) w celu bezpiecznego śledzenia zmian dokonanych w plikach w przypadku, gdy wkręcę coś podczas konfigurowania zmian.Jak mogę śledzić pliki konfiguracyjne "dot" w moim katalogu domowym za pomocą git?

Początkowo skonfigurowałem repozytorium git w katalogu domowym, aby je śledzić, z plikiem .gitignore skonfigurowanym tak, aby ignorował każdy plik, z wyjątkiem określonych, umieszczonych na białej liście nazw plików. Uświadomiłem sobie jednak, że nie szaleję za tym, że mam repozytorium git w moim katalogu domowym, i że w moim oknie terminala pojawia się dodatkowa rozpraszająca informacja o nazwie "master". Używam ZSH z ustawieniami, aby wyświetlić gałąź git w monicie i okazało się to zaskakujące i mylące, gdy widzę, że jestem w repozytorium git podczas nawigacji w katalogach, w których nie spodziewam się mieć repozytorium.

Podjęto próbę utworzenia katalogu konfiguracyjnego pod folderem macierzystym, zainicjowania go w repozytorium git i wygenerowania dowiązań symbolicznych do żądanych plików. Zauważyłem jednak po dodaniu i zatwierdzeniu wszystkiego, co zdalny oddział pokazał tylko link, a nie faktyczną zawartość pliku.

Jaki jest najlepszy sposób, aby to osiągnąć?

Odpowiedz

5

To jak wyobraziłem go:

Najpierw stworzyłem katalog ~/repositories/configurations/ którego używam do domu repozytorium git. Po przejściu do tego katalogu, jak zwykle, uruchamiam git init.

Następnie utworzyłem plik .gitignore skonfigurowany tak, aby ignorował wszystkie pliki poza tymi na białej liście. (Zauważ, że możesz to zrobić później w procesie przed zatwierdzeniem, ale jeśli uruchomisz git status przed skonfigurowaniem .gitignore zobaczysz dużo niepotartych plików).

# ignore everything 
* 

# except these whitelisted files: 
!.gitignore 
!.pryrc 
!.zshrc 
!.bashrc 
!.bash_profile 
!.bash_login 

Następnie skieruj repozytorium git do innego katalogu roboczego:

git config core.worktree "/User/username"

Running git status teraz pokazuje:

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

    ../../.bash_login 
    ../../.bash_profile 
    ../../.bashrc 
    ../../.gitignore 
    ../../.pryrc 
    ../../.zshrc 

Stąd mamy git add ~/.bash_profile ~/.bashrc ~/.pryrc ~/.zshrc i popełnić. Konfigurowanie i przekazywanie do zdalnego repozytorium jest standardem.

Jedna uwaga - zdecydowałem, że chcę mieć lokalny plik README.md, aby udokumentować cel katalogu i sposób jego konfiguracji itp. Nie chciałem tego pliku w moim katalogu domowym, w którym byłby poza kontekst. Po utworzeniu README musiałem użyć flagi -f, aby dodać ją do repozytorium:

git add -f README.md.

Podjęto próbę dodania go do białej listy .gitignore, ale nie udało się przekonać gita, aby znaleźć plik z odmianami ścieżki, na przykład !~/repositories/configurations/README.md i tak dalej. Niezależnie od tego, jak próbowałem określić ścieżkę git nie widziałem pliku. Po dodaniu z siłą działa dobrze. Ktoś mądrzejszy ode mnie może mieć sugestię, jak to zrobić.

Ta procedura działała jak czar. Mam teraz działające repozytorium do śledzenia zmian plików dot i bezpiecznego przechowywania ich zdalnie.

+0

Dzięki Scro, działa to jak urok, który wydaje mi się bardzo przydatny. Nie mam odpowiedzi na '.gitignore', sam to przeżyłem. – vabada

3

Zapoznaj się z Homesick, ramą do śledzenia twoich plików dot w repozytorium Git.

Działa poprzez

  • tworząc repo Git, który śledzi pliki chcesz go zarządzać
  • sym-łączenie plików z katalogu domowego (~) do repo Git
  • zapewniając poleceń do śledzenia nowych plików, popełnić/pociągnięcie/zmienia

można go zainstalować uruchamiając

gem install homesick 

Następnie należy postępować zgodnie z dokumentacją, aby rozpocząć śledzenie plików.

Polecam używanie czegoś w stylu Homesick, o ile udowodniono, że działa i jest minimalnie inwazyjne. Nie zanieczyszcza katalogu domowego z repozytorium Git i pozwala udostępniać i przywracać konfigurację na dowolnej maszynie, na której pracujesz.

Oto link to my personal dotfiles repo, jeśli chcesz rzucić okiem na to, jak korzystam z Homesick.

Strona domowa jest zbudowana przy użyciu Ruby - jeśli chcesz mieć rozwiązanie Bash-only, sprawdź: Homeshick.

Aby uzyskać pełną listę dostępnych rozwiązań związanych z zarządzaniem plikami dotfiles, sprawdź numer GitHub dotfiles page.

+0

Dzięki za rekomendację. Przeczytałem dokumentację. Czego nie rozumiem, to jak to jest lepsze niż przy użyciu gilii waniliowej? Dzięki opisanej przeze mnie metodzie nie trzeba polegać na dodatkowym klejnocie z innym interfejsem API. Konfigurując repozytorium git w logicznym katalogu i wskazując git do katalogu domowego, uzyskuję wszystkie zalety normalnego przepływu pracy git, bez konieczności zarządzania innym interfejsem. – Scro

+0

Uczciwa wystarczy! To naprawdę decyzja "kupuj i buduj". Homesick (i podobne frameworki) mają działające rozwiązanie, a Ty zainwestowałeś czas w stworzenie niestandardowego rozwiązania, które działa dla Ciebie - nic w tym złego. Homesick ma polecenie dodawania nowych plików ('homesick track'), podczas gdy musisz dodać plik do pliku' .gitignore' - różne podejścia służące temu samemu celowi. I znowu, nic w tym złego, chciałem tylko wskazać istniejącą alternatywę. – nwinkler

+0

BTW: Dodałem link do strony dotfiles GitHub (http://dotfiles.github.io/), która ma wiele narzędzi do tego celu. Sprawdź sekcję "Narzędzia dotfile ogólnego przeznaczenia". – nwinkler