Version Control

အချိန်နှင့်အမျှ ပြောင်းလဲနေသည့် အရာတစ်ခုခုကို မိမိလုပ်ဆောင်နေသည့်အခါ ထိုအပြောင်းအလဲများကို ခြေရာခံ (track) နိုင်ခြင်းက အသုံးဝင်ပါသည်။ ဤသို့ပြုလုပ်ရခြင်းအတွက် အကြောင်းအရင်းများစွာ ရှိပါသည် - ၎င်းသည် မည်သည့်အရာများ ပြောင်းလဲသွားခဲ့သည်၊ မည်သို့ ပြန်ပြင်ရမည်၊ မည်သူ ပြောင်းလဲခဲ့သည်နှင့် မည်သည့်အတွက်ကြောင့် ပြောင်းလဲခဲ့ရသည် စသည်တို့ကို မှတ်တမ်းတစ်ခုအနေဖြင့် ပေးစွမ်းနိုင်သောကြောင့် ဖြစ်သည်။ Version control systems (VCS) များသည် သင့်အား ထိုစွမ်းဆောင်ရည်ကို ပေးစွမ်းပါသည်။ ၎င်းတို့သည် သင့်အား ပြောင်းလဲမှုကို ဖော်ပြသည့် စာတို (message) တစ်ခုနှင့်အတူ ဖိုင်အစုအဝေးတစ်ခုသို့ အပြောင်းအလဲများကို commit လုပ်ခွင့်ပြုသလို၊ အတိတ်က မိမိပြုလုပ်ခဲ့သော အပြောင်းအလဲများကို ပြန်လည် ကြည့်ရှုခြင်းနှင့် ပြန်ပြင်ခြင်းတို့ကိုလည်း ပြုလုပ်နိုင်စေပါသည်။

VCS အများစုသည် သုံးစွဲသူ အများအပြားကြားတွင် commit ရာဇဝင် (history) ကို မျှဝေခြင်းအား အထောက်အပံ့ ပေးပါသည်။ ဤသည်မှာ အဆင်ပြေချောမွေ့သော ပူးပေါင်းဆောင်ရွက်မှုကို ဖြစ်စေပါသည် - ကျွန်ုပ် ပြုလုပ်ခဲ့သည့် အပြောင်းအလဲများကို သင့်အနေဖြင့် မြင်တွေ့နိုင်ပြီး၊ သင် ပြုလုပ်ခဲ့သည့် အပြောင်းအလဲများကိုလည်း ကျွန်ုပ် မြင်တွေ့နိုင်ပါသည်။ ထို့အပြင် VCS သည် အပြောင်းအလဲများ ကို ခြေရာခံထားသောကြောင့် ကျွန်ုပ်တို့၏ အပြောင်းအလဲများသည် သီးခြားစီဖြစ်နေသမျှ ကာလပတ်လုံး ၎င်းတို့ကို မည်သို့ပေါင်းစပ်ရမည်ကို (အမြဲတမ်း မဟုတ်သော်လည်း) မကြာခဏ အလိုအလျောက် သီးခြားခွဲခြား ပေါင်းစပ်ပေးနိုင်ပါသည်။

၎င်းတို့ အထောက်အပံ့ပေးသည့် အရာများ၊ အလုပ်လုပ်ပုံများနှင့် သင် ချိတ်ဆက်ဆောင်ရွက်ပုံများအပေါ် မူတည်၍ ကွဲပြားမှုများစွာရှိသော VCS များ မြောက်မြားစွာ ရှိကြပါသည်။ ဤနေရာတွင် ကျွန်ုပ်တို့သည် အသုံးအများဆုံး စနစ်တစ်ခုဖြစ်သည့် git ကို အဓိကထား လေ့လာသွားမည်ဖြစ်သော်လည်း၊ Mercurial ကိုလည်း လေ့လာကြည့်ပါရန် အကြံပြုလိုပါသည်။

ထိုသို့ ပြောကြားပြီးနောက် – အဓိက မှတ်စုတိုများဆီသို့ သွားကြရအောင်။

git ဆိုတာ မည်းမှောင်တဲ့ အမှောင်မှော်ပညာ ဖြစ်ပါသလား။

