Doszło do takiej sytuacji, że mam czasem dość siedzenia przy desktopie i chciałbym od czasu do czasu popracować, załóżmy na wersalce 😉 używając laptopa. Mogę oczywiście zrobić sobie zasób sieciowy i w nim pracować, ale co jeśli będę chciał zabrać laptopa z Internetem na łąkę albo popracować na wersalce u znajomych albo u dziewczyny (żartuje, nie mam ani dziewczyny, ani znajomych… no ale jestem prawie pewien, że ktoś inny może mieć 😉 ) Padło na wykorzystanie jakiegoś systemu kontroli wersji, a konkretniej Gita.
Git ma bardzo dobrą książkę (nawet prawie cała po polsku) do poczytania on-line, tak więc polecam najpierw ją poczytać, a wówczas nie będzie potrzeby wracania tutaj.
Instalacja na Debianie:
sudo apt-get install git-core gitosis
gitosis – pozwala na zarządzanie repozytoriami przez SSH
Utworzenie konta systemowego, które będę wykorzystywał do połączenia
adduser\ --system\ --shell /bin/sh\ --gecos 'git version control'\ --group\ --disabled-password\ --home /home/git\ git
Systemowy użytkownik o nawie git i katalogu domowym /home/git (tak gdzie będą przechowywane repozytoria). Użytkownik ma wyłączoną opcję logowania się hasłem, trzeba będzie użyć klucza publicznego.
Klucz publiczny należy sobie wygenerować na komputerze, z którego będę się łączył.
na linuxie: ssh-keygen -t rsa lub na windowsie: program PuTTYgen.
Wygenerowany klucz publiczny kopiuje sobie do katalogu /tmp a później dodaje go do autoryzowanych:
sudo su cd ~git sudo -H -u git gitosis-init < /tmp/id_rsa.pub
Trzeba jeszcze ustawić uprawnienia dla pliku
chmod 0755 /home/git/repositories/gitosis-admin.git/hooks/post-update
Warto również od razu ustawić swoje parametry identyfikacyjne, jakimi będą oznaczane wszystkie moje działania
git config --global user.name "Moja Nazwa" git config --global user.email mojnick@mojemail.com
Config gita jest również repozytorium, dlatego można je sobie sklonować na lokalny komputer i od razu sprawdzić czy działa autoryzacja kluczem:
git clone ssh://git@moj-serwer.net:5022/gitosis-admin.git
Repozytorium gitosis-admin powinno zostać ściągnięte na lokalny komputer. Powinien tam się znaleźć plik gitosis.conf oraz katalog keydir.
Żeby utworzyć nowe repozytorium należy edytować plik gitosis.conf i dodać wpis o nowym repozytorium (zaczyna się od linii [group galezieikonary])
[gitosis] [group gitosis-admin] writable = gitosis-admin members = tobedeja@serwer1 [group galezieikonary] writable = galezieikonary members = tobedeja@serwer1 bobrMateo@puszcza-piska
Trzeba jeszcze umieścić klucz publiczny nowego użytkownika (nazwa pliku tak sama jak pełna nazwa użytkownika +.pub) w katalogu keydir, a następnie dodać pliku to repozytorium, zatwierdzić i wysłać na serwer
git add gitosis.conf git add "keydir/bobrMateo@puszcza-piska.pub" git commit -m 'Dodano nowe repozytorium galezieikonary i bobra' git push
Przy dodawaniu klucza niezbędne jest ujęcie całości w cudzysłowie ze względu na znak małpy @. Można też bez cudzysłowów ale przed małpą trzeba postawić backslash\@
Aby zaistniała możliwość logowania się przez SSH przy użyciu klucza publicznego, użytkownik na serwerze musi posiadać klucz publiczny tego, kto chce się zalogować dopisany w pliku ~/.ssh/authorized_keys
Powyższa metoda dodawania użytkowników i ich kluczy publicznych powinna automatycznie aktualizować plik authorized_keys. Gitosis powinien automatycznie zarządzać plikiem authorized_keys.
W razie jakby coś nie działało, można to wykonać „ręcznie”, jak poniżej:
su git cd ~/.ssh cat /tmp/id_user.pub >> authorized_keys
W moim przypadku jednak coś poszło jednak niezgodnie z planem i niestety gitosis nie zarządza kluczami.
Póki co nie udało mi się zlokalizować przyczyny :/
Dlatego lepszym pomysłem będzie użycie Gitolite zamaist gitosis, chociażby z tego względu, że projekt gitosis wygląda na porzucony, od kilku lat nic się tam nie dzieje, a Gitolite ma więcej możliwości zarządzania dostępem.
Na serwerze należy utworzyć katalog i zainicjować centralne repozytorium:
cd /home/git/repositories mkdir galezieikonary.git cd galezieikonary.git git init --bare
Inicjalizacja repozytorium z parametrem bare oznacza, że jest to repozytorium centralne, z którego użytkownicy mogą pobierać i wysyłać, ale nie można na nim pracować bezpośrednio. Według ogólnie przyjętych zasad nazwa takiego repozytorium powinna kończyć się słowem .git
Na lokalnej maszynie należy utworzyć robocze repozytorium i połączyć je z centralnym:
mkdir galezieikonary cd galezieikonary git init git remote add gik ssh://git@serwer1.las.org/galezieikonary.git
Jakby wyskoczyło nagle, że repozytorium nie zostało odnalezione, to proszę spróbować wpisać pełną ścieżkę po nazwie serwera
ssh://git@serwer1.las.org/home/git/repositories/galezieikonary.git
Na razie nie mam pojęcia od czego to zależy, na jednym komputerze to samo repozytorium działa z pełną ścieżką na innym ze skróconą.
Zdefiniowałem sobie nazwę (gik) dla zdalnego serwera, na którym znajduje się centralne repozytorium.
Teraz można już zacząć pracować nad projektem i później przesłać pliki.
echo '<h1>Hello, wood!</h1>' > index.html git add index.html git commit -am "Dodano pierwszy plik!" git push gik +master:refs/heads/master
Aby wysłać na serwer każdą kolejną zmianę wystarczy wpisać:
git push gik
domyślnie będzie aktualizowana gałąź master.
Update:
Można również wymusić logowanie użytkownika git tylko przy użyciu klucza publicznego.
Trzeba dopisać na końcu pliku /etc/ssh/sshd_config
Match User git PasswordAuthentication no
a wersalkę chociaż masz? 😉
no jacha, że mam. Wersalka to podstawa! Nigdzie się bez niej nie ruszam 😉
Pingback: Git: Migracja gitosis do gitolite
Zwięźle, zrozumiale, bdb, dziękuję.