Skip to content
This page has been auto-translated and may contain errors.View in English

आपका पहला रिपॉजिटरी

docs.scrimba.com

आप आम तौर पर दो तरीकों से यहां पहुंचते हैं। या तो आपके पास पहले से एक प्रोजेक्ट फ़ोल्डर है, एक weather-app जो आप स्थानीय रूप से बना रहे हैं, और आप चाहते हैं कि Git इसके इतिहास को रिकॉर्ड करना शुरू करे। या किसी और ने पहले से ही प्रोजेक्ट बनाया है, यह GitHub पर रहता है, और आप अपनी मशीन पर इसकी अपनी कार्यशील प्रति चाहते हैं। दोनों तीन छोटी commands से शुरू होते हैं, और इस chapter के अंत तक आप सभी तीन को वास्तव में उपयोग कर चुके होंगे। लेकिन पहले, एक जांच जो दस सेकंड लेती है: यह सुनिश्चित करना कि Git आपकी मशीन पर है ही या नहीं।

क्या आपके पास Git इंस्टॉल है?

इस handbook में सब कुछ terminal में होता है, इसलिए पहला कदम एक खोलना है। एक terminal एक ऐसा ऐप है जहां आप commands को टेक्स्ट के रूप में टाइप करते हैं और प्रोग्राम टेक्स्ट में जवाब देते हैं। यह पहले से ही आपके कंप्यूटर पर है:

  • macOS: ऐप को Terminal कहा जाता है। Cmd+Space दबाएं, "terminal" टाइप करें, और Enter दबाएं।
  • Windows: अभी के लिए PowerShell खोलें (Start menu में "powershell" खोजें)। नीचे Git इंस्टॉल करने से Git Bash भी जुड़ जाता है, एक terminal जो बिल्कुल इसके लिए बनाया गया है, और दोनों एक ही Git commands चलाते हैं।
  • Linux: Terminal या Console नाम का ऐप खोजें; कई distributions पर Ctrl+Alt+T इसे खोलता है।

Git स्वयं एक command-line प्रोग्राम है: इसकी कोई अपनी विंडो नहीं है, और आप इसे ऐसी commands टाइप करके उपयोग करते हैं जो शब्द git से शुरू होती हैं और यह जो प्रिंट करता है वह पढ़ते हैं। यह भी है कि इस handbook में हर code block को कैसे पढ़ा जाए: $ से शुरू होने वाली line वह command है जो आप टाइप करते हैं (बिना $ के), और इसके नीचे की lines Git का जवाब हैं।

तो, जांच। अपने terminal में यह टाइप करें और Enter दबाएं:

bash
$ git --version
git version 2.45.1

एक version number वापस आना मतलब Git इंस्टॉल है और आप तैयार हैं। आपका नंबर इस से अलग हो सकता है, और यह ठीक है। अगर आप इसके बजाय "command not found" या "git is not recognized" देखते हैं, तो Git आपकी मशीन पर नहीं है, और इसे इंस्टॉल करना एक बार का काम है:

  • macOS: git --version चलाने से आमतौर पर एक dialog खुलता है जो Apple के Command Line Tools को इंस्टॉल करने की पेशकश करता है। इसे स्वीकार करें, और macOS आपके लिए Git को इंस्टॉल कर देता है।
  • Windows: git-scm.com/downloads से Git for Windows डाउनलोड करें और installer को चलाएं। defaults सभी उचित विकल्प हैं, और यह रास्ते में Git Bash को भी इंस्टॉल करता है।
  • Linux: अपने distribution के package manager के साथ git package को इंस्टॉल करें, उदाहरण के लिए Ubuntu और Debian पर sudo apt install git

एक बार install पूरा हो जाने के बाद, अपना terminal बंद करें, एक नया खोलें, और फिर से git --version चलाएं। एक version number मतलब आप setup के साथ अच्छे के लिए किए गए हैं; इस handbook के बाकी कुछ भी को इंस्टॉल करने की जरूरत नहीं है।