လုံးဝ မဟုတ်ပါဘူး.. မိမိအနေနဲ့ data model ကို နားလည်ဖို့ပဲ လိုအပ်ပါတယ်။ ကျွန်ုပ်တို့ အသေးစိတ်အချက်အချို့ကို ကျော်လွန်သွားမည်ဖြစ်သော်လည်း၊ ယေဘုယျအားဖြင့် ပြောရလျှင် git ရဲ့ အဓိက (core) အရာကတော့ commit ဖြစ်ပါတယ်။

စတင်ချိန်တွင် repository (ယေဘုယျအားဖြင့်: git စီမံခန့်ခွဲသော folder) ၌ မည်သည့် အကြောင်းအရာမျှ မရှိသေးသလို၊ မည်သည့် commit မျှလည်း မရှိသေးပါ။ ၎င်းကို စတင် ပြင်ဆင်ကြည့်ရအောင် -

$ git init hackers
$ cd hackers
$ git status

ဤနေရာတွင် ထွက်ပေါ်လာသော output သည် ကျွန်ုပ်တို့အတွက် ကောင်းမွန်သော စတင်မှတ် တစ်ခုကို ပေးပါသည်။ အသေးစိတ် လေ့လာကြည့်ပြီး အားလုံးကို နားလည်အောင် လုပ်ဆောင်ကြရအောင်။

ပထမဦးစွာ “On branch master”.

“No commits yet” ကို ကျော်လိုက်ပါမည်၊ အဘယ်ကြောင့်ဆိုသော် ၎င်း၏ အဓိပ္ပာယ်မှာ ရှင်းလင်းပြီးသား ဖြစ်သောကြောင့်ဖြစ်သည်။

ထို့နောက် “nothing to commit”.

အထက်ပါ အချက်များကို လေ့ကျင့်နေစဉ်အတွင်း git က သင့်ကို မည်သည့်အရာ ပြုလုပ်နေသည်ဟု ထင်မြင်နေကြောင်း ကြည့်ရှုရန် git status ကို စမ်းသပ် run ကြည့်ပါ – ၎င်းသည် မထင်မှတ်ထားလောက်အောင် အသုံးဝင်ပါသည်။

commit တစ်ခု ရပြီဆိုတော့…

ကဲ၊ ကျွန်ုပ်တို့မှာ commit တစ်ခု ရပါပြီ၊ အခု ဘာဆက်လုပ်ကြမလဲ။

အမည်တစ်ခုမှာ ဘာတွေ ပါဝင်နေသလဲ။

ရှင်းရှင်းလင်းလင်းပင် git တွင် အမည်များသည် အရေးပါပါသည်။ ၎င်းတို့သည် git အတွင်း ဖြစ်ပျက်နေသည်များ၏ အရာများစွာ ကို နားလည်ရန် သော့ချက်ဖြစ်ကြသည်။ ယခုအချိန်အထိ ကျွန်ုပ်တို့သည် commit hash များ၊ master နှင့် HEAD တို့အကြောင်း ပြောဆိုခဲ့ပြီး ဖြစ်သည်။ သို့သော် နောက်ထပ် ရှိပါသေးသည်!

သင်၏ ရှုပ်ပွနေသည်များကို ရှင်းလင်းပါ

သင်၏ commit ရာဇဝင် (history) သည် မကြာခဏ အောက်ပါအတိုင်း ဖြစ်သွားလေ့ရှိပါသည် -

git ၏ ရှုထောင့်မှကြည့်လျှင် ၎င်းမှာ အဆင်ပြေ သော်လည်း၊ အနာဂတ် သင်ကိုယ်တိုင်အတွက် သို့မဟုတ် မည်သည့်အရာများ ပြောင်းလဲသွားသည်ကို သိရှိလိုသော အခြားသူများအတွက် မည်သို့မျှ အထောက်အကူ မပြုပါ။ git သည် သင့်အား ဤအရာများကို ရှင်းလင်းခွင့် ပြုထားသည် -

အခြားသူများနှင့် ပူးပေါင်းဆောင်ရွက်ခြင်း

version control ၏ အသုံးများသော သုံးစွဲပုံတစ်ခုမှာ လူအများအပြားအား တစ်ဦးနှင့်တစ်ဦး အနှောင့်အယှက် မဖြစ်စေဘဲ ဖိုင်အစုအဝေးတစ်ခုကို ပြောင်းလဲမှုများ ပြုလုပ်ခွင့် ပေးခြင်းဖြစ်ပါသည်။ သို့မဟုတ် အကယ်၍ တစ်ဦးနှင့်တစ်ဦး အပြောင်းအလဲများ ထပ်သွားပါကလည်း၊ အခြားသူ၏ အပြောင်းအလဲများကို တိတ်တဆိတ် ထပ်ရေးမိခြင်း (overwrite) မဖြစ်စေရန် သေချာစေခြင်း ဖြစ်ပါသည်။

