Remotes और GitHub


इस handbook में अब तक हर repository एक जगह पर रही है: आपकी अपनी machine पर। यह तब तक ठीक है जब तक आप एक backup नहीं चाहते जो एक मरी हुई laptop को survive करे, दूसरी computer से project pick up नहीं करना चाहते, या किसी और को code को touch करने नहीं देना चाहते। आपको जो चाहिए वह repository की एक copy है जो कहीं hosted हो जहाँ शामिल हर machine reach कर सके। उस copy को remote कहा जाता है, और GitHub वह जगह है जहाँ ज्यादातर developers इसे रखते हैं।
Remote क्या है (और GitHub इसमें कहाँ फिट होता है)
एक remote आपकी repository की एक copy है जो आपकी अपनी machine के अलावा कहीं hosted है, अक्सर GitHub पर। जब आप कोई repository clone करते हैं, तो Git पहले से ही आपके लिए एक setup कर देता है, जिसका नाम default रूप से origin होता है। git remote -v चलाएँ (यह -v names के साथ URLs भी दिखाने के लिए कहता है):
$ git remote -v
origin https://github.com/mara-chen/weather-app.git (fetch)
origin https://github.com/mara-chen/weather-app.git (push)हर remote जो Git को पता है, दो बार listed है, एक बार fetching के लिए और एक बार pushing के लिए, क्योंकि सिद्धांत रूप से दोनों अलग-अलग addresses को point कर सकते हैं। व्यावहारिक रूप से वे लगभग हमेशा एक ही होते हैं। origin वह nickname है जो Git automatically clone पर assign करता है। आप इसे rename कर सकते हैं या एक दूसरा remote जोड़ सकते हैं जो कहीं और point करता हो, लेकिन लगभग हर project जिसे आप touch करते हैं अपने main remote को origin कहेगा।
यह एक अच्छा moment है उस distinction को दोहराने के लिए जो शुरुआत करने वाले लगभग हर किसी को confuse करती है: Git और GitHub एक ही चीज़ नहीं हैं। Git आपकी machine पर चलने वाला version-control tool है, commits को record करता है चाहे आप कुछ से connected हों या नहीं। GitHub एक website है जो आपकी repository की एक copy host करता है और आपको push करने और pull करने के लिए एक remote देता है। git remote, git push, और git pull वे commands हैं जो दोनों को connect करते हैं: वे यह हैं कि आपकी laptop पर चलने वाला Git कैसे GitHub के servers पर बैठी एक repository से बात करता है।
origin कहता है। किसी भी समय git remote -v चलाएँ अपनी repository के बारे में देखने के लिए कि कौन से remotes को Git जानता है। Git और GitHub एक ही चीज़ नहीं हैं: Git आपकी machine पर tool है, GitHub वह जगह है जहाँ आपका remote अक्सर रहता है। यह distinction शुरुआत में ही clear करने से बाद में बहुत confusión बचता है। अपने remote को कहाँ host करें: GitHub और alternatives
सब कुछ जो एक remote करता है वह plain Git है, और इसका एक consequence है जो शुरुआत में ही जानने लायक है: दूसरे end पर host swappable है। Git के लिए, हर host आपके config में एक URL है, और git push, git pull, और git fetch सभी के साथ identically behave करते हैं। जो एक host add करता है वह एक layer up बैठता है: आपके code का एक web view, एक review flow, issue tracking, और access control। यहाँ landscape है, trade-offs स्पष्ट रूप से stated:
- GitHub अब तक सबसे बड़ा है और open-source work का बड़ा majority host करता है। इसकी strength network है: जो projects आप contribute करना चाहते हैं वह पहले से ही वहाँ हैं, tutorials इसे assume करते हैं, और employers आपकी profile को इस पर देखते हैं। Trade-off यह है कि यह एक closed platform है (Microsoft के ownership में), और जितना अधिक आप Git hosting से परे इसके extras पर lean करते हैं, उतना ही आप इसके लिए tied हो जाते हैं।
- GitLab सबसे करीबी full alternative है, जिसमें same core features अलग-अलग names के under हैं (pull requests को वहाँ "merge requests" कहा जाता है)। इसका standout एक self-managed edition है जो आप अपने servers पर चला सकते हैं, जिससे companies जो code in-house रखते हैं अक्सर इसे pick करते हैं। Trade-off यह है कि यह बहुत कुछ bundle करता है, और platform उससे भारी feel कर सकता है जो code hosting आप के लिए आए थे।
- Bitbucket Atlassian से host है, जो इसके project-tracking और documentation tools, Jira और Confluence के बगल में बैठने के लिए built है। अगर आपकी team पहले से ही उन tools में रहती है, तो यह directly slot में आता है। उस ecosystem के बाहर इसके पास big three में सबसे छोटा community है और little open-source presence है।
- Codeberg open-source projects के लिए एक nonprofit host है, open-source platform Forgejo पर run करते हुए। Draw यह है कि कोई company आपके host को own नहीं करता है और platform itself open source है। Trade-off scale है: fewer integrations, एक छोटा community, और open source के बजाय private team work पर focus।
- Self-hosting इन सभी के अंतर्निहित है: Forgejo या Gitea run करें, दोनों free और open source हैं, या GitLab के self-managed edition को hardware पर जो आप control करते हैं। आपको full control और privacy मिलता है; trade-off यह है कि इसे चलाना keep करना आपका job बन जाता है।
यह handbook अपने examples में GitHub use करता है क्योंकि यह most open-source work को host करता है और वह जगह है जहाँ आप सबसे पहले collaborate करने की संभावना रखते हैं। इस chapter में हर command बिना किसी बदलाव के किसी अन्य host में transfer होता है: URL को swap करें और daily loop same रहता है। Differences एक layer up में रहते हैं, हर site के web interface में reviewing और merging work के लिए, जहाँ अगले chapter का pull request flow आता है।
अपने काम को send और get करना: git push और git pull
एक remote होने के साथ, दो commands ज्यादातर daily work को cover करते हैं। git push आपके local commits को remote तक भेजता है। git pull commits को bring down करता है जो कहीं और बनाई गई हैं और उन्हें merge करता है जिस branch पर आप हैं।
$ git push origin main
Enumerating objects: 5, done.
Writing objects: 100% (3/3), 312 bytes | 312.00 KiB/s, done.
To https://github.com/mara-chen/weather-app.git
9f8e7d6..a1b2c3d main -> mainorigin remote है, main वह branch है जो आप send कर रहे हैं। वह last line वह part है जो पढ़ने लायक है: यह दिखाता है main को remote पर एक commit से दूसरे में move करते हुए।
Pulling same तरीके से काम करता है, reverse में:
$ git pull origin main
remote: Enumerating objects: 4, done.
Unpacking objects: 100% (4/4), done.
Updating a1b2c3d..b7c9e21
Fast-forward
src/index.js | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)यह पूरा loop है एक दूसरे के साथ एक project पर काम करने के लिए: pull down करें जो कुछ भी बदला है शुरु करने से पहले, अपना काम करें और commit करें, इसे वापस up push करें। जब भी आप एक branch को किसी और के साथ share करते हैं push से पहले pull करें। Pull को skip करें और आपका push उन commits पर land कर सकता है जिन्हें आपने कभी नहीं देखा, जिसे Git refuse करेगा rather than किसी के काम को lose करने का risk लेने के लिए।
git push आपके commits को remote तक भेजता है, और git pull commits को bring down करता है जो कहीं और बनाई गई हैं और उन्हें merge करता है आपकी branch में। काम करना शुरु करने से पहले pull करें और जब आप done हों तो push करें, और आप किसी और के साथ भी sync में रहते हैं जो project को touch करता है। Pull को skip करना सबसे common reason है जो push rejected होता है। git fetch बनाम git pull
git pull एक step में दो चीजें करता है: यह download करता है जो कुछ भी remote पर बदला है, फिर तुरंत उन changes को merge करता है branch में जो आप पर हैं। git fetch केवल पहला आधा करता है। यह नई commits को download करता है लेकिन कभी उन्हें merge नहीं करता है आपकी branch में। आपकी current branch, और आपकी working files, बिल्कुल वहीं रहती हैं जहाँ वह थीं जब तक आप Git को merge या pull करने के लिए नहीं बताते।
यह trip-up है जो लगभग हर किसी को कम से कम एक बार hit करता है: git fetch run करें, कहीं कोई visible change नहीं देखें, और assume करें कि remote पर कुछ नहीं हुआ। कुछ हुआ: fetch ने अभी तक आपकी working branch को touch नहीं किया है। देखने के लिए कि क्या नीचे आया है, इस chapter के शुरुआत के remote-tracking branch को देखें: git log origin/main commits को show करता है जो remote पर बैठी हैं जो आपके local main तक नहीं पहुँची हैं। जब आप उन्हें bring करने के लिए ready हों, git merge origin/main यह करता है, या git pull उस एक command में fetch और merge को run करता है।
git pull नई commits को download करता है और एक step में उन्हें merge करता है आपकी branch में। git fetch केवल उन्हें download करता है और Git की memory को update करता है कि remote कहाँ stands; आपकी branch stay रहती है जब तक आप merge नहीं करते। Fetch के बाद अपनी files में कोई change देखना expected है, नई commits remote-tracking branch पर wait कर रहीं हैं। यह आपको कहाँ छोड़ता है
Push, pull, और fetch आपकी commits को एक shared remote पर और वापस लाते हैं, जो Git में day-to-day collaboration की most को cover करता है। सब कुछ यहाँ commit loop पर build करता है: आप अभी भी locally stage और commit करते हैं पहले, एक remote केवल यह बदलता है कि वे commits कहाँ travel कर सकते हैं। अगला piece GitHub itself के through collaboration कर रहा है, एक change को propose कर रहा है और merge करने से पहले इसे review किया जा रहा है। Pull request flow बिल्कुल वहाँ pick up करता है। अगर एक term इस chapter में अभी भी shaky feel करता है, remote-tracking branch, refspec, upstream, तो Glossary के पास हर एक के लिए एक plain definition है, और What is Git Git-बनाम-GitHub distinction पर अपने आप के लिए एक दूसरा look के लायक है।

