Git multi account
Ko Ko Ye
Founder
4 min read

Developer အတော်များများဟာ Email တခုနဲ့ ssh key ၂ ခု ၃ ခုလောက်ထပ် ပိုသုံးကြလေ့ မရှိပါဘူး။ Personal Development နဲ့ Contract Project တွေ Freelance Project တွေမှာ အကောင့်တခု အီးမေးလ် တခု ကီးတခုနဲ့တင် အေးအေးဆေးဆေး အဆင်ပြေပါတယ်။
ဒါပေမယ့် အများစုက ကုမ္ပဏီတွေ ရောက်တဲ့အခါမှာတော့ ကုမ္ပဏီရဲ့ လိုအပ်ချက်နဲ့ လုံခြုံရေးအရ ကုမ္ပဏီရဲ့ email လိပ်စာနဲ့ အကောင့်တွေကို အသုံးပြုရပါတယ်။ သာမန် ယူဇာ အကောင့်တွေလို မဟုတ်ပဲ မဖြစ်မနေ 2FA သုံးခိုင်းတာမျိုး ကုမ္ပဏီ ဒိုးမိန်း မဟုတ်ရင် ဝင်ခွင့်မရတာမျိုး တင်းကြပ်ထားမှလဲ အတန်အသင့် စိတ်ချရမှာမို့ပါ။
USE
ကျွန်တော်ကတော့ bash base “use” လောက်နဲ့တင် အဆင်ပြေပါတယ်။ use personal, use company-name ဆိုတာမျိုးနဲ့တင် Default နေရာမှာ SSH, Name, Email, စတဲ့ ENV တွေ ပြောင်းသုံးတာမျိုးပါ။ ~/.use ဆိုတဲ့ အောက်မှာ သက်ဆိုင်ရာ ဖိုလ်ဒါနိမ်းပေးပြီး အထဲမှာ သက်ဆိုင်ရာ Config တွေ ပစ်ထည့်လိုက်တာမျိုးပါ။ ~/.use/{personal,company}/.profile ကနေ လှမ်းခေါ်တာပါ။

