Przyłączając się do mojego obecnego miejsca pracy, zostałem poproszony o utworzenie nowego konta GitHub, zanim będę mógł być członkiem firmowej organizacji GitHub i z kolei uzyskać dostęp do wszystkich prywatnych repozytoriów projektu.
Dopiero gdy zostawiłem służbowego laptopa w szafce, ale wciąż musiałem coś załatwić, poczułem potrzebę zarządzania oboma moimi kontami GitHub na moim osobistym laptopie (kto potrzebuje równowagi między pracą a życiem prywatnym?)
Aby uczynić rzeczy bardziej skomplikowanymi, projekt, nad którym pracuję, odwołuje się do innych prywatnych repozytoriów w swoim bloku package.json
’s dependencies i musi uzyskać do nich dostęp na npm install
, który domyślnie używa klucza ssh mojego osobistego konta GitHub.
Po kilku próbach i niepowodzeniach, oto jak w końcu udało mi się to zrobić:
Utwórz nowy klucz ssh i dodaj go do roboczego konta GitHub
$ ssh-keygen -t rsa -b 4096 -C "my_work_email@my_company.com"
Mówimy, że nowy klucz ssh został nazwany „work_rsa”, teraz skopiuj zawartość nowo wygenerowanego pliku klucza publicznego (work_rsa.pub w tym przykładzie) i wklej go na stronie ustawień roboczego konta GitHub, jak opisano na stronie pomocy GitHub.
Modyfikuj plik konfiguracyjny ssh ( ~/.ssh/config)
Otwórz plik konfiguracyjny w edytorze tekstu (utwórz go, jeśli nie ma go jeszcze w folderze ~/.ssh) i dodaj do niego następujące informacje:
# 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
Klonuj repo projektu roboczego (z nieco innym adresem)
Aby sklonować repo projektu roboczego używając nowego klucza ssh, musimy trochę podrasować adres ssh repo. Adres url musi pasować do hosta zdefiniowanego w pliku konfiguracyjnym ssh z ostatniego kroku, mianowicie, tam gdzie w adresie jest github.com
, zamień go na github.com-work
.
Np, z następującym adresem prywatnego repo ssh, który dostaliśmy z GitHuba:
[email protected]:/.git
Musimy tak zmodyfikować jego adres, zanim będziemy mogli go git clone
zainstalować:
[email protected]:/.git
$ git clone [email protected]:/.git
Zmodyfikuj pakiet.json, aby zainstalować prywatne zależności repo
W projekcie, który sklonował się lokalnie, znajdź prywatne zależności repo w jego package.json i wykonaj tę samą modyfikację ich adresu repo, co w kroku 3 (nie popełniłbym tych modyfikacji, ponieważ łamie to wszystko dla innych ludzi, którzy również pracują nad tym projektem):
"dependencies": {
"private-module": "git+ssh://[email protected]/.git
...
}
*Może być konieczne, aby najpierw wykonać ręczną instalację dla jednego z prywatnych modułów w terminalu:
$ npm install git+ssh://[email protected]/
Aby prywatne repo zostało rozpoznane w ssh known_hosts
i mogło być dostępne podczas npm instalującego zależności projektu.