git သည် distributed (ဗဟိုချုပ်ကိုင်မှုမရှိသော) VCS ဖြစ်ပါသည် - လူတိုင်းတွင် တစ်ခုလုံးသော repository ၏ local copy တစ်ခုစီ (အခြားသူများ ထုတ်ဝေရန် ရွေးချယ်ထားသော အရာအားလုံး) ရှိကြသည်။ အချို့သော VCS များမှာ centralized (ဗဟိုချုပ်ကိုင်သော) စနစ်များ ဖြစ်ကြသည် (ဥပမာ- subversion) - server တွင် commit အားလုံး ရှိပြီး client များတွင် ၎င်းတို့ “checkout” လုပ်ထားသော ဖိုင်များသာ ရှိကြသည်။ အခြေခံအားဖြင့် ၎င်းတို့တွင် လက်ရှိ ဖိုင်များသာ ရှိပြီး အခြားအရာတစ်ခုခု လိုအပ်ပါက server ကို တောင်းဆိုရန် လိုအပ်သည်။

git repository တစ်ခု၏ copy တိုင်းကို “remote” တစ်ခုအဖြစ် စာရင်းသွင်းနိုင်ပါသည်။ git clone ADDRESS ကို အသုံးပြု၍ ရှိပြီးသား git repository တစ်ခုကို မိတ္တူကူးယူနိုင်ပါသည် (git init အစား)။ ဤသည်မှာ ADDRESS ကို ညွှန်ပြသော origin ဟုခေါ်သော remote တစ်ခုကို ဖန်တီးပေးပါသည်။ remote တစ်ခုမှ အမည်များနှင့် ၎င်းတို့ ညွှန်ပြသော commit များကို git fetch REMOTE ဖြင့် ရယူနိုင်ပါသည်။ remote တစ်ခုရှိ အမည်များ အားလုံးကို သင့်ထံတွင် REMOTE/NAME အဖြစ် ရရှိနိုင်ပြီး၊ ၎င်းတို့ကို local အမည်များကဲ့သို့ပင် အသုံးပြုနိုင်ပါသည်။

အကယ်၍ သင့်တွင် remote သို့ ရေးသားခွင့် (write access) ရှိပါက၊ git push ကို အသုံးပြု၍ သင်ပြုလုပ်ခဲ့သော commit များကို ညွှန်ပြရန် remote ရှိ အမည်များကို ပြောင်းလဲနိုင်ပါသည်။ ဥပမာအားဖြင့် origin အမည်ရှိ remote ၌ master အမည် (branch) ကို ကျွန်ုပ်တို့၏ master branch မှ လက်ရှိ ညွှန်ပြနေသော commit သို့ ညွှန်ပြစေကြစို့ -

မကြာခဏဆိုသလို သင်သည် သင်၏ remote အဖြစ် GitHub၊ GitLab၊ BitBucket သို့မဟုတ် အခြားတစ်ခုခုကို အသုံးပြုမည် ဖြစ်သည်။ git ၏ ရှုထောင့်မှကြည့်လျှင် ထိုအရာများအတွက် “ထူးခြားမှု” မရှိပါ။ အရာအားလုံးသည် အမည်များနှင့် commit များသာ ဖြစ်ကြသည်။ အကယ်၍ တစ်စုံတစ်ယောက်က master သို့ အပြောင်းအလဲတစ်ခု ပြုလုပ်ပြီး ၎င်းတို့၏ commit ကို ညွှန်ပြရန် github/master ကို update လုပ်လိုက်ပါက (ထိုအကြောင်းကို ခဏအတွင်း ပြန်လာပါမည်)၊ သင် git fetch github ပြုလုပ်သည့်အခါ ၎င်းတို့၏ အပြောင်းအလဲများကို git log github/master ဖြင့် ကြည့်ရှုနိုင်မည် ဖြစ်သည်။

အခြားသူများနှင့် လက်တွဲလုပ်ဆောင်ခြင်း

