Při nástupu na mé současné pracoviště jsem byl požádán o vytvoření nového účtu GitHub, abych se mohl stát členem firemní organizace GitHub a následně získat přístup ke všem soukromým úložištím projektů.
Teprve když jsem nechal pracovní notebook ve skříňce, ale přesto jsem potřeboval něco vyřídit, pocítil jsem potřebu spravovat oba své účty GitHub na svém osobním notebooku (kdo potřebuje rovnováhu mezi pracovním a soukromým životem?)
Aby to bylo ještě složitější, projekt, na kterém pracuji, se ve svém bloku závislostí package.json
odkazuje na další soukromé repozitáře a potřebuje k nim přistupovat na adrese npm install
, což ve výchozím nastavení znamená použití ssh-klíče mého osobního účtu GitHub.
Po několika pokusech a neúspěších jsem nakonec dosáhl toho, že to funguje takto:
Vytvořte nový ssh-klíč a přidejte ho k pracovnímu účtu GitHub
$ ssh-keygen -t rsa -b 4096 -C "my_work_email@my_company.com"
Řekněme, že nový ssh-klíč byl pojmenován „work_rsa“, nyní zkopírujte obsah nově vygenerovaného souboru veřejného klíče (work_rsa.pub v tomto příkladu) a vložte jej na stránku nastavení pracovního účtu GitHub, jak je popsáno na stránce nápovědy GitHub.
Změňte konfigurační soubor ssh ( ~/.ssh/config)
Otevřete konfigurační soubor v textovém editoru (vytvořte jej, pokud není v ~/.ssh) a přidejte do něj následující:
# Personal GitHub account
Host github.com
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa# Work GitHub account
Host github.com-work
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/work_rsa
Klonování repozitáře pracovního projektu (s trochu jinou adresou)
Pro klonování repozitáře pracovního projektu pomocí nového ssh klíče musíme trochu upravit adresu ssh repozitáře. Adresa url hostitele musí odpovídat hostiteli definovanému v konfiguračním souboru ssh z minulého kroku, konkrétně tam, kde je v adrese github.com
, ji nahraďte github.com-work
.
Např, s následující adresou ssh privátního repozitáře, kterou získáme ze služby GitHub:
[email protected]:/.git
Ještě před git clone
jeho adresu musíme upravit takto:
[email protected]:/.git
$ git clone [email protected]:/.git
Modifikujte balíček.json, abyste nainstalovali závislosti na soukromém repozitáři
V projektu, který se klonuje lokálně, najděte v jeho balíčku závislosti na soukromém repozitáři.json a proveďte stejnou úpravu jejich adresy repozitáře jako v kroku 3 (tyto úpravy bych neodepisoval, protože se tím rozbije vše ostatním lidem, kteří na tomto projektu také pracují):
"dependencies": {
"private-module": "git+ssh://[email protected]/.git
...
}
*Možná bude nutné nejprve provést ruční instalaci jednoho z privátních modulů v terminálu:
$ npm install git+ssh://[email protected]/
Aby se privátní repozitáře rozpoznaly v ssh known_hosts
a mohly být přístupné při npm instalaci závislostí projektu.