နားလည်ထားရမယ့် အချက်
ဒီ project ဟာ fork, clone, branch, remote, commit, pull request ဆိုတဲ့ ယခင်အခန်းတွေက concept အားလုံးကို အစစ်အမှန် open-source contributor တွေသုံးတဲ့ workflow အတိုင်း တစ်ဆက်တည်း ချိတ်ဆက်ပေးထားပါတယ်။
- fork လုပ်ခြင်းက ကိုယ်မပိုင်တဲ့ repo ရဲ့ ကိုယ်ပိုင် copy တစ်ခု ဖန်တီးပေးတယ်
- remote နှစ်ခု: origin = သင့် fork (push ဒီကို), upstream = original (fetch ပဲ)
- focused feature branch က change တစ်ခုတည်းကို သီးခြား review လုပ်နိုင်အောင် ထားပေးတယ်
- CONTRIBUTING.md က project ရဲ့ ခန့်မှန်းထားတဲ့ code style နဲ့ process ကို ဖော်ပြထားတယ်
- pull request က သင့် branch ကို maintainer ဆီ review အတွက် ရောက်စေတဲ့ နည်းလမ်းပါ
သင့် fork ဟာ fork လုပ်တဲ့ အချိန်က snapshot တစ်ခုပါ။ original project က သင်မပါဘဲ ဆက်လက်ရွေ့လျားနေတတ်လို့ contributor တွေက upstream လို့ခေါ်တဲ့ ဒုတိယ remote ကို push access မလိုအပ်ဘဲ အသစ်ဆုံး history fetch လုပ်ဖို့ ထည့်ကြပါတယ်။
| Remote | ညွှန်ပြသောနေရာ |
|---|---|
| origin | သင့် fork — ဒီကိုပဲ push လုပ်ရမယ် |
| upstream | original repository — fetch ပဲ လုပ်ရမယ်၊ push access ရှားရှားပါးပါးပဲ ရှိတတ်တယ် |
အရင်ဆုံး CONTRIBUTING.md ကို ဖတ်ပါ
active project အများစုက contribution ဘယ်လိုလိုချင်လဲဆိုတာ တိကျစွာ ရေးထားလေ့ရှိတယ် — code style, test requirement, commit message format။ ဒါကို ကျော်သွားရင် ရည်ရွယ်ချက်ကောင်းတဲ့ pull request တောင် rejected ဖြစ်နိုင်ဆုံးဖြစ်တယ်။
FORK, CLONE, BRANCH, PUSH, PULL REQUEST
---------------------------------------
UPSTREAM (original project on GitHub)
|
| 1. Fork (click "Fork" on GitHub's website)
v
YOUR FORK (your copy on GitHub -- this is "origin")
|
| 2. git clone <your-fork-url>
v
YOUR LOCAL CLONE
origin -> your fork (you can push here)
upstream -> original repo (fetch only, no push)
|
| 3. git checkout -b feature-branch
| 4. edit files, git commit
| 5. git push origin feature-branch
v
YOUR FORK --- 6. Open Pull Request (GitHub website) ---> UPSTREAMလက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
GitHub ပေါ်မှာ Fork လုပ်ပါ
original project ရဲ့ page ကိုဖွင့်ပြီး Fork ကိုနှိပ်ပါ။ GitHub က သင့် account အောက်မှာ စက္ကန့်ပိုင်းအတွင်း copy အပြည့်အစုံကို ဖန်တီးပေးပါလိမ့်မယ် — terminal command လုံးဝ မရှိပါဘူး၊ GitHub server ကပဲ ဖန်တီးပေးနိုင်တာပါ။
သင့် fork ကို clone လုပ်ပါ
original မဟုတ်ဘဲ သင့် fork ကို clone လုပ်ပါ — ဒါက local origin remote ကို သင်တကယ်ပိုင်တဲ့ repo ကို ညွှန်စေတာပါ။
upstream remote ကို ထည့်ပါ
git remote add upstream <original-repo-url> — ဒါဆို write access မလိုအပ်ဘဲ original project ရဲ့ အသစ်ဆုံး change ကို fetch လုပ်နိုင်ပါလိမ့်မယ်။
CONTRIBUTING.md ကို ဖတ်ပါ
code မရေးခင် contributing guide ရှိမရှိ စစ်ဆေးပြီး style နဲ့ process မျှော်လင့်ချက်တွေကို လိုက်နာပါ။
focused feature branch ဖန်တီးပါ
git checkout -b <branch-name> — သင်လုပ်မယ့် change တစ်ခုတည်းကို ကိုယ်စားပြုတဲ့ နာမည်နဲ့ ပေးပါ။
change လုပ်ပြီး commit ပါ
အဲဒီ change တစ်ခုတည်းအတွက် လိုအပ်တာကိုပဲ ပြင်ပြီး ဘာကြောင့်အရေးကြီးလဲဆိုတာ ရှင်းပြတဲ့ message နဲ့ commit လုပ်ပါ။
သင့် fork ဆီ push လုပ်ပါ
git push -u origin <branch-name> — origin ဆိုတဲ့ သင့် fork ကို push လုပ်ပါ၊ upstream ကို တိုက်ရိုက် push မလုပ်ပါနဲ့။
Pull Request ဖွင့်ပါ
GitHub ပေါ်မှာ သင့် push လုပ်ထားတဲ့ branch ကနေ original project ရဲ့ main branch ဆီ pull request ဖွင့်ဖို့ prompt တွေ့ရပါလိမ့်မယ်။ change ကို ရှင်းပြပြီး ဆက်စပ် issue ရှိရင် ကိုးကားပြီး submit လုပ်ပါ။
အတူတူ စမ်းရေးကြည့်မယ်
export GIT_AUTHOR_NAME="Maintainer Mia"
export GIT_AUTHOR_EMAIL="mia@opensourceproject.example"
export GIT_COMMITTER_NAME="Maintainer Mia"
export GIT_COMMITTER_EMAIL="mia@opensourceproject.example"
export GIT_AUTHOR_DATE="2026-01-01T09:00:00"
export GIT_COMMITTER_DATE="2026-01-01T09:00:00"
# 1. The "original" open-source project (stands in for the real GitHub repo)
git init --bare /tmp/upstream.git
git clone /tmp/upstream.git /tmp/seed-workdir
cd /tmp/seed-workdir
cat > README.md <<'EOF'
# Awesome CLI Tool
A small command-line tool for formatting timestamps.
## Contributing
See CONTRIBUTING.md before opening a pull request.
EOF
cat > CONTRIBUTING.md <<'EOF'
# Contributing
- Keep pull requests focused on a single change.
- Match the existing code style.
- Write a clear commit message describing the "why".
EOF
git add README.md CONTRIBUTING.md
git commit -m "Initial commit: project scaffold and contributing guide"
git push origin main
# 2. "Fork" it: create your own copy on GitHub (simulated as another bare repo)
git clone --bare /tmp/upstream.git /tmp/your-fork.git
# 3. Clone YOUR fork to your machine -- this becomes 'origin'
git clone /tmp/your-fork.git /tmp/contributor-workdir
cd /tmp/contributor-workdir
# 4. Add the original project as a second remote, 'upstream'
git remote add upstream /tmp/upstream.git
git remote -v
# 5. Create a focused feature branch and make ONE change
export GIT_AUTHOR_NAME="Contributor Chen"
export GIT_AUTHOR_EMAIL="chen@example.com"
export GIT_COMMITTER_NAME="Contributor Chen"
export GIT_COMMITTER_EMAIL="chen@example.com"
export GIT_AUTHOR_DATE="2026-01-02T10:00:00"
export GIT_COMMITTER_DATE="2026-01-02T10:00:00"
git checkout -b add-iso-week-support
cat >> README.md <<'EOF'
## ISO week support
Added support for formatting dates with the ISO 8601 week number.
EOF
git add README.md
git commit -m "Add ISO week number support to README"
# 6. Push to YOUR FORK (origin), never directly to upstream
git push -u origin add-iso-week-support
git log --onelinegit remote -v ကို run လိုက်ရင် origin က your-fork.git ကို၊ upstream ကတော့ original upstream.git ကို ညွှန်နေတာ အမှန်တကယ် တွေ့ရမှာပါ:
origin /tmp/your-fork.git (fetch)
origin /tmp/your-fork.git (push)
upstream /tmp/upstream.git (fetch)
upstream /tmp/upstream.git (push)
git log --oneline ကလည်း commit နှစ်ခုကို အတိအကျပြပါလိမ့်မယ်:
8da9811 Add ISO week number support to README
63b1005 Initial commit: project scaffold and contributing guide
feature branch ကို push လုပ်တဲ့အခါ:
To /tmp/your-fork.git
* [new branch] add-iso-week-support -> add-iso-week-support
branch 'add-iso-week-support' set up to track 'origin/add-iso-week-support'.
GitHub ရဲ့ website ပေါ်မှာတော့ သင့် fork repository ကို ဖွင့်လိုက်ရင် add-iso-week-support branch အတွက် 'Compare & pull request' banner တစ်ခု ပေါ်လာပါလိမ့်မယ်။ အဲဒါကို နှိပ်လိုက်ရင် original repository ရဲ့ main branch ဆီ pull request တစ်ခု ဖွင့်ပေးပါတယ် — ဒီအဆင့်ကတော့ terminal နဲ့ ညီမျှတဲ့အရာ လုံးဝမရှိပါဘူး။၅ မိနစ် စမ်းကြည့်
သင့် branch ပေါ်မှာ ဒုတိယ focused commit တစ်ခု ထပ်ထည့်ပါ (ဥပမာ CONTRIBUTING.md ရဲ့ ကိုယ်ပိုင် example ကို update လုပ်ခြင်း)၊ push လုပ်ပါ၊ ပြီးရင် local clone မှာ git log --oneline နဲ့ git --git-dir=/tmp/your-fork.git log --oneline နှစ်ခုစလုံးကို run ပြီး fork ရဲ့ history က local branch နဲ့ ကိုက်ညီမှန်း စစ်ဆေးပါ။ ပြီးရင် အဲဒီ commit တူတူကို upstream ကို တိုက်ရိုက် push လုပ်ရင် ဘာကြောင့် မအောင်မြင်နိုင်လဲဆိုတာကို စာကြောင်းတစ်ကြောင်းနဲ့ ရှင်းပြပါ။
သတိလေးတစ်ချက်
upstream remote ကို လုံးဝထည့်မထား (ဒါမှမဟုတ် fetch လုံးဝမလုပ်)ဘဲနေတာကြောင့် feature branch က project ရဲ့ ဟောင်းနေတဲ့ copy ပေါ်အခြေခံပြီး နောက်ပိုင်း မလိုအပ်တဲ့ merge conflict တွေ ကြုံရနိုင်ခြင်း။
issue ဒါမှမဟုတ် CONTRIBUTING.md guideline မှာ ဖော်ပြထားတဲ့ change တစ်ခုတည်းအပေါ် အာရုံစိုက်မထားဘဲ ဆက်စပ်မှုမရှိတဲ့ change များစွာကို pull request တစ်ခုတည်းထဲ ပေါင်းထည့်ခြင်း။
GitHub Docs: Configuring a remote for a fork — Git & GitHub