ယခုအချိန်အထိ branch များသည် သိပ်မသုံးဝင်သကဲ့သို့ ထင်ရပါသည်- ၎င်းတို့ကို ဖန်တီးနိုင်သည်၊ ၎င်းတို့ထဲတွင် အလုပ်လုပ်နိုင်သည်၊ သို့သော် ထို့နောက်တွင်ကော။ နောက်ဆုံးတွင် သင်သည် master ကို ၎င်းတို့ထံ ညွှန်ပြအောင် လုပ်ဆောင်မည် မဟုတ်ပါလား။

ရှောင်လွှဲ၍ မရနိုင်စွာပင် branch တစ်ခုရှိ အပြောင်းအလဲများကို အခြား branch တစ်ခုရှိ အပြောင်းအလဲများနှင့် merge (ပေါင်းစပ်) ရမည် ဖြစ်သည်၊ ထို အပြောင်းအလဲများကို သင်ကိုယ်တိုင် သို့မဟုတ် အခြားသူက ပြုလုပ်ခဲ့သည်ဖြစ်စေ။ git က သင့်အား ၎င်းကို မအံ့ဩစရာပင် git merge NAME ဖြင့် ပြုလုပ်ခွင့် ပေးထားသည်။ merge က ဆောင်ရွက်မည့် အရာများမှာ -

သင်၏ လုပ်ဆောင်ချက်ကြီး ပြီးစီးပါက ၎င်း၏ branch ကို master အတွင်းသို့ merge လုပ်နိုင်ပြီး၊ git က မည်သည့် branch မှ အပြောင်းအလဲ မည်သည့်အရာမျှ ဆုံးရှုံးမသွားစေရန် သေချာအောင် ပြုလုပ်ပေးပါလိမ့်မည်။

အကယ်၍ သင်သည် အတိတ်က git ကို အသုံးပြုခဲ့ဖူးပါက merge ကို အခြားအမည်တစ်ခု ဖြစ်သည့် pull အဖြစ် သတိပြုမိနိုင်ပါသည်။ git pull REMOTE BRANCH ကို ပြုလုပ်သည့်အခါ ၎င်းသည် -

merge ပြုလုပ်မည့် branch များ၏ အပြောင်းအလဲများသည် သီးခြားစီ ဖြစ်နေသမျှ ကာလပတ်လုံး ဤသည်မှာ ပုံမှန်အားဖြင့် အလွန် ကောင်းမွန်စွာ အလုပ်လုပ်ပါသည်။ အကယ်၍ ၎င်းတို့ သီးခြားစီ မဟုတ်ပါက သင့်ထံတွင် merge conflict (ပေါင်းစပ်မှု ပဋိပက္ခ) ဖြစ်ပေါ်လာမည် ဖြစ်သည်။ ခြောက်ခြားဖွယ် ကြားရသော်လည်း…

သင်သည် သင်၏ ပထမဆုံး git merge conflict ကို ဖြေရှင်းပြီးပါပြီ။ \o/ ယခုအခါ ပြီးစီးသွားသော အပြောင်းအလဲများကို git push ဖြင့် ထုတ်ဝေနိုင်ပါပြီ။

ကမ္ဘာများ ထိတွေ့မိသည့်အခါ

သင် push ပြုလုပ်သည့်အခါ၊ သင် push လုပ်နေသည့် remote အမည်ကို update ပြုလုပ်ပါက အခြားသူ၏ အလုပ်များ ဆုံးရှုံးမသွားစေရန် git က စစ်ဆေးပါသည်။ ၎င်းသည် remote အမည်၏ လက်ရှိ commit သည် သင် push လုပ်နေသော commit ၏ ဘိုးဘေးဖြစ်မဖြစ် စစ်ဆေးခြင်းဖြင့် ပြုလုပ်သည်။ အကယ်၍ ဖြစ်ပါက git သည် အမည်ကို ဘေးကင်းစွာ update ပြုလုပ်နိုင်သည်၊ ၎င်းကို fast-forwarding ဟု ခေါ်သည်။ အကယ်၍ မဟုတ်ပါက git သည် remote အမည်ကို update ပြုလုပ်ရန် ငြင်းဆန်မည်ဖြစ်ပြီး အပြောင်းအလဲများ ရှိနေကြောင်း သင့်အား ပြောပြပါလိမ့်မည်။

အကယ်၍ သင်၏ push ကို ငြင်းဆန်ခံရပါက သင် မည်သို့ ပြုလုပ်မည်နည်း။

ထပ်မံ ဖတ်ရှုရန်များ

git အကြောင်း XKCD

