- Git सीखने या संदर्भ के तौर पर देखने वाले पाठकों के लिए HTML·PDF वितरण संस्करण कई फॉर्मैट में उपलब्ध कराने वाला गाइड पेज
- गाइड खुद गलतियों की संभावना मानकर चलती है, और Git से जुड़ी गलत सामग्री के लिए ईमेल के जरिए सुधार सुझाव स्वीकार करती है
- HTML वितरण संस्करण में पढ़ने के माहौल के अनुसार split version, single page, widescreen, ZIP आदि विकल्प चुने जा सकते हैं
- PDF को US Letter·A4, single-sided·double-sided, syntax highlighting version·black and white version के संयोजन में डाउनलोड किया जा सकता है
- अनुवादक और लेखक पूरा material GitHub से clone करने के बाद README का पालन करके काम कर सकते हैं
पढ़ने के लिए वितरण फॉर्मैट
-
HTML
-
PDF
सुधार सुझाव और मूल कार्य सामग्री
- गाइड गलतियां होने की संभावना को खुला मानती है, और सुधार सुझाव ईमेल से स्वीकार करती है
- अनुवादक और लेखक GitHub repository को clone करके README का पालन कर सकते हैं
1 टिप्पणियां
Hacker News की राय
अगर कोई गलती मिले तो भेज दें। मैं खुद व्यवस्थित करके ठीक कर दूंगा — Beej
:cqभी शामिल किया जा सकता है। यह non-zero exit status के साथ बाहर निकलता है, जिससे Git commit या task पूरा नहीं कर पाताhttps://beej.us/guide/bggit/html/split/branches-and-fast-for... में कहा गया है कि “default branch main है” और “पहले यह master था, और पुराने repositories में अभी भी master है”, लेकिन यह सही नहीं है। Git अभी भी
masterको default के रूप में इस्तेमाल करता है, और बस भविष्य मेंgit initके लिएgit config --global init.defaultBranchसे इसे बदलने की सुविधा देता हैस्रोत: https://github.com/git/git/blob/bc204b742735ae06f65bb20291c9...
साथ ही “पुराने repositories” वाला phrase गलत message देता है। यह बदलाव GitHub ने तय किया और बाकी जगहों ने follow किया; Git ने भी ऊपर वाली setting allow कर दी। यानी यह नए/पुराने repository का मामला नहीं, बल्कि preference का मामला ज्यादा है
stash से निपटने की झंझट के बिना branches को आपस में उलझने से बचाए रखने का यह अच्छा तरीका है
Teenage में पढ़ी हुई Beej's Guide to Network Programming और Beej's Guide to Unix IPC accessible होने के साथ-साथ गहरी भी थीं, और आगे चलकर मैं कैसा programmer बना, इस पर उनका बड़ा असर पड़ा
[0] https://beej.us/guide/bgnet/
[1] https://beej.us/guide/bggit/
मैंने second-hand Slackware Linux unleashed खरीदी थी, जिसके साथ CD-ROM था और उसमें C networking examples थे। वे code मुझे confusing लगे, तो मैं Beej की networking site तक पहुंचा। वहां से मैं और डूबता चला गया, एक गहरी rabbit hole में उतर गया, और programming books ढूंढने के लिए कई bookstores के चक्कर लगाया करता था
Richard Stevens की बेहतरीन reference book खरीदने के बाद फिर पीछे मुड़कर नहीं देखा, और उस passion को संभव बनाने के लिए मैं आज भी Beej का आभारी हूं
selectइस्तेमाल करना सीखने के दिनों में, किसी port scanner (शायद “grabb”?) को तेज़ बनाना चाहता था, इसलिए मैंने Beej की network guide का Italian में translation किया था—यह याद आज भी है। मजेदार दिन थेवह समय था जब पिता के phone bill पर नाराज़ न होने के लिए pages offline पढ़ने के लिए save किया करता था, और जब code चल जाता था तो लगता था जैसे जिंदगी की पिछली नाकामियों और rejections से ऊपर कोई validation मिल गया हो। एक computer से दूसरे computer पर message भेजने की खुशी बहुत बड़ी थी
“पुराना command:
git checkout” देखकर मुझे यह भी नहीं पता था किgit switchमौजूद है, और यह भी नहीं पता था किgit checkoutको पुराना alternative माना जाने लगा है। खुद को बूढ़ा महसूस कर रहा हूंलगभग 10 साल पहले Git सीखना शुरू किया था, तो ठीक है, लेकिन यह अजीब लगता है कि आज Git सीखने वाला कोई व्यक्ति यह देखकर confuse हो सकता है कि मैं
git checkoutक्यों इस्तेमाल करता हूं। जैसे कोई outdated expression बोल रहा हूंलेख पर लौटें तो, जब मैं सीख रहा था तब यह guide होती तो वाकई बहुत उपयोगी होती। Follow करना आसान है और common questions को अच्छी तरह cover करती है
मुझे यह भी अच्छे से याद है कि पहले merge conflict से डरकर रुक गया था, और फिर conflicts से बचने के लिए workarounds अपनाए थे
git switchकाफी नया command है और पहली बार 2019 में release हुआ था2021 की discussion और कुछ हफ्ते पहले की discussion, दोनों मौजूद हैं; बाद वाली में यह भी आता है कि documentation में
git switchको अभी भी experimental feature माना जाता हैhttps://news.ycombinator.com/item?id=28024972
https://news.ycombinator.com/item?id=42649858
git checkoutको अभी “पुराना alternative” माना जाता है। आखिरी बार जब मैंने check किया था,switchअब भी experimental था, और लगभग 15 साल पहले Git सीखते समय जो workflow और commands सीखे थे, उनसे हटने का मैंने सोचा भी नहींजो भी काम करना चाहता हूं, सब अब भी वैसा ही चलता है,
git checkoutभी पहले जैसा ही काम करता है, और दूसरों के साथ Git पर collaborate करने में कोई दिक्कत नहीं आती—तो workflow बदलने की वजह ही क्या हैGit इस्तेमाल करने का तरीका समझाने के लिए 30 से ज़्यादा हिस्सों वाली guide की ज़रूरत होना ही अपने-आप में ऐसा लगता है कि Git ने बड़ी तस्वीर कहीं खो दी है
commit tree का snapshot होता है, और उसके पास ancestors की list होती है. आम तौर पर एक, लेकिन हमेशा ऐसा नहीं. tag एक न बदलने वाला commit nameplate है, और branch बदलने वाला commit nameplate है. index एक छोटा-सा in-progress proto-commit है जिसे commit करने से पहले
addसे भरा जाता हैयही Git है. और जानना हो तो guide पढ़ने के बजाय “tree को प्रभावित किए बिना किसी खास Git commit पर switch कैसे करें”, “बदली हुई files में से सिर्फ कुछ को commit कैसे करें”, “कहीं और के commit को current tree में copy कैसे करें” जैसी चीज़ें search कर लें
बुनियादी abstraction minimalistic और आसान है. उस abstraction से जो काम आप करना चाहते हैं, वे sophisticated और जटिल हैं. पहले को सीखिए और दूसरे के लिए search कीजिए; guide पढ़ने की ज़रूरत नहीं
git clone,git checkout,git pull,git add+commit+push,git reset/rebaserebase -iमें यह guidance लगी होती है कि कौन-सा command क्या करता है, औरgit logoutput को अपनी पसंद और trade-offs के हिसाब से format करना कुछ paragraphs में समझाया जा सकता है. आम तौर पर user-facing commands मेंgit gc,git fsck,git rev-parseजैसी काफी miscellaneous चीज़ें भी शामिल मानी जाती हैंlow-level commands निश्चित रूप से ज़्यादा कठिन हैं, और वे अपने-आप में बहुत-से ऐसे काम करते हैं जिन्हें common use cases के लिए optimized user-facing commands से हमेशा आसानी से नहीं किया जा सकता
संक्षेप में, Git बड़ा है, बल्कि बहुत बड़ा है, लेकिन ज़्यादातर developers के लिए इसकी काफी सारी capabilities mainstream path से बहुत दूर हैं
डराने वाली बात यह है कि guide इतनी लंबी है
मुझे पता है कि Beej की guides आम तौर पर comprehensive होती हैं, लेकिन Git की विशाल subtlety का सही अंदाज़ा इसे देखने से पहले नहीं था
Jujutsu होता तो शायद guide काफी पतली होती, या कम-से-कम ऐसी guide होती जिसे इंसान ज़्यादा आसानी से खोजते-खोजते सीख सके
मुझे लगता है यह guide Git का सिर्फ करीब 10% cover करती है, लेकिन उम्मीद है कि common usage का 90% cover करे
काम पर साल में एक-दो बार, 2 घंटे का Git data model introduction course चलाता हूँ
असल में
.gitdirectory के अंदर जाकर files खोलकर दिखाता हूँ कि सब कुछ सिर्फ basic data structures की plain-text representation है. लोगों के दिमाग में अचानक बात बैठते हुए देखना सच में कमाल होता हैनए joiners code commit करना शुरू कर सकें, इसलिए basic Git recipe document share करता हूँ, लेकिन ज़्यादातर लोग क्या हो रहा है यह समझे बिना बस उसे follow करते हैं
इसके उलट, class लेने वाले लोग भले ही सारे commands अच्छी तरह न जानते हों, लेकिन Git में असल में क्या चल रहा है इसकी काफी reasonable working understanding हासिल कर लेते हैं. commands आसानी से search किए जा सकते हैं, इसलिए अगर mental model सही हो तो commands खुद कोई बड़ी समस्या नहीं हैं. फिर भी HN पर लगभग हर Git post की discussion command line की बातों पर चली जाती है
दिलचस्प बात यह है कि यह class https://xkcd.com/1597/ के alt text जैसी सुनाई देती है. फर्क यह है कि technical readers के लिए यह सच में Git सिखाने का सही तरीका है, और एक बार समझ में आ जाए तो ऐसी foundational understanding मिलती है जिसे आप भूलते नहीं
सच कहूँ तो इसका return on time इतना ज़्यादा है कि इसे न करना अजीब लगता है
presentation की आखिरी slide में Git data model के आधार पर colleagues के जवाब देने के लिए सवाल डाले थे. जैसे “क्या commit को दूसरी branch में ले जाया जा सकता है?”, “यह क्या guarantee करता है कि commit graph में cycle नहीं है?” जैसे सवाल
यह देखकर सच में संतोष हुआ कि लोग सिर्फ Git इस्तेमाल करने तक सीमित नहीं रहे, बल्कि Git के बारे में सोचने लगे
सौभाग्य से मैंने शुरू में Git के internal model का कुछ हिस्सा समझाने वाला video देखा था, और पता चला कि असल में internal knowledge बहुत ज़्यादा या गहरी न हो, तब भी बड़ा फर्क पड़ता है. Git कैसे काम करता है इसका लगभग 5% जान लेने से भी commands क्या करते हैं और उन्हें कैसे इस्तेमाल करना है, यह काफी बेहतर समझ में आने लगा
अगर यह public और 2 घंटे में fit होने लायक concise material पर आधारित था, तो अच्छा होगा अगर आप इसे इस thread या HN post के रूप में share करें. मेरा मानना है कि एक ही topic पर भी अलग premises, analogies और focus वाले learning materials जितने ज़्यादा हों उतना अच्छा
Git का general flow, merge, rebase वगैरह कुछ हद तक कर लेता हूँ, लेकिन Git में बेहतर होने की कोशिश करने के बजाय jujutsu पर switch करने के बारे में गंभीरता से सोच रहा हूँ.
jjGit-compatible है, और colleagues के plain Git इस्तेमाल करते रहने के दौरान मैं अकेले इसे इस्तेमाल कर सकता हूँमुझे लगता है कि एक तरकीब है जिसे कई गाइड और ज़्यादातर Git GUI मिस कर देते हैं। अपवाद के तौर पर magit इसे अच्छे से संभालता है
upstream branch को
feature/fooकेorigin/feature/fooपर नहीं, बल्कि उस target पर सेट करना जिससे आप merge करना चाहते हैं, यानी integration branchmasterयाorigin/masterपरऐसा करने से बहुत कुछ सरल हो जाता है।
git statusचलाने पर यह बताता है कि आप integration branch से कितना अलग हो गए हैं, इसलिए उपयोगी है, और बिना arguments केgit rebaseचलाने पर यह सीधे upstream के ऊपर rebase हो जाता हैorigin/feature/fooको upstream रखना कम उपयोगी है। Developers आम तौर पर remote पर अपनी branch को भी “own” करते हैं, इसलिए उससे आप कितना अलग हुए हैं, इसका ज़्यादा मतलब नहीं होता, और उस पर rebase करना चाहने की भी नौबत नहीं आतीpush.defaultको"current"पर सेट करने सेgit pushभी उम्मीद के मुताबिकfeature/fooकोorigin/feature/fooपर push करता हैसोचता हूँ कि ऐसी setting ज़्यादा common क्यों नहीं है
collaboration section में feature branches को बिल्कुल cover नहीं किया गया है। मुझे लगता है कि यह काफ़ी common workflow है
Guide के “हर कोई अपनी branch इस्तेमाल करता है” वाले तरीके से तुलना की जाए तो उपयोगी होगा। साथ ही section 17 में GitHub pull requests के लिए branch reuse करने के तरीके और हर PR के लिए नई branch बनाने के तरीके पर बात की जा सकती है
लेख अभी देखा नहीं है, लेकिन अच्छा लग रहा है। एक और recommendation के तौर पर Primeagen द्वारा पढ़ाया गया boot.dev का Git course है
यह interactive है और
.gitdirectory के अंदर files को सीधे manipulate करने के स्तर तक गहराई में जाता है। वह course करने के बाद Git कैसे काम करता है, इसे लेकर मेरे पास एक बिल्कुल नया mental model बन गया