Version number मामूली से अधिक महत्वपूर्ण है। यह handbook आधुनिक verbs git switch और git restore लिखता है, जो 2019 में Git 2.23 में आए थे, इसलिए बहुत पुराने preinstalled Git वाली मशीन उदाहरणों पर "not a git command" को hit कर सकती है जो सही हैं। पिछले कुछ वर्षों का कोई भी Git इन्हें रखता है; अगर आपका 2.23 से पुराना है, तो इसे ऊपर सूचीबद्ध एक ही जगहों से अपडेट करें।

आप graphical Git tools भी मिलेंगे: GitHub Desktop, VS Code में Git panel, अधिकांश editors में built-in support। सभी front ends हैं जो यह ही Git program को अंदर से चलाते हैं। पहले commands सीखना वहां भी भुगतान करता है, क्योंकि उन tools में हर button एक command पर maps करता है जो आप पहले से ही समझते हैं।

Git एक single self-contained program है, एक service नहीं। कुछ भी background में नहीं चलता, कुछ भी आपके folders को नहीं देखता, और कोई account sign करने के लिए नहीं है: हर command शुरू होता है, repository के अंदर files को पढ़ता या लिखता है, अपना जवाब प्रिंट करता है, और बंद हो जाता है। यह भी है कि सब कुछ offline में काम क्यों करता है। which git चलाएं (या Windows पर where git) यह देखने के लिए कि program disk पर बिल्कुल कहां रहता है।

एक platform quirk जानने लायक है: macOS पर, Apple अपने Command Line Tools के साथ अपना स्वयं का Git build भेजता है, आमतौर पर git-scm.com पर नवीनतम release से एक या दो version पीछे। इस handbook में सब कुछ के लिए, और दैनिक काम में लगभग सब कुछ के लिए, वह gap मायने नहीं रखता।

Junoक्या आपके पास Git इंस्टॉल है? Git एक program है जिससे आप terminal में commands टाइप करके बात करते हैं, और git --version बताता है कि यह आपकी मशीन पर है या नहीं: एक version number मतलब आप तैयार हैं, और "command not found" मतलब इसे git-scm.com या अपने system के installer से इंस्टॉल करें। आप यह भाग केवल एक बार ही करते हैं। Setup किसी भी handbook का सबसे कम मजेदार हिस्सा है, इसलिए इसे पार करने के लिए शाबाश!
Junoक्या आपके पास Git इंस्टॉल है?git --version install सवाल को एक line में settle करता है। कोई भी reasonably recent काम करता है, हालांकि switch और restore verbs जो यह handbook use करता है उन्हें Git 2.23 या उससे नए की जरूरत है, तो अगर आप उससे पीछे हैं तो update करें। GitHub Desktop जैसे GUI tools इसी program को अंदर से चलाते हैं, जिसका मतलब है कि यहां जो कुछ भी आप सीखते हैं वह उन्हें मुफ्त में transfer करता है।
Junoक्या आपके पास Git इंस्टॉल है? Git एक local program है कोई daemon और कोई account नहीं: यह चलता है जब आप टाइप करते हैं, repository में files को touch करता है, और बंद हो जाता है, जिसके कारण इसका हर हिस्सा offline में काम करता है। which git आपको binary दिखाता है। Apple का bundled build नवीनतम release से एक या दो version पीछे है, और चौदह वर्षों में उस gap ने मुझे कुछ नहीं खर्च किया है।

एक फ़ोल्डर को एक रिपॉजिटरी में बदलना

एक terminal खोलें और cd (short for "change directory") के साथ अपने project folder में जाएं, फिर एक command चलाएं, git init:

bash
$ cd weather-app
$ git init
Initialized empty Git repository in /Users/mara/projects/weather-app/.git/

वह folder अब एक repository है: एक project जो Git देख रहा है, इसके snapshots को record करने के लिए तैयार। git init हर बार एक ही काम करता है। यह एक hidden .git folder को खोजता है, अगर यह गायब है तो एक बनाता है, और उस बिंदु से folder Git के watch के अंदर है।

एक नई repository की default branch को main कहा जाता है। अगर आप एक older tutorial, एक older repository, या कुछ साल पहले recorded एक course में land करते हैं, तो आप master को बिल्कुल same चीज के लिए use किया हुआ देखेंगे: यह एक older name के तहत same पहली branch है। यह handbook हमेशा main use करता है।