လေ့ကျင့်ခန်းများ

  1. repository တစ်ခုတွင် ရှိပြီးသား ဖိုင်တစ်ခုကို ပြင်ဆင်ကြည့်ပါ။ git stash ကို ပြုလုပ်သည့်အခါ မည်သို့ ဖြစ်ပျက်သနည်း။ git log --all --oneline ကို run သည့်အခါ သင့်အနေဖြင့် မည်သည့်အရာကို မြင်တွေ့ရသနည်း။ git stash ဖြင့် ပြုလုပ်ခဲ့သည်များကို ပြန်ပြင်ရန် git stash pop ကို run ပါ။ မည်သည့် အခြေအနေမျိုးတွင် ဤသည်မှာ အသုံးဝင်နိုင်သနည်း။

  2. git ကို လေ့လာရာတွင် တွေ့ရလေ့ရှိသော အမှားတစ်ခုမှာ git ဖြင့် မစီမံသင့်သော ဖိုင်ကြီးများကို commit လုပ်မိခြင်း သို့မဟုတ် ထိခိုက်လွယ်သော အချက်အလက်များ ထည့်သွင်းမိခြင်း ဖြစ်သည်။ repository သို့ ဖိုင်တစ်ခု ထည့်သွင်းကြည့်ပါ၊ commit အချို့ ပြုလုပ်ပါ၊ ထို့နောက် ထိုဖိုင်ကို ရာဇဝင် (history) မှ ဖျက်ပစ်ပါ (ဤဆောင်းပါး ကို လေ့လာလိုပါလိမ့်မည်)။ ထို့အပြင် git အား သင့်အတွက် ဖိုင်ကြီးများကို စီမံပေးစေလိုပါက Git-LFS ကို လေ့လာကြည့်ပါ။

  3. Git သည် အပြောင်းအလဲများကို ပြန်ဖြုတ်ရန်အတွက် အမှန်တကယ် အဆင်ပြေလှသော်လည်း ဖြစ်တောင့်ဖြစ်ခဲ အပြောင်းအလဲများနှင့်ပင် ကျွမ်းဝင်မှု ရှိရန် လိုအပ်သည်
    1. အကယ်၍ ဖိုင်တစ်ခုကို commit တစ်ခုခုတွင် မှားယွင်း ပြောင်းလဲခဲ့ပါက ၎င်းကို git revert ဖြင့် ပြန်လည် ပယ်ဖျက်နိုင်ပါသည်။ သို့သော် commit တစ်ခုတွင် အပြောင်းအလဲ အများအပြား ပါဝင်နေပါက revert သည် အကောင်းဆုံး ရွေးချယ်မှု မဟုတ်နိုင်ပါ။ သီးခြား commit တစ်ခုမှ ဖိုင်ဗားရှင်းကို ပြန်လည် ရယူရန် git checkout ကို မည်သို့ အသုံးပြုနိုင်သနည်း။
    2. branch တစ်ခု ဖန်တီးပါ၊ ထို branch ၌ commit တစ်ခု ပြုလုပ်ပါ၊ ထို့နောက် ၎င်းကို ဖျက်ပစ်ပါ။ ထို commit ကို ပြန်လည် ရယူနိုင်ပါသေးသလား။ git reflog ကို လေ့လာကြည့်ပါ။ (မှတ်ချက်- တွဲလောင်းဖြစ်နေသော အရာများကို လျင်မြန်စွာ ပြန်လည်ရယူပါ၊ မည်သည့်အရာကမျှ ညွှန်ပြမနေသော commit များကို git က ပုံမှန် အလိုအလျောက် ရှင်းလင်းပေးပါလိမ့်မည်။)
    3. အကယ်၍ git reset အစား git reset --hard ကို အလျင်စလို အသုံးပြုပါက အပြောင်းအလဲများ လွယ်ကူစွာ ဆုံးရှုံးသွားနိုင်သည်။ သို့သော် အပြောင်းအလဲများမှာ staged ဖြစ်ခဲ့ပြီး ဖြစ်သောကြောင့် ၎င်းတို့ကို ကျွန်ုပ်တို့ ပြန်လည် ရယူနိုင်ပါသည်။ (git fsck --lost-found နှင့် .git/lost-found တို့ကို လေ့လာကြည့်ပါ)
  4. မည်သည့် git repo မဆို .git/hooks folder အောက်တွင် ကြည့်ပါ၊ .sample ဖြင့် ဆုံးသော script များစွာကို တွေ့ရပါလိမ့်မည်။ အကယ်၍ ၎င်းတို့ကို .sample မပါဘဲ အမည်ပြောင်းလိုက်ပါက ၎င်းတို့၏ အမည်အပေါ် မူတည်၍ run မည်ဖြစ်သည်၊ ဥပမာအားဖြင့် pre-commit သည် commit မပြုလုပ်မီ execute လုပ်ပါလိမ့်မည်။ ၎င်းတို့ဖြင့် စမ်းသပ်ကြည့်ပါ

  5. command line tool အများအပြားကဲ့သို့ပင် git သည် ~/.gitconfig ဟုခေါ်သော configuration file (သို့မဟုတ် dotfile) တစ်ခုကို ပေးထားပါသည်။ ~/.gitconfig ကို အသုံးပြု၍ alias တစ်ခု ဖန်တီးပါ၊ ထို့ကြောင့် သင် git graph ကို run သည့်အခါ git log --oneline --decorate --all --graph ၏ output ကို ရရှိမည် ဖြစ်သည် (ဤသည်မှာ commit graph ကို အမြန် ကြည့်ရှုရန် ကောင်းမွန်သော မိန့်ခွန်းဖြစ်သည်)

  6. Git သည် သင့်အား ~/.gitignore_global အောက်တွင် global ignore pattern များကို သတ်မှတ်ခွင့် ပြုထားသည်၊ ဤသည်မှာ RSA key များကို ထည့်မိခြင်းကဲ့သို့သော ပုံမှန် အမှားများကို ကာကွယ်ရန် အသုံးဝင်သည်။ ~/.gitignore_global ဖိုင်တစ်ခု ဖန်တီးပြီး pattern *rsa ကို ထည့်ပါ၊ ထို့နောက် repo တစ်ခုတွင် အလုပ်လုပ် မလုပ် စမ်းသပ်ပါ။

  7. သင် git နှင့် ပိုမို ကျွမ်းဝင်လာပါက၊ သင်၏ .gitignore ကို ပြင်ဆင်ခြင်းကဲ့သို့သော ပုံမှန် အလုပ်များကို ပြုလုပ်လာရသည်ကို တွေ့ရပါလိမ့်မည်။ git extras သည် git နှင့် တွဲဖက် အလုပ်လုပ်သော သေးငယ်သည့် utility များကို ထောက်ပံ့ပေးသည်။ ဥပမာအားဖြင့် git ignore PATTERN သည် သင်၏ repo ရှိ .gitignore ဖိုင်သို့ သတ်မှတ်ထားသော pattern ကို ထည့်သွင်းပေးမည်ဖြစ်ပြီး git ignore-io LANGUAGE သည် gitignore.io မှ ထိုဘာသာစကားအတွက် ပုံမှန် ignore pattern များကို ရယူပေးမည်ဖြစ်သည်။ git extras ကို install လုပ်ပြီး git alias သို့မဟုတ် git ignore ကဲ့သို့သော tool အချို့ကို စမ်းသုံးကြည့်ပါ။

  8. Git GUI ပရိုဂရမ်များသည် အချို့သော အခါများတွင် ကောင်းမွန်သော အရင်းအမြစ်တစ်ခု ဖြစ်နိုင်သည်။ git repo တစ်ခုတွင် gitk ကို run ကြည့်ပြီး interface ၏ မတူညီသော အပိုင်းများကို လေ့လာကြည့်ပါ။ ထို့နောက် gitk --all ကို run ပါ၊ ကွဲပြားခြားနားချက်များမှာ မည်သည်တို့ နည်း။

  9. သင် command line application များကို ကျင့်သုံးသွားပါက GUI tool များသည် ရှုပ်ထွေး/မလိုအပ်ဘဲ ကြီးမားနေသကဲ့သို့ ခံစားရနိုင်သည်။ ၎င်းတို့ နှစ်ခုကြား ကောင်းမွန်သော ညှိနှိုင်းမှုတစ်ခုမှာ command line မှ မောင်းနှင်နိုင်ပြီး interactive interface ကိုလည်း ပေးစွမ်းနိုင်သော ncurses အခြေပြု tool များဖြစ်ကြသည်။ Git တွင် tig ရှိသည်၊ ၎င်းကို install လုပ်ပြီး repo တစ်ခုတွင် run ကြည့်ပါ။ အသုံးပြုပုံ ဥပမာအချို့ကို ဤနေရာတွင် တွေ့ရှိနိုင်ပါသည်။

Edit this page.

Licensed under CC BY-NC-SA.