Manage multiple GitHub accounts on the same machine
Bài đăng này đã không được cập nhật trong 5 năm
Thằng bạn mình, nó có một project rất hay, nên xin join vào để học hỏi vài thứ. Nhưng ngại cái là mình chỉ 1 github account của công ty. Giờ join vào, lỡ sau này bị đuổi việc thì phiền. Mà lâu nay có bao giờ để tâm tới mấy cái account git này đâu vì toàn làm cho công ty. Thế là lên google mò mẫn các kiểu.
Cuối cùng tìm được một keyword khá chuẩn: manage multiple git accounts. Sau thời gian đọc vài bài, thì mình muốn chia sẻ lại một bài mà dễ đọc và dễ làm theo nhất. Tiện thể note lại cho bản thân, sau này đỡ phải đi tìm.
Bài viết mình có nhiều mục, nhưng tới đây thì chưa thể tưởng tượng được có bao nhiêu mục nên viết đến đâu đánh số đến đấy.
1. Tạo SSH keys
Mình giả sử các bạn đã tạo ra ít nhất một SSH key. Nếu chưa thì các bạn có thể tham khảo ở đây: https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
Nếu đã tạo rồi, các bạn có thể dùng lệnh này để liệt kê các cặp public và private key: ls -al ~/.ssh
. Hiện tại các bạn đã có một cặp key: id_rsa
và id_rsa.pub
được tạo (by default) ứng với email của công ty (ex: "email@company_email.com").
Bây giờ chúng ta sẽ tạo ra một SSH key khác ứng với email cá nhân (ex:"email@_email.com" ):
$ ssh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_personal"
Vậy là hiện tại chúng ta có 2 key khác nhau:
~/.ssh/id_rsa
~/.ssh/id_rsa_personal
2. Add SSH key vào tài khoản Git tương ứng
Bây giờ mình sẽ add cái SSH key mà mình tạo với email cá nhân vào tài khoản git cá nhân nhé:
Đầu tiên là copy public key: pbcopy < ~/.ssh/id_rsa.pub
Sau đó login vào account Git cá nhân và làm theo các bước sau:
- Di chuyển đến màn hình
Settings
- Chọn mục
SSH and GPG keys
từ menu bên trái - Click vào
New SSH key
, đặt một cái title phù hợp, sau đó paste cái key vừa copy vào đó - Click
Add key
button - DONE!
3. Đăng kí SSH key với ssh-agent
Giống như bán vé máy bay, muốn bán thì phải mở đại lí. Tương tự, muốn chứng minh gới Git là ta có thể tạo một kết nối hợp lệ, thì phải đăng kí cái SSH đấy vào ssh-agent.
Cú pháp đăng kí:
Với tài khoản của công ty: ssh-add ~/.ssh/id_rsa
Với tài khoản cá nhân: ssh-add ~/.ssh/id_rsa_personal
Kiểm tra lại bằng cách: eval "$(ssh-agent -s)"
Đến đây thì mọi công tác chuẩn bị đã xong. Phần quan trọng đó là quản lí như thế nào, sẽ được giới thiệu tiếp theo đây.
4. Tạo SSH config file
Bây giờ ta sẽ đi đến bước config để biết được cái nào dùng cho domain nào
File SSH config đã có sẵn tại ~/.ssh/config
.
Nếu chưa thì các bạn dùng lệnh sau để tạo:
$ cd ~/.ssh/
$ touch config
Bây giờ, hãy mở file config lên và điền nội dung vào giống như mẫu dưới đây:
# Company domain
Host [company-name (ex: MyCompany)]
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# Personal domain
Host [personal-name (ex: Personal)]
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_personnal
(Lưu ý: những đoạn text nào mình đặt trong
[...]
là có thể thay đổi, miễn sao dễ nhớ)
"Personal" là git Github user id dùng cho account cá nhân. Nó giống như 1 ký kiệu để phân biệt với các Git account khác. Tất nhiên các bạn có thể đổi tên tuỳ ý như mình đã nói ở trên. Những thông tin này liên quan đến remote mà chúng ra sẽ clone sau này.
Những dòng lệnh ở trên sẽ thông báo với ssh-agent là:
- Sử dụng id_rsa để xác thực với Git account tương ứng với email của công ty
- Sử dụng id_rsa_personal để xác thực với Git account tương ứng với email của cá nhân
5. Một SSH key được activce trong ssh-agent tại một thời điêm xác định
Việc config như thế không chịu bất kì qui tắc nào cả và cũng không quan tâm key đó đã tồn tại hay chưa. Do đó chúng ta phải chắc chắn là ssh-agent phải có những key tương ứng tại thời điểm xác thực với Git.
Để kiểm tra, ta sẽ thực hiện các thao tác sau:
Liệt kê tất cả các SSH key đã được add vào ssh-agent: ssh-add -l
Để remove tất cả các SSH đã được add: ssh-add -D
Sau đó, ta sẽ tự add lại những key cần để xác thực, và được liệt kê trong file config vào ssh-agent theo cú pháp:
ssh-add ~/.ssh/[name]
với "[name]" là tên của private key tương ứng với email của Git account. (ex: id_rsa_personal)
Bây giờ nó có thể map với Git account tương ứng và ta có thể dùng nó để xác thực.
Làm tương tự với các tài khoản Git còn lại nhé!
6. Thực hành với mẫu ví dụ cụ thể
Hiện tại chúng ta đang join vào repo của công ty:
git@github.com:company-name/company-project-name.git
Chúng ta sẽ clone cái project này về máy:
Thay vì sử dụng lệnh: git clone git@github.com:company-name/company-project-name.git
Chúng ta sẽ sử dụng lệnh: git clone git@MyCompany:company-name/company-project-name.git
Thử list ra danh sách remote dưới local, sử dụng: git remote -v
Lúc này, chúng ta có thể pull hay push các kiểu bà liễu lên repo của công ty rồi. Làm tương tự lệnh clone trên với repo cá nhân.
Khi hoàn thành, tại mỗi branch, chúng ta sẽ ko cần quan tâm là lệnh git push origin branch-name
sẽ push cái nhánh của mình lên repo nào nữa. Nó sẽ dựa vào domain mà mình đã config mà làm việc.
Đến đây thì mọi việc đã hoàn thành. Tay cũng đã mỏi.
Hy vọng là nó sẽ đủ chi tiết để giúp mọi người quản lí các account Git của mình.
Link chính chủ: How to manage multiple GitHub accounts on a single machine with SSH keys
THÂN ÁI!
All rights reserved