-
1. Pierwsze kroki
- 1.1 Wprowadzenie do kontroli wersji
- 1.2 Krótka historia Git
- 1.3 Podstawy Git
- 1.4 Linia poleceń
- 1.5 Instalacja Git
- 1.6 Wstępna konfiguracja Git
- 1.7 Uzyskiwanie pomocy
- 1.8 Podsumowanie
-
2. Podstawy Gita
- 2.1 Pierwsze repozytorium Gita
- 2.2 Rejestrowanie zmian w repozytorium
- 2.3 Podgląd historii rewizji
- 2.4 Cofanie zmian
- 2.5 Praca ze zdalnym repozytorium
- 2.6 Tagowanie
- 2.7 Aliasy
- 2.8 Podsumowanie
-
3. Gałęzie Gita
- 3.1 Czym jest gałąź
- 3.2 Podstawy rozgałęziania i scalania
- 3.3 Zarządzanie gałęziami
- 3.4 Sposoby pracy z gałęziami
- 3.5 Gałęzie zdalne
- 3.6 Zmiana bazy
- 3.7 Podsumowanie
-
4. Git na serwerze
- 4.1 Protokoły
- 4.2 Uruchomienie Git na serwerze
- 4.3 Generowanie Twojego publicznego klucza SSH
- 4.4 Konfigurowanie serwera
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Inne opcje hostowania przez podmioty zewnętrzne
- 4.10 Podsumowanie
-
5. Rozproszony Git
-
6. GitHub
-
7. Narzędzia Gita
- 7.1 Wskazywanie rewizji
- 7.2 Interaktywne używanie przechowali
- 7.3 Schowek i czyszczenie
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Przepisywanie historii
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugowanie z Gitem
- 7.11 Moduły zależne
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Podsumowanie
-
8. Dostosowywanie Gita
- 8.1 Konfiguracja Gita
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git i inne systemy
- 9.1 Git jako klient
- 9.2 Migracja do Gita
- 9.3 Podsumowanie
-
10. Mechanizmy wewnętrzne w Git
- 10.1 Komendy typu plumbing i porcelain
- 10.2 Obiekty Gita
- 10.3 Referencje w Git
- 10.4 Spakowane pliki (packfiles)
- 10.5 Refspec
- 10.6 Protokoły transferu
- 10.7 Konserwacja i odzyskiwanie danych
- 10.8 Environment Variables
- 10.9 Podsumowanie
-
A1. Appendix A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Summary
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
4.4 Git na serwerze - Konfigurowanie serwera
Konfigurowanie serwera
Spróbujmy prześledzić proces ustawienia dostępu SSH po stronie serwera.
Aby tego dokonać, użyjesz metody wykorzystującej authorized_keys
do uwierzytelnienia Twoich użytkowników.
Zakładamy również, że pracujesz na standardowej dystrybucji linuksowej (np. Ubuntu).
Pierwszym krokiem będzie utworzenie użytkownika git
i lokalizacji .ssh
dla tegoż użytkownika.
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
Następnie potrzebujesz dodać klucz SSH programisty do pliku authorized_keys
dla tego użytkownika.
Załóżmy ze otrzymałeś kilka kluczy mailem i zapisałeś je w pliku tymczasowym.
Klucze publiczne wyglądać będą podobnie do tego:
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
Po prostu dopisujesz je do pliku authorized_keys
użytkownika git
, który znajduje się w katalogu .ssh
:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
Od tego momentu możesz ustawić puste repozytorium poprzez komendę git init
z opcją --bare
, która zainicjuje repozytorium bez ścieżki roboczej:
$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /opt/git/project.git/
Teraz John, Josie lub Jessica ma możliwość wykonania wypchnięcia pierwszej wersji projektu do repozytorium poprzez dodanie go jako zdalny (remote) oraz wysłanie całej gałęzi projektu.
Aby tego dokonać należy połączyć się poprzez powłokę z maszyną i utworzyć nowe repozytorium za każdym razem kiedy chcemy dodać projekt.
Użyjmy gitserver
jako nazwę serwera, na którym ustawisz użytkownika git
oraz repozytorium.
Jeżeli odpalasz je lokalnie i ustawiasz DNS jako gitserver
do połączenia z tym serwerem, wtedy będziesz mógł użyć poniższych komend:
# na komputerze Johna
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/opt/git/project.git
$ git push origin master
W tym momencie użytkownicy mogą klonować projekt i wysyłać zmiany w prosty sposób:
$ git clone git@gitserver:/opt/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
Używając powyższej metody możesz łatwo utworzyć serwer Git (odczyt/zapis) dla niewielkiej grupy użytkowników.
Powinieneś pamiętać, że w tym momencie wszyscy dodani użytkownicy mogą również zalogować się na serwer i uzyskać dostęp do powłoki jako użytkownik git
. Jeśli chcesz to ograniczyć, będziesz musiał zmienić w pliku passwd
powłokę na coś innego.
Jako dodatkowy środek ostrożności możesz zastrzec dostęp do komend dla danego użytkownika git
poprzez narzędzie git-shell
, które dostępne jest wraz z Git.
Jeżeli ustawisz je jako powłokę po zalogowaniu Twojego użytkownika git
, to użytkownik ten nie będzie miał pełnego dostępu do Twojego serwera.
Aby tego użyć, podaj git-shell
zamiast bash
lub csh
jako powłokę po zalogowaniu Twojego użytkownika.
Aby to zrobić, musisz najpierw dodać git-shell
do /etc/shells
(o ile jeszcze go tam nie ma):
$ cat /etc/shells # sprawdź czy `git-shell` już tam jest. Jeśli nie...
$ which git-shell # upewnij się, że git-shell jest zainstalowane na serwerze
$ sudo vim /etc/shells # oraz dodaj ścieżkę do git-shell uzyskaną z poprzedniego polecenia
Teraz możesz edytować powłokę dla użytkownika używając chsh <nazwa_użytkownika>
:
$ sudo chsh git # oraz podaj ścieżkę do git-shell, zwykle jest to: /usr/bin/git-shell
Teraz użytkownik git
może użyć połączenia SSH tylko do wysłania i odebrania repozytorium Git, nie możne natomiast uzyskać dostępu do powłoki serwera.
Serwer odpowie odmową zalogowania, podobną do poniższej:
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
Teraz komendy sieciowe Git nadal będą działać poprawnie, ale użytkownicy nie będą w stanie uzyskać dostępu do powłoki.
Jak możemy wyczytać z wyjściowego komunikatu, możesz również ustawić katalog w katalogu domowym użytkownika git
, który dostosowuje nieco komendę git-shell
.
Na przykład, możesz ograniczyć komendy Git, które serwer będzie akceptował, lub możesz dostosować komunikat, który użytkownicy zobaczą, jeśli spróbują się zalogować w ten sposób.
Uruchom git help shell
aby uzyskać więcej informacji na temat dostosowywania powłoki.