एक branch क्या है?

एक branch आपके commits के लिए history की एक अलग line है, और main वह है जो हर नई repository के साथ शुरू होता है। Branches उन्हें create करने और उनके बीच switch करने को cover करता है।

git init को परवाह नहीं है कि folder खाली है या नहीं। इसे weather-app के अंदर चलाएं जिसमें index.html और एक src/ folder पहले से बैठे हैं, और Git जहां कहीं भी खड़ा है वहां से उस project को track करना शुरू करता है; कोई भी existing files change नहीं होती। same repository में दूसरी बार git init चलाना harmless भी है। Git notices करता है कि .git folder पहले से exist करता है और इसे बिना touching किए जो history आप पहले से हैं उसे reinitialize करता है, इसलिए habit से दोबारा चलाना आपको कुछ नहीं खर्च करता।

git init एक काम करता है: यह .git folder को बनाता है, इस chapter में बाद में detail में unpacked। repository के बारे में सब कुछ, इसका history, इसकी settings, इसके refs, उस folder के अंदर init इसे बनाने के क्षण से रहता है। files जो आप project में देखते और edit करते हैं वह एक working copy हैं जो tracked है, और .git folder स्वयं repository है।

Junoएक फ़ोल्डर को एक रिपॉजिटरी में बदलनाgit init किसी भी folder को एक Git repository में बदल देता है, Git को track करने के लिए तैयार। इसे एक बार किसी project folder के अंदर चलाएं और आप तैयार हैं, और बाद में फिर से चलाने से कोई हानि नहीं होती। नई repositories की default branch main कहलाती है, हालांकि पुरानी जो आप बाहर निकलते हैं वह अक्सर same चीज के लिए master कहलाती हैं।
Junoएक फ़ोल्डर को एक रिपॉजिटरी में बदलनाgit init एक empty folder में या पहले से files से भरे folder में काम करता है, और इसे फिर से एक repo पर चलाने जो आप पहले से set up कर चुके हैं उससे कोई नुकसान नहीं होता क्योंकि Git recognize करता है कि .git folder पहले से वहां है। Default branch name main है; master में कुछ भी older में expect करें।
Junoएक फ़ोल्डर को एक रिपॉजिटरी में बदलनाgit init केवल .git folder बनाता है, जो actual repository है। आपकी working files उस का एक checkout हैं जो folder track करता है। उस split को hold करें अपनी working files और .git folder के बीच जो उन्हें track करता है।

Git को बताना कि आप कौन हैं

अपने पहले commit से पहले, Git जानना चाहता है कि इसे कौन बना रहा है। एक बार दो values set करें, और Git उन्हें इस machine पर हर commit के लिए याद रखता है जो आप बनाते हैं:

bash
$ git config --global user.name "राज कुमार"
$ git config --global user.email "[email protected]"

हर commit जो आप बनाते हैं वह उस name और email के साथ stamp किया जाता है। इस step को skip करें, और Git कुछ guessed करने के लिए fallback करता है आपके computer के username और hostname से, इसलिए आपके commits एक identity carry करते हैं जो आपने कभी नहीं चुना।

अपने पहले commit से पहले अपना name और email set करें। पहले commit करें और फिर उन्हें set करें, और गलती उस commit के history में baked हो जाती है। बदतर, कुछ hosts (GitHub included) email द्वारा अपने account से commits को match करते हैं, इसलिए गलत address या guessed address के तहत बनाया गया एक commit anonymous stranger के काम के रूप में दिखाई देता है instead of yours के।

--global flag एक config scope set करता है: --global आपकी machine पर सर्वत्र apply होता है, जबकि --local केवल उस repository पर apply होता है जहां आप इसे चलाते हैं। यह आपको settings को layer करने देता है। आपकी global email हर repository को default से cover करती है, और एक --local override एक specific repo में इस पर priority लेता है और कहीं और नहीं, useful होता है जब एक work project को अपने personal projects से अलग address की जरूरत हो:

bash
$ cd weather-app
$ git config --local user.email "[email protected]"
$ git config user.email
[email protected]

