När jag började arbeta på min nuvarande arbetsplats ombads jag att skapa ett nytt GitHub-konto innan jag kunde bli medlem i företagets GitHub-organisation och i sin tur få tillgång till alla privata projektarkiv.
Det var inte förrän jag lämnade den bärbara datorn på jobbet i mitt skåp men ändå behövde få något gjort som jag kände ett behov av att hantera båda mina GitHub-konton på min personliga bärbara dator (vem behöver balans mellan arbete och privatliv?)
För att göra det hela mer komplicerat hänvisar det projekt jag arbetar med till andra privata arkiv i package.json
s beroendeblock och måste få tillgång till dem på npm install
, vilket som standard använder mitt personliga GitHub-kontos ssh-nyckel.
Efter några försök och misslyckanden, här är hur jag äntligen fick det att fungera:
Skapa en ny ssh-nyckel och lägg till den på GitHub-kontot för arbetet
$ ssh-keygen -t rsa -b 4096 -C "my_work_email@my_company.com"
Säg att den nya ssh-nyckeln hette ”work_rsa”, kopiera nu innehållet i den nyligen genererade offentliga nyckelfilen (work_rsa.pub i det här exemplet) och klistra in den i work GitHub-kontots inställningssida enligt beskrivningen på GitHubs hjälpsida.
Modifiera ssh-konfigurationsfilen ( ~/.ssh/config)
Öppna konfigurationsfilen i en textredigerare (skapa den om det inte finns någon i ~/.ssh-mappen ännu inte finns) och lägg till följande i den:
# 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
Klona arbetsprojektets repo (med en något annorlunda adress)
För att klona arbetsprojektets repo med hjälp av den nya ssh-nyckeln måste vi justera lite på repos ssh-adress. Host url måste matcha den Host som definierats i ssh-konfigurationsfilen från förra steget, nämligen, där det i adressen finns github.com
, ersätt det med github.com-work
.
T.ex, med följande ssh-adress för privat repo som vi får från GitHub:
[email protected]:/.git
Vi måste justera adressen så här innan vi kan git clone
den:
[email protected]:/.git
$ git clone [email protected]:/.git
Modifiera paketet.json för att installera de privata repo-beroendena
I det projekt som klonades lokalt hittar du de privata repo-beroendena i dess paket.json och gör samma ändring av deras repo-adress som i steg 3 (jag skulle inte lägga fram dessa ändringar eftersom det förstör allt för andra personer som också arbetar med det här projektet):
"dependencies": {
"private-module": "git+ssh://[email protected]/.git
...
}
*Det kan vara nödvändigt att först göra en manuell installation för en av de privata modulerna i terminalen:
$ npm install git+ssh://[email protected]/
Så att de privata reposen blir igenkända i ssh known_hosts
och kan nås under npm-installationen av projektets beroenden.