Konfiguracja

Podstawowa meta-konfiguracja repozytorium zawarta jest w kilku plikach.

description

Plik description zawiera opis naszego repozytorium. Plik ten wykorzystywany jest wyłącznie przez program GitWeb.

echo 'My first manual repository' > description

info/exclude

W systemie kontroli wersji git lista ignorowanych plików jest wyliczana na podstawie konfiguracji znajdującej się w 3 plikach:

  • plik .gitignore w repozytorium
  • plik .gitignore_global w naszym katalogu domowym
  • plik exclude znajdujący się w katalogu .git/info naszego repozytorium

Typowe wykorzystanie pliku info/exclude jest w sytuacji, gdy pracujemy z wyjątkowym repozytorium (więc nie wykorzystamy pliku .gitignore_global) w sposób inny niż pozostali członkowie zespołu (tak więc nie będziemy chcieli "zaśmiecać" pliku .gitignore) np. inny system operacyjny, inne IDE etc.

mkdir info
touch info/exclude

hooks

Hooks to mechanizm git pozwalający na uruchamianie skryptów użytkownika przed lub po wskazanej akcji takiej jak commit, push czy też receive.

Standardowo klient gita generuje dla nas listę przykładowych skryptów lecz w naszym przypadku nie będą one nam potrzebne.

mkdir hooks

config

Centralnym miejscem konfiguracji naszego lokalnego repozytorium jest plik config. Plik config może zawierać dużą ilość ustawień naszego repozytorium, dlatego na tym etapie ograniczymy się do niezbędnego minimum - tego, który generowany jest przez konsolowego klienta systemu.

core.repositoryformatversion

Każde repozytorium ma ustawione numeryczną wersję formatu. W przypadku, gdy dany format nie jest obsługiwany przez klienta - powinien on zakończyć pracę z danym repozytorium. Różne numery odpowiadają różnym sposobom obsługi dyskowej repozytorium i tak:

  • 0 - inicjalna wersja formatu plików git, wskazuje na typowy (omawiany dzisiaj) sposób przechowywania plików, katalogów i referencji
  • 1 - wersja identyczna z "0" z tą różnicą, że każde odchylenie od standardu musi być dodatkowo skonfigurowane w ustawieniu extensions.*

Pomimo identycznego zachowania wersji 0 i 1 ()gdy ta druga nie posiada żadnych niestandardowych ustawień) format naszego repozytorium powinien być ustawiony na 0 aby było kompatybilne wstecz dla dawnych klientów.

core.filemode

Ustawienie to pozwala ustalić, czy bit wykonywalności w ustawieniach pliku przy porównywaniu zawartości indeksu i przestrzeni ma być ignorowany (gdy opcja ma wartość false) czy też nie (dla wartości opcji true, domyślnej).

core.bare

Repozytorium bare (ang. "gołe") to takie, które zawiera jedynie konfigurację (katalog .git) repozytorium lecz nie można dokonuwać na nim operacji plikowych (nie posiada przestrzeni roboczej). Ustawienie jest przydatne w przypadku serwisów hostujących nasze zdalne repozytoria (jak GitHub czy też Bitbucket). Domyślnie lokalne repozytorium nie jest "gołe" - opcja ma wartość false.

core.logallrefupdates

Ustawienie tej opcji na true uruchamia mechanizm Reflogu w naszym repozytorium. Więcej o Reflogu w dalszej części warsztatu.

core.ignorecase

Wewnętrzna opcja git'a pozwalająca na poprawną obsługę repozytorium i zawartości jego plików (obiektów) na przestrzeni różnych systemów plikowych takich jak FAT, NTFS, APFS czy też HFS+.

core.precomposeunicode

Opcja wykorzystywana wyłącznie przez implementację git'a na OSX (Mac). Kiedy ustawiona jest na true, git cofa dekompozycję znaków unicode dokonywaną przez system OS X.

Zawartość

Tworzymy plik config i ustawiamy mu następującą zawartość:

touch config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true

Pozostałe katalogi

W swojej początkowej strukturze nasze repozytorium powinno posiadać jeszcze inne katalogi takie jak objects i refs oraz plik HEAD. Na chwilę obecną utworzymu ich pustą strukturę, a do zawartości i znaczenia przejdziemy w dalszej części warsztatu.

mkdir objects
mkdir objects/info
mkdir objects/pack
mkdir refs
mkdir refs/heads
mkdir refs/tags

Plik HEAD nie może być inicjalnie pusty, dlatego jego zawartość ustawimy w następujący sposób:

echo 'ref: refs/heads/master' > HEAD

results matching ""

    No results matching ""