कोई scope flag के बिना git config user.email चलाना उस value को पढ़ता है जो वास्तव में यहां apply होता है: local one अगर आप इसे set करते हैं, otherwise global one।

दोनों scopes text files हैं जो Git एक fixed order में पढ़ता है। global one आपके home folder में ~/.gitconfig पर रहता है; local one repository के own .git folder में रहता है, .git/config पर। Git local settings पहले पढ़ता है और उन्हें global ones को override करने देता है, जो पूरा layering mechanic है, plain text files में laid out जो आप खुद को open और read कर सकते हैं।

JunoGit को बताना कि आप कौन हैंgit config --global user.name और git config --global user.email name और email set करते हैं जो Git हर commit पर stamp करता है जो आप बनाते हैं। अपने पहले commit से पहले उन्हें set करें, क्योंकि एक commit जो आप अपना email set करने से पहले बनाते हैं वह एक guessed identity को attribute किया जाता है, और GitHub जैसा एक host शायद इसे आपके account से connect न करे। इसे एक बार करें और आपकी machine पर हर repository इसे याद रखती है।
JunoGit को बताना कि आप कौन हैं--global आपकी machine पर हर repository पर apply होता है, और --local current repo के लिए केवल इसे override करता है, एक personal email से एक work one को split करने के लिए useful। Local settings जब दोनों set हों तो win करती हैं, और git config user.email आपको बताता है कि कौन सी value actually active है दिए गए repo में।
JunoGit को बताना कि आप कौन हैं Config scopes layered text files हैं: global ~/.gitconfig पर रहता है, local repo के अंदर .git/config पर रहता है, और local जब दोनों एक value set करें तो win करता है। अपना email set करना skip करें और Git एक guessed identity से fallback करता है आपके username और machine name से बनाया गया, जिसके कारण एक stray commit एक strange name के तहत लगभग हमेशा एक missing user.email को trace करता है।

git clone से एक existing project को copy करना

कभी-कभी project पहले से ही कहीं और exist करता है, और आप इसकी एक working copy अपनी machine पर चाहते हैं। git clone यह एक command में करता है:

bash
$ git clone https://github.com/octocat/Hello-World.git
Cloning into 'Hello-World'...
remote: Enumerating objects: 13, done.
remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13
Receiving objects: 100% (13/13), done.

Git एक नया folder बनाता है Hello-World नाम का, project के full history को इसमें download करता है, और files को folder में रखता है इसलिए आप तुरंत reading या editing शुरू कर सकते हैं। कोई अलग git init step की जरूरत नहीं है। Cloning download के part के रूप में repository को आपके लिए set up करता है।

जब project पहले से exist करता है और आप इसकी एक connected copy चाहते हैं तो git clone का use करें। जब आप कुछ बिल्कुल नया start कर रहे हैं जो कहीं और exist नहीं करता तो git init का use करें। Cloning भी एक connection wire करता है वापस जहां आप clone करते हैं, नाम origin के तहत, कुछ जो init अकेले कभी नहीं करता; वह connection later chapters commits को send और receive करने के लिए use करते हैं।

Cloning project के entire history को लेकर आता है, हर commit जो उसने कभी किया है, और पूरे .git folder को अपनी machine पर populate करता है, जहां git init इसे empty छोड़ देता। एक project का clone जिसके पास वर्षों का history है एक moment ले सकता है ठीक इसी कारण के लिए, भले ही आप जो afterward देखते हैं वह newest files का एक snapshot दिखता है।

Junogit clone से एक existing project को copy करनाgit clone <url> किसी और के repository को download करता है, पूरा history included, एक नए folder में जो project के नाम के बाद है। इसे use करें जब project पहले से exist करता है; git init use करें जब आप एक को scratch से start कर रहे हों। एक बार cloning खत्म हो जाने के बाद आपके पास एक full working copy है, देखने या add करने के लिए तैयार।
Junogit clone से एक existing project को copy करना Clone करें जब एक project पहले से कहीं रहता है और आप एक connected copy चाहते हैं; init करें जब कुछ भी exist न करता हो। Cloning automatically origin नाम के तहत जहां आप clone से copy करते हैं वहां एक connection wire करता है, जो init अकेले कभी setup नहीं करता।
Junogit clone से एक existing project को copy करना Clone पूरे .git folder को recreate करता है हर commit के साथ जो project के पास कभी था। यह पूरा history include करता है, जिसके कारण एक older project को clone करने में एक moment लग सकता है भले ही आप केवल इसकी current files को afterward देखते हों।