ဒါပေမယ့် ဟိုကုတ်ဆွဲ ဒီကုတ်တင် ချက်ခြင်းလုပ်သူတွေနဲ့တော့ အဆင်မပြေနေပါဘူး။ နောက် တာမီနယ် သုံးလေး ၅ ခု ဖွင့်တတ်သူတွေနဲ့လဲ မကိုက်ပါဘူး။ နောက်ဆုံးတခုက Windows ကနေ Git Bash သုံးသူအတွက် Setup လုပ်တာလဲ make မရှိဘာမရှိ အဆင်မပြေပါဘူး။
နောက်ထပ် အခြားနည်းတွေလဲ ရှိသေးတာမို့ အလျှင်းသင့် အဆင်ပြေသလို အသုံးပြုနိုင်ဖို့ ချရေးပေးလိုက်ပါတယ်။
SSH KEY
ssh key ပြုလုပ်ခြင်း
ဒီဟာကတော့ git ကို https ထက် ssh ကို ဦးစားပေးတဲ့ဂိုက်ပါ။
ssh key လိုအပ်မှာဖြစ်လို့ တကြိမ်တခါတော့ လုပ်ရမှာပါပဲ။ တိတိကျကျနဲ့ သေချာကြည့်ပြီးလုပ်သင့်တဲ့ အထဲပါပါတယ်။ နောက်မို့ တယောက်တည်း ကီးတွေ အများကြီး ဖြစ်နေတာ လိုက်ဖျက်ရတာ လိုက်ပြောင်းရတာ မလွယ်ပါဘူး။
ကျွန်တော်တို့ဆိုရင် ssh / gpg နဲ့ email အကုန် ချိတ်ထားတာမို့ တခုခု ပြောင်းမိရင် လိုက်လုပ်ရမှာတွေ ဆိုက်တွေ Config တွေ လက်မှတ်ပြန်ထိုးရမှာတွေ မနည်းမနောမို့ မထိဖြစ်ကြပါဘူး။
အစတည်းက ရှိပြီးသား အကောင့်ရဲ့ ကီးကတော့ မထိတော့တာ အကောင်းဆုံးပါပဲ။ ဒီတော့ ကုမ္ပဏီအတွက် ကီးကို အသစ်ထုတ်ကြတာပေါ့။
ပုံမှန်ဆို ssh-keygen နှိပ်ရင် တဆင့်စီ မေးပါတယ်။ အဆင့်ဆင့် သွားရုံပါပဲ။ ဒီမှာတော့ တခါတည်း အကုန်ရောပြီး ရိုက်ပြထားပါမယ်။
-t ဆိုတာ type ဖြစ်ပြီး ပုံမှန် RSA ကိုသုံးပါမယ်။ -b ကတော့ bits ဖြစ်ပြီး 2048 ထက် မနည်းသင့်ပါဘူးတဲ့။ ဒီမှာတော့ 4096 နဲ့ ထုတ်ပြထားပါတယ်။ -C ကတော့ comments ထည့်ပေးဖို့ပါ။ ဒီနေရာမှာတော့ Email ကို Comment အနေနဲ့ ထည့်ပေးထားပါတယ်။ ဖိုင်ရွေးတဲ့အချိန်မှာ ဒီအတိုင်း Enter ခေါက်မိရင် အရင် မူလဖိုင်တွေ ပျက်သွားပါလိမ့်မယ်။ လိပ်စာ အသေအချာ ပေးဖို့ လိုအပ်ပါတယ်။ ဘယ်နားမှာ သိမ်းမယ်ဆိုတဲ့ လိပ်စာကို တခါတည်းသုံးချင်လို့ -f နဲ့ နောက်ကလိပ်စာပါရိုက်ပြီး နမူနာ ပြထားပါတယ်။ Password ကို တောင်းတဲ့အချိန်မှာ ပေးလို့ရပါတယ်။ တခါတည်း တန်းရိုက်ချင်ရင် -P နဲ့ ပေးလို့ရပါတယ်။ မပေးချင်ရင်တော့ ဒီတိုင်း အလွတ်ပေးပြီး Enter ပဲခေါက်ပါ။
ssh-keygen -t rsa -b 4096 -C "devops@company.com" -f ~/.ssh/devops.company
ဒါဆိုရင် ကီးလေးသိမ်းသွားပါမယ်။
အောက်မှာ ပြထားတဲ့ Fingerprint နဲ့ Maps ပါသိမ်းခိုင်းတာမျိုးရှိပါတယ်။ သိပ်အရေးမကြီးသေးရင်တော့ မသိမ်းပါနဲ့။
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/devops.company.
Your public key has been saved in /home/user/.ssh/devops.company.pub.
The key fingerprint is:
SHA256:1z4NiE4Gq641B2PQcAKtOwO9B4+nMUYbx5szgxMQ/Cw devops@company.com
The key's randomart image is:
+---[RSA 4096]----+
|++o . |
|...= |
| ++.. . |
|oE*+o o . o |
|.o.@+o. S o o |
|+ X.X+ + . . o |
| + B++. . o . |
| .o o . |
| ... |
+----[SHA256]-----+
ဒါဆိုရင် ကီးကို သုံးလို့ရပါပြီ။
/home/user/.ssh/devops.company.pub
ဆိုတဲ့ ကီးကို ကူးပြီး သက်ဆိုင်ရာ ဆာဗာတွေ ဝက်ဆိုက်တွေမှာ ထည့်သုံးရတော့မှာပါ။
ဥပမာ https://github.com/settings/ssh/new
နောက်က .pub မပါတဲ့ ကီးဖိုင်က Private ဖိုင်ပါ။ ဘယ်သူမှ မပေးပဲ လုံခြုံအောင် သိမ်းထားရမှာပါ။
SSH CONFIG
SSH Configuration မှာ url ကို alias လုပ်ပြီး github.com နဲ့ github.com-work ဆိုတာမျိုး လုပ်သုံးတာပါ။
~/.ssh/config ထဲမှာ အလွယ်တကူ လုပ်လို့ရပေမယ့် URL ကိုကူးပြီး ကြားထဲ လိုက်လိုက်ပြောင်းရလို့ မကြိုက်ကြပါဘူး။
နမူနာတော့ ပြလိုက်ပါတယ်။
# Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host github-COMPANY
HostName github.com
User git
IdentityFile ~/.ssh/devops.company
URL EXAMPLE
git@github-COMPANY:Company/my-company.git
git@github.com:personal/my-personal.git
FOLDER BASE
Folder Base သတ်မှတ်ခြင်း
ဒါကတော့ လုပ်ရလွယ်တယ် ရှင်းပါတယ်
git folder တွေကို ခွဲထားပြီး သက်ဆိုင်ရာ ဖိုလ်ဒါအလိုက် အကောင့် ပြောင်းပေးလိုက်တဲ့သဘောပါပဲ။
မူရင်း ~/.gitconfig မှာ ဒီလိုရေးပါ။
[user]
name = Ko Ko Ye
email = kokoye2007@gmail.com
[includeIf "gitdir:~/work/"]
path = ~/work/.gitconfig
ဒါဆိုရင်တော့ ရှင်းပါတယ်။ ~/work ဆိုတဲ့ နေရာကလွဲလို့ ကျန်တာ Global Config အနေနဲ့ Ko Ko Ye – kokoye2007@gmail.com ကို သုံးသွားမှာပါ။
~/work အောက်မှာဆိုရင်တော့ သတ်မှတ်ထားတဲ့ ~/work/.gitconfig ကို ယူသုံးပါလိမ့်မယ်။
ဒီတော့ ~/work/.gitconfig မှာ ဒီလို ရေးမှာပေါ့
[user]
name = DevOps
email = devops@company.com
ဒီလိုဆို သက်ဆိုင်ရာ ပရောဂျက်တွေကို ဖိုလ်ဒါ ခွဲထားပြီး သုံးနိုင်ပါပြီ။
URL Base
ဒါကတော့ URL ပေါ် အခြေခံပြီး အကောင့် ခွဲသုံးတာပါ။ အပေါ်ကဟာက local base ဆိုရင် ဒီဟာက server base ပေါ့။
သူကတော့ git ရဲ့ hooks ကိုသုံးပြီး post-checkout ကနေ ချိန်းပေးတာပါ။
https://github.com/DrVanScott/git-clone-init
မူရင်း git မှာ နမူနာပါပေမယ့် ဖတ်လို့ရအောင် ကူးတင်ပေးလိုက်ပါတယ်။
case "$url" in
*@github.com:* ) email="my-public@email"; name="public name";;
*//github.com/* ) email="my-public@email"; name="public name";;
*@corp.com:* ) email="my-corporate@email"; name="real name";;
*//corp.com/* ) email="my-corporate@email"; name="real name";;
esac
BASH ALIAS
အလွယ်ဆုံးနဲ့ အကောင်းဆုံး နည်းပါပဲ။ နမူနာလေး ရေးပြထားပါတယ်။ တကယ်လို့ ကိုယ့် သီးသန့်ကီးက ~/.ssh/dev-ops ဆိုပါစို့။ ဒီလို သုံးလို့ရပါတယ်။
ssh-agent $(ssh-add ~/.ssh/dev-ops; git clone URL)
ဒီလို အရှည်ကြီး ရေးရတာ မကြိုက်ရင် alias ထည့်ထားရမှာပေါ့။
alias git-com='ssh-agent $(ssh-add ~/.ssh/dev-ops; git "$@")'
ပြီးရင် ဒီလိုသုံးပါ။
git-com clone git@gitlab.com:your-company/project.git
ဒါဆိုရင်တော့ ရပြီလို့ ထင်ပါတယ်နော်။
အပေါ်က alias လေးကို ~/.bashrc အောက်ထဲမှာ ထည့်ထားရင် အရှေ့က git အစား git-com သို့မဟုတ် git2 ကြိုက်ရတာ နာမည်ပေးပြီး SSH တခုစီနဲ့ သုံးလို့ရပြီပေါ့။
URL REGEX
ဒါကတော့ ထည့်မရေးထားပေးပေမယ့် ရှိတာ သိစေချင်တာပါ။ git ထဲမှာ url ပေါ်အခြေခံပြီး key တွေကို သာမက git နဲ့ပတ်သက်တဲ့ config တွေကို သတ်မှတ်နိုင်တဲ့ ဖန်ရှင်တခုပါ။ အားရင် တင်ပေးပါ့မယ်။
အကုန်လုံးပဲ အဆင်ပြေကြပါစေနော်။
ရေးထားတာ အဆင့်မြင့်မဟုတ်သလို အခြေခံလဲ မဟုတ်ပဲ လင်းနပ်ကို နည်းနည်းသုံးတတ်မှ ဖတ်လို့သုံးလို့ရမှာ ဖြစ်လို့ လိုအပ်တာတွေ ရှိနေပါလိမ့်မယ်။
ဖြည့်စွက်ပြီး ပေးပို့မယ်ဆိုရင်တော့ ခရက်ဒစ်ပေးပြီး ဖြည့်ပါ့မယ်။
[1] https://stackoverflow.com/questions/4220416/can-i-specify-multiple-users-for-myself-in-gitconfig
[2] https://stackoverflow.com/questions/3860112/multiple-github-accounts-on-the-same-computer
[3] https://github.com/DrVanScott/git-clone-init
[4] https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
[5] https://docs.gitlab.com/ee/ssh/
[6] https://stackoverflow.com/questions/4565700/how-to-specify-the-private-ssh-key-to-use-when-executing-shell-command-on-git
More in Application & Softwares
Ubuntu သွက်လက် မြန်ဆန်စေမည့် နည်းလမ်းများ
ask.ubuntu mm.net မှ မေးခွန်းကို ဖြေကြားထားခြင်းဖြစ်ပါသည်။ Swap ကို ပြင်ဆင်ပါ။ ဖိုင်ထဲတွင် vm.swappiness ကို ရှာကာ 10 ဟု ပြောင်းပါ။ အသေးစိတ်…
2 min read
Samba Configuration
Ubuntu 16.0.4 တွင် samba server installation and configuration ပြုလုပ်နည်းကို ပြောပြပေးသွားပါမည်။ Samba ဆိုသည်မှာ File Server တစ်မျိုးဖြစ်ပြီး Linux နှင့် တခြား OS တို့ကို…
2 min read
Raspberry Pi Multiboot with berryboot – Parrotsec run GNS3 cisco on RaspberryPi
RaspberryPi Multiboot with berryboot Parrotsec run GNS3 cisco on RaspberryPi ပထမဆုံး Browser ကနေပြီတော့ https://sourceforge.net/projects/berryboot/ berryboot zip file ကို ဒေါင်းပါ…
2 min read


