-
1. Úvod
- 1.1 Správa verzí
- 1.2 Stručná historie systému Git
- 1.3 Základy systému Git
- 1.4 Příkazový řádek
- 1.5 Instalace systému Git
- 1.6 První nastavení systému Git
- 1.7 Získání nápovědy
- 1.8 Shrnutí
-
2. Základy práce se systémem Git
-
3. Větve v systému Git
- 3.1 Větve v kostce
- 3.2 Základy větvení a slučování
- 3.3 Správa větví
- 3.4 Postupy při práci s větvemi
- 3.5 Vzdálené větve
- 3.6 Přeskládání
- 3.7 Shrnutí
-
4. Git na serveru
- 4.1 Protokoly
- 4.2 Zprovoznění Gitu na serveru
- 4.3 Generování veřejného klíče SSH
- 4.4 Nastavení serveru
- 4.5 Démon Git
- 4.6 Chytrý HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Možnosti hostování u třetí strany
- 4.10 Shrnutí
-
5. Distribuovaný Git
- 5.1 Distribuované pracovní postupy
- 5.2 Přispívání do projektu
- 5.3 Správa projektu
- 5.4 Shrnutí
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Ladění v systému Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Shrnutí
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Atributy Git
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Shrnutí
-
9. Git a ostatní systémy
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Shrnutí
-
10. Git Internals
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Balíčkové soubory
- 10.5 The Refspec
- 10.6 Přenosové protokoly
- 10.7 Správa a obnova dat
- 10.8 Environment Variables
- 10.9 Shrnutí
-
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 Shrnutí
-
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 serveru - Nastavení serveru
Nastavení serveru
Projděme si nastavení SSH přístupu na straně serveru.
V tomto příkladu použijeme k ověření identity uživatelů metodu authorized_keys
.
Předpokládáme také, že pracujete se standardní linuxovou distribucí, jako je například Ubuntu.
Nejdříve vytvoříte uživatele git
a adresář .ssh
pro tohoto uživatele.
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
Dále musíte pro uživatele git
přidat do souboru authorized_keys
veřejné SSH klíče některých svých vývojářů.
Předpokládejme, že jste e-mailem dostali několik důvěryhodných klíčů a uložili jste je do dočasných souborů.
Veřejné klíče vypadají opět nějak takto:
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
Jednoduše je připojíte na konec souboru authorized_keys
, který patří uživateli git
a nachází se v jeho adresáři .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
Teď pro ně můžete vytvořit holý repozitář spuštěním příkazu git init
s volbou --bare
. Tím se inicializuje repozitář bez pracovního adresáře:
$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /opt/git/project.git/
John, Josie a Jessica pak mohou do tohoto repozitáře odeslat první verzi svého projektu tak, že si ho přidají jako vzdálený repozitář a odešlou do něj svou větev.
Všimněte si, že pokaždé, když chcete přidat nějaký projekt, musí se k počítači někdo připojit a vytvořit holý repozitář.
Přidělme serveru, na kterém jste nastavili uživatele git
a vytvořili repozitář, název gitserver
.
Pokud server provozujete interně a nastavíte DNS pro gitserver
tak, aby ukazoval na tento server, můžete používat klasickou podobu příkazů (předpokládejme, že myproject
je existující projekt obsahující soubory):
# on John's computer
$ 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
Ostatní nyní mohou velmi snadno repozitář naklonovat a odesílat do něj změny:
$ git clone git@gitserver:/opt/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
Tímto způsobem lze rychle zprovoznit gitový server s přístupem pro čtení i zápis pro menší počet vývojářů.
Mělo by vás napadnout, že se všichni tito uživatelé mohou k serveru přihlásit a jako uživatel git
používat nějaký shell.
Pokud chcete takový přístup omezit, budete muset běžný shell v souboru passwd
změnit na něco jiného.
Uživatele git
můžete snadno omezit tak, aby mohl provádět jen činnosti spojené s Gitem, a to pomocí shellu s omezenou funkčností, který se nazývá git-shell
a který se dodává jako součást Gitu.
Pokud jej uživateli git
nastavíte jako shell spouštěný při přihlášení, pak uživatel git
nemůže k serveru získat běžný přístup.
Pokud toho chcete využít, nastavte uživateli git-shell
jako přihlašovací shell — místo bash
nebo csh
.
Pokud dosud není k dispozici, musíte nejdříve do /etc/shells
přidat git-shell
:
$ cat /etc/shells # Podívejte se, jestli už tam git-shell je. A pokud ne...
$ which git-shell # ujistěte se, že je git-shell ve vašem systému nainstalován
$ sudo vim /etc/shells # a přidejte cestu ke git-shell z minulého příkazu.
Teď můžete uživateli změnit shell příkazem chsh <uživatel>
:
$ sudo chsh git # a vložte cestu ke git-shell; obvykle: /usr/bin/git-shell
Uživatel git
teď může SSH spojení používat jen k odesílání a k stahování gitových repozitářů a na počítači nemůže provádět operace dostupné v klasickém shellu.
Pokud vyzkoušíte následující příkaz, zobrazí se zpráva o zamítnutí přihlášení:
$ 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.
Síťové příkazy Gitu budou stále pracovat bez problémů, ale uživatelé se nedostanou k běžnému shellu.
Jak výstup příkazu napovídá, můžete v domácím adresáři uživatele git
vytvořit podadresář, který příkazy git-shell
trochu upravuje.
Můžete například omezit, které gitové příkazy bude server akceptovat, nebo můžete upravit zprávu, která se uživateli vypíše při pokusu použít SSH nepovoleným způsobem.
Více informací o přizpůsobení shellu se dozvíte po spuštění git help shell
.