Hidden .git folder के अंदर क्या है

हर repository, चाहे आप git init या git clone से वहां गए हों, अपने root पर .git नाम का एक hidden folder है। यह default से hidden है, इसलिए terminal से पूरी listing मांगें ls -a के साथ (ls एक folder की contents को list करता है, और -a hidden entries को include करता है) यह अपनी normal project files के साथ बैठे हुए देखने के लिए:

bash
$ ls -a
.  ..  .git  README.md  src

वह folder real repository है। यह हर commit को hold करता है जो आप बनाते हैं, आपकी branches, और ऊपर section से config settings। .git folder को delete करें और project अपना पूरा history खो देता है, एक ordinary folder में वापस turning जो Git अब track नहीं करता। project में बाकी सब कुछ .git रखता है का एक working copy है।

अंदर देखें और आपको कुछ recognizable pieces मिलेंगे: एक config file (ऊपर section से local settings), एक HEAD file, और objects और refs नाम के folders। आपको इनमें से किसी को भी hand से open या edit करने की जरूरत नहीं है, लेकिन names को recognize करना helps करता है जब उनमें से एक error message या search result में turn up करता है।

उन names में से कुछ properly जानने लायक हैं। objects folder repository का object database है: हर version हर file का और हर commit जो आप बनाते हैं, compressed और stored by the content itself rather than a filename के बजाय। refs folder आपकी branches को hold करता है, हर एक एक small file pointing at a commit id। HEAD एक single file है recording करता है कि आप currently कौन सी branch को have checked out किया है। config ऊपर covered local settings file है।

इसमें से कोई भी कुछ आप day to day से hand से edit करते हैं। अपना पूरा history को ordinary files के रूप में बैठे हुए देखना, एक server कहीं hidden दूर के बजाय, explain करता है कि एक clone क्यों आपको full history offline देता है, और क्यों .git delete करना कुछ भी tidy नहीं करता: यह हर commit को erase करता है project कभी किया था।

JunoHidden .git folder के अंदर क्या है हर repository के पास अपने root पर एक hidden .git folder है, और वह folder real repository है: आपका पूरा history और इसकी settings वहां रहती हैं। एक project के अंदर .git देखने के लिए ls -a चलाएं, क्योंकि यह default से hidden है। कभी भी इसे delete न करें जब तक आप actually project के पूरे history को erase करना न चाहते हों, क्योंकि इसे delete करना folder को एक plain folder में वापस turn करता है Git अब track नहीं करता।
JunoHidden .git folder के अंदर क्या है.git के अंदर आपको एक config file (आपकी local settings) को recognize करेंगे, एक HEAD file, और objects और refs folders। आप day to day से इन्हें hand से touch नहीं करेंगे, लेकिन names error messages और Git documentation में show up करते हैं। Cloning इस पूरे folder को copy करता है, जिसके कारण एक clone पूरे history के साथ arrive होता है बजाय केवल newest files के।
JunoHidden .git folder के अंदर क्या हैobjects repository का object database है, holding करता है हर version हर file का और commit, addressed by content rather than filename। refs अपनी branches को plain files के रूप में hold करता है pointing at a commit id, और HEAD record करता है कि आप कौन सी को have checked out किया है। कुछ भी वहां hand editing की जरूरत नहीं है, लेकिन इसे ordinary files के रूप में disk पर देखना reason है कि cloning आपको full offline history देता है, और reason है कि .git delete करना सब कुछ erase करता है बजाय केवल clean करने के।

अगर repository और commit terms अभी भी fuzzy feel करते हैं, What is Git mental model को cover करता है जो ये commands build करते हैं, और Glossary में इस chapter में हर vocabulary का एक short definition है। एक बार आपकी identity set हो जाने के और आपके पास काम करने के लिए एक repository हो, The commit loop everyday cycle को cover करता है editing, staging, और committing का जो आप constantly से use करेंगे।