git - शुरुआती के लिए गिट: निश्चित व्यावहारिक गाइड




version-control (20)

ठीक है, पीजे हेटेट द्वारा इस पोस्ट को देखने के बाद, मैंने अंत तक जाने और Git साथ जाने का फैसला किया है।

तो मुझे गिट के लिए एक शुरुआती व्यावहारिक गाइड की ज़रूरत है। "शुरुआती" को किसी ऐसे व्यक्ति के रूप में परिभाषित किया जा रहा है जो अपने कंपाइलर को संभालने के बारे में जानता है, Makefile क्या कुछ स्तर पर समझता है, और इसे बिना किसी समझ के स्रोत स्रोत को छुआ है।

इस प्रैक्टिस के रूप में परिभाषित किया जाने वाला "प्रैक्टिकल" पृष्ठभूमि में गिट क्या कर रहा है, इस बारे में बहुत विस्तार से नहीं जानना चाहता है, और यह भी वितरित नहीं करता है (या पता है) कि यह वितरित किया गया है। आपके उत्तर संभावनाओं पर संकेत दे सकते हैं, लेकिन शुरुआत करने वाले को लक्षित करने का प्रयास करें जो 'सर्वर' पर 'मुख्य' भंडार रखना चाहता है जिसका बैक अप और सुरक्षित है, और अपने स्थानीय भंडार को केवल 'ग्राहक' संसाधन के रूप में मानें।

इसलिए:

स्थापना / सेटअप

कोड के साथ काम करना

टैगिंग, ब्रांचिंग, रिलीज, बेसलाइन

अन्य

  • एक अच्छी जीयूआई, आईडीई प्लगइन इत्यादि का वर्णन करें और लिंक करें जो गिट को एक गैर-कमांड लाइन संसाधन बनाता है, लेकिन कृपया इसकी सीमाओं के साथ-साथ इसके अच्छे भी सूचीबद्ध करें।
    • msysgit - क्रॉस प्लेटफ़ॉर्म, गिट के साथ शामिल है
    • msysgit - क्रॉस प्लेटफ़ॉर्म इतिहास दर्शक, गिट के साथ शामिल है
    • msysgit - मैक ओएस एक्स
    • msysgit - मैक ओएस एक्स इतिहास दर्शक
    • msysgit - क्रॉस प्लेटफार्म, वाणिज्यिक, बीटा
    • लिनक्स के लिए tig - कंसोल जीयूआई
    • qgit - विंडोज़, लिनक्स के लिए जीयूआई
    • msysgit - विंडोज के लिए पैकेज, दोस्ताना जीयूआई शामिल है
  • शुरुआती किसी अन्य सामान्य कार्य को पता होना चाहिए?
  • मैं अपने स्रोत नियंत्रण स्रोत के रूप में एक उपवर्तन भंडार सेट के साथ प्रभावी ढंग से कैसे काम करूं?

अन्य गिट शुरुआती संदर्भ

गिट में डेलविंग

मैं समय-समय पर प्रविष्टियों के माध्यम से जाऊंगा और उन्हें 'साफ' कर दूंगा ताकि उनके पास लगातार दिखने / महसूस हो और सूची को स्कैन करना आसान हो - एक सरल "हेडर - संक्षिप्त स्पष्टीकरण - निर्देशों की सूची - गेटचास और अतिरिक्त जानकारी "टेम्पलेट। मैं उपरोक्त बुलेट सूची से प्रविष्टियों से भी लिंक करूंगा ताकि बाद में उन्हें ढूंढना आसान हो।

https://code.i-harness.com


आप एक नई परियोजना / भंडार कैसे बनाते हैं?

एक गिट भंडार केवल एक निर्देशिका है जिसमें एक विशेष .git निर्देशिका है।

यह "केंद्रीकृत" संस्करण-नियंत्रण प्रणालियों (उपवर्तन की तरह) से अलग है, जहां रिमोट सर्वर पर "भंडार" होस्ट किया जाता है, जिसे आप "काम करने वाली प्रति" निर्देशिका में checkout करते हैं। गिट के साथ, आपकी कामकाजी प्रति भंडार है।

निर्देशिका में git init चलाएं जिसमें वे फ़ाइलें हैं जिन्हें आप ट्रैक करना चाहते हैं।

उदाहरण के लिए,

cd ~/code/project001/
git init

यह वर्तमान निर्देशिका में एक .git (छुपा) फ़ोल्डर बनाता है।

एक नई परियोजना बनाने के लिए, अतिरिक्त तर्क के साथ git init चलाएं (निर्देशिका का नाम बनाया जाना चाहिए):

git init project002

(This is equivalent to: mkdir project002 && cd project002 && git init)

यह जांचने के लिए कि वर्तमान वर्तमान पथ गिट भंडार के भीतर है, बस git status चलाएं - यदि यह एक भंडार नहीं है, तो यह "घातक: एक गिट भंडार नहीं" रिपोर्ट करेगा

आप .git निर्देशिका भी सूचीबद्ध कर सकते हैं, और जांच सकते हैं कि इसमें निम्न के समान फ़ाइलें / निर्देशिकाएं हैं:

$ ls .git
HEAD         config       hooks/       objects/
branches/    description  info/        refs/

यदि किसी भी कारण से आप एक भंडार "डी-गिट" करना चाहते हैं (आप उस परियोजना को ट्रैक करने के लिए गिट का उपयोग करना बंद करना चाहते हैं)। बस भंडार के आधार स्तर पर .git निर्देशिका को हटा दें।

cd ~/code/project001/
rm -rf .git/

सावधानी: यह सभी संशोधन इतिहास, आपके सभी टैग, सब कुछ गिट कर देगा नष्ट कर देगा। यह "वर्तमान" फ़ाइलों को स्पर्श नहीं करेगा (जिन फ़ाइलों को आप वर्तमान में देख सकते हैं), लेकिन पिछले परिवर्तन, हटाए गए फाइलें और इतने पर अप्राप्य हो जाएंगे!


आप एक साझा टीम भंडार कैसे स्थापित करते हैं?

एक सामान्य भंडार कैसे स्थापित करें here वर्णित here - लेकिन आप एक टीम भंडार कैसे स्थापित करते हैं कि हर कोई खींच और धक्का दे सकता है?

एक साझा एनएफएस फ़ाइल सिस्टम का उपयोग करना

मान लीजिए कि आपकी टीम पहले से ही एक साझा समूह सदस्यता है जिसका उपयोग किया जा सकता है।

mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared

इस भंडार का उपयोग शुरू करने के लिए सबसे आसान काम स्थानीय भंडार से शुरू होता है जिसका आप पहले से उपयोग कर रहे हैं:

cd your/local/workspace/project
git remote add origin /your/share/folder/project.git
git push origin master

अन्य अब इसे क्लोन कर सकते हैं और काम करना शुरू कर सकते हैं:

cd your/local/workspace
git clone /your/share/folder/project.git

एसएसएच का उपयोग करना

लक्ष्य सर्वर पर एक उपयोगकर्ता खाता सेट अप करें। चाहे आप बिना किसी पासवर्ड वाले खाते का उपयोग करते हैं, पासवर्ड वाला खाता है, या authorized_keys उपयोग वास्तव में आपके आवश्यक स्तर की सुरक्षा पर निर्भर करता है। कुछ और जानकारी के लिए एसएसएच पर गिट कॉन्फ़िगर करने पर एक नज़र डालें।

यदि सभी डेवलपर इस साझा भंडार तक पहुंचने के लिए एक ही खाते का उपयोग करते हैं, तो आपको ऊपर के रूप में - --shared विकल्प का उपयोग करने की आवश्यकता नहीं है।

उपरोक्त के रूप में भंडार में प्रवेश करने के बाद, आप इस तरह के प्रारंभिक धक्का करते हैं:

cd your/local/workspace/project
git remote add origin [email protected]:/path/to/project.git
git push origin master

उपरोक्त के साथ समानता देखें? एकमात्र चीज जो इसके अतिरिक्त हो सकती है वह है एसएसएच पासवर्ड के लिए पूछता है अगर खाते में पासवर्ड है। यदि आपको पासवर्ड के बिना किसी खाते पर यह प्रॉम्प्ट मिलता है तो SSH सर्वर ने PermitEmptyPasswords को अक्षम कर PermitEmptyPasswords

क्लोनिंग अब इस तरह दिखता है:

cd your/local/workspace
git clone [email protected]:/path/to/project.git

आप संशोधन के एक विशेष सेट को 'टैग' कैसे करते हैं

आप फाइलों के एक विशेष सेट के लिए संशोधन का एक विशेष सेट 'टैग' या 'रिलीज' कैसे करते हैं ताकि आप उसे बाद में खींच सकें?

git tag कमांड का उपयोग करना।

वर्तमान संशोधन को "टैग" करने के लिए, आप बस दौड़ेंगे ..

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

वर्तमान टैग्स को सूचीबद्ध करने के लिए, बस कोई तर्क के साथ git tag चलाएं, या -l (लोअर केस एल):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

टैग हटाने के लिए, आप -d ध्वज का उपयोग करते हैं:

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

एक विशिष्ट (पिछली) प्रतिबद्धता को टैग करने के लिए, आप बस करते हैं ..

git tag [tag name] [revision SHA1 hash]

उदाहरण के लिए:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

नोट: डिफ़ॉल्ट रूप से, गिट एक "हल्के वजन" टैग बनाता है (मूल रूप से एक विशिष्ट संशोधन का संदर्भ)। "दाएं" तरीका -a ध्वज का उपयोग करना है। यह आपके संपादक को टैग संदेश मांगने के लिए लॉन्च करेगा (एक प्रतिबद्ध संदेश के लिए पूछने के समान, आप कमांड लाइन पर टैग संदेश की आपूर्ति के लिए -m ध्वज का भी उपयोग कर सकते हैं)। एक एनोटेटेड टैग का उपयोग करने से ऑब्जेक्ट अपनी आईडी, डेट, टैगर (लेखक), और वैकल्पिक रूप से एक जीपीजी हस्ताक्षर ( -s टैग का उपयोग करके) बनाता है। इस पर और जानकारी के लिए, इस पोस्ट को देखें

git tag mytagwithmsg -a -m 'This is a tag, with message'

और एनोटेशन के साथ टैग सूचीबद्ध करने के लिए, प्रत्येक टैग संदेश की 1 पंक्ति दिखाने के लिए -n1 ध्वज का उपयोग करें ( -n245 245 प्रत्येक एनोटेशन की पहली 245 लाइनें दिखाने के लिए, और इसी तरह):

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

अधिक जानकारी के लिए, गिट-टैग (1) मैन्युअल पृष्ठ देखें


गिट के लिए जीयूआई

गिट जीयूआई

गिट के साथ शामिल - कमांड लाइन से git gui चलाएं, और विंडोज़ msysgit इंस्टॉलर इसे स्टार्ट मेनू में जोड़ता है।

गिट जीयूआई बहुमत कर सकता है जो आपको गिट के साथ करने की ज़रूरत है। चरण परिवर्तन सहित, गिट और रिपॉजिटरीज को कॉन्फ़िगर करें, परिवर्तनों को दबाएं, शाखाएं बनाएं / चेक करें / हटाएं, विलय करें, और कई अन्य चीजें।

राइट-क्लिक मेनू में मेरी पसंदीदा विशेषताओं में से एक "स्टेज लाइन" और "स्टेज हंक" शॉर्टकट है, जो आपको फ़ाइल के विशिष्ट हिस्सों को करने देता है। आप git add -i माध्यम से इसे प्राप्त कर सकते git add -i , लेकिन मुझे इसका उपयोग करना आसान लगता है।

यह सबसे सुंदर एप्लिकेशन नहीं है, लेकिन यह लगभग सभी प्लेटफार्मों पर काम करता है (टीसीएल / टीके पर आधारित)

Screenshots | एक स्क्रीनकास्ट

GitK

गिट के साथ भी शामिल है। यह एक गिट इतिहास दर्शक है, और आपको एक भंडार के इतिहास को देखने की सुविधा देता है (शाखाओं सहित, जब वे बनाए जाते हैं, और विलय हो जाते हैं)। आप काम देख सकते हैं और खोज सकते हैं।

गिट-गुई के साथ अच्छी तरह से एक साथ जाता है।

Gitnub

मैक ओएस एक्स आवेदन। मुख्य रूप से git log बराबर है, लेकिन इसमें github साथ कुछ एकीकरण है (जैसे "नेटवर्क व्यू")।

सुंदर लग रहा है, और मैक ओएस एक्स के साथ फिट बैठता है। आप भंडार खोज सकते हैं। गितनब का सबसे बड़ा आलोचना यह है कि यह एक रैखिक फैशन (एक समय में एक शाखा) में इतिहास दिखाता है - यह शाखाकरण और विलय को कल्पना नहीं करता है, जो गिट के साथ महत्वपूर्ण हो सकता है, हालांकि यह एक नियोजित सुधार है।

Gitnub github

GitX

"ओएस एक्स के लिए एक गिटक क्लोन" होने का इरादा है।

यह गैर-रैखिक ब्रांचिंग इतिहास को विज़ुअलाइज़ कर सकता है, काम करता है, देख सकता है और खोज करता है, और इसमें कुछ अन्य अच्छी सुविधाएं हैं जैसे किसी भी फ़ाइल में किसी भी फ़ाइल में "क्विकुक्यू" करने में सक्षम होना (फ़ाइल-सूची दृश्य में प्रेस स्पेस), किसी भी फाइल को निर्यात करना (ड्रैग और ड्रॉप के माध्यम से)।

यह git-gui / gitk तुलना में ओएस एक्स में कहीं बेहतर एकीकृत है, और असाधारण रूप से बड़ी भंडारों के साथ भी तेज़ और स्थिर है।

मूल गिट रिपोजिटरी pieter ने हाल ही में अपडेट नहीं किया है (लेखन के समय एक वर्ष से अधिक)। brotherbard/gitx पर एक अधिक सक्रिय रूप से बनाए रखा शाखा उपलब्ध है - इसमें "साइडबार, फ़ेच, पुल, पुश, रिमोट, मर्ज, चेरी-पिक, रीबेस, क्लोन, क्लोन"

Download | Screenshots | गिट भंडार | brotherbard/gitx | लॉलॉन कांटा

SmartGit

मुखपृष्ठ से:

स्मार्टगिट वितरित संस्करण नियंत्रण प्रणाली गिट के लिए एक फ्रंट एंड है और विंडोज, मैक ओएस एक्स और लिनक्स पर चलता है। स्मार्टगिट उन डेवलपर्स के लिए है जो कमांड लाइन क्लाइंट पर ग्राफ़िकल यूजर इंटरफेस पसंद करते हैं, गिट के साथ और अधिक उत्पादक होने के लिए आज - सबसे शक्तिशाली डीवीसीएस।

आप इसे SmartGit से डाउनलोड कर सकते हैं।

Download

TortoiseGit

विंडोज उपयोगकर्ताओं के लिए TortoiseSVN गिट संस्करण।

यह TortoiseSVN को TortoiseGit पर पोर्ट कर रहा है नवीनतम रिलीज 1.2.1.0 यह रिलीज नियमित कार्य, इस तरह की प्रतिबद्धता, शो लॉग, दो संस्करणों को अलग कर सकता है, शाखा और टैग बना सकता है, पैच बना सकता है और इसी तरह। विस्तार के लिए ReleaseNotes देखें। इस परियोजना में योगदान करने के लिए आपका स्वागत है।

Download

QGit

क्यूजीआईटी एक गिट जीयूआई दर्शक है जो क्यूटी / सी ++ पर बनाया गया है।

Qgit के साथ आप संशोधन इतिहास ब्राउज़ कर सकते हैं, पैच सामग्री देख सकते हैं और फ़ाइलों को बदल सकते हैं, ग्राफिक रूप से विभिन्न विकास शाखाओं का पालन कर सकते हैं।

Download

gitg

gitg gtk + / GNOME को लक्षित करने वाला एक गिट रिपोजिटरी दर्शक है। इसके मुख्य उद्देश्यों में से एक है कई डेस्कटॉपों पर गिट फ्रंटेंड के लिए एक और एकीकृत उपयोगकर्ता अनुभव प्रदान करना। यह क्रॉस-प्लेटफॉर्म एप्लिकेशन नहीं लिख रहा है, लेकिन अन्य ऑपरेटिंग सिस्टम (जैसे ओएस एक्स के लिए जीआईटीएक्स) के लिए समान ग्राहकों के साथ निकट सहयोग से।

विशेषताएं

  • संशोधन इतिहास ब्राउज़ करें।
  • बड़े भंडारों को संभालें (लिनक्स भंडार लोड करता है, 17000+ संशोधन, 1 सेकंड के नीचे)।
  • प्रतिबद्ध बदलाव।
  • चरण / unstage व्यक्तिगत शिकारी।
  • परिवर्तनों को वापस करें।
  • संशोधन में परिवर्तनों के रंगीन अंतर दिखाएं।
  • किसी दिए गए संशोधन के लिए पेड़ ब्राउज़ करें।
  • किसी दिए गए संशोधन के पेड़ के निर्यात भागों।
  • किसी भी रेफस्पेक की आपूर्ति करें जो 'गिट लॉग' जैसे कमांड को इतिहास बनाने के लिए समझ सके।
  • इतिहास दृश्य में शाखाओं के बीच दिखाएं और स्विच करें।

डाउनलोड करें: releases या source

Gitbox

गिटबॉक्स गिट संस्करण नियंत्रण प्रणाली के लिए एक मैक ओएस एक्स ग्राफिकल इंटरफ़ेस है। एक ही विंडो में आप शाखाएं, इतिहास और कार्य निर्देशिका की स्थिति देखते हैं।

रोज़ाना संचालन आसान होता है: एक चेकबॉक्स के साथ चरण और अस्थिर परिवर्तन। एक क्लिक के साथ Commit, खींचें, विलय और धक्का। FileMerge.app के साथ एक अंतर दिखाने के लिए एक बदलाव को डबल-क्लिक करें।

Gitbox

Gity

गिट वेबसाइट में अधिक जानकारी नहीं है, लेकिन वहां स्क्रीनशॉट से यह एक फीचर समृद्ध ओपन सोर्स ओएस एक्स गिट गुई प्रतीत होता है।

Download या source

Meld

मेल्ड एक दृश्य diff और मर्ज उपकरण है। आप दो या तीन फाइलों की तुलना कर सकते हैं और उन्हें जगह में संपादित कर सकते हैं (गतिशील रूप से diffs अद्यतन)। आप दो या तीन फ़ोल्डर्स की तुलना कर सकते हैं और फाइल तुलना लॉन्च कर सकते हैं। आप लोकप्रिय संस्करण नियंत्रण प्रणाली जैसे सीवीएस, सबवर्जन, बाज़ार-एनजी और मर्कुरियल [ और गिट ] से एक कार्यशील प्रतिलिपि ब्राउज़ और देख सकते हैं।

Downloads

Katana

स्टीव डेकोर्ट द्वारा ओएसएक्स के लिए एक गिट GUI।

एक नज़र में, देखें कि कौन सी रिमोट शाखाओं में खींचने के लिए परिवर्तन हैं और स्थानीय रिपोज़ में धक्का देने के लिए परिवर्तन हैं। ऐड, प्रतिबद्ध, पुश, पुल, टैग और रीसेट के गिट ऑप्स समर्थित हैं, साथ ही दृश्य भिन्नता और परियोजना पदानुक्रम की दृश्य ब्राउज़िंग जो स्थानीय परिवर्तनों और परिवर्धनों को हाइलाइट करती है।

1 भंडार के लिए नि: शुल्क, $ 25 और अधिक के लिए।

Katana

स्प्राउट (पूर्व में गिटमैक)

गिट को उपयोग करने में आसान बनाने पर ध्यान केंद्रित करता है। मूल कोको (मैक-जैसे) यूआई, फास्ट रिपोजिटरी ब्राउजिंग, क्लोनिंग, पुश / पुल, ब्रांचिंग / विलय, विज़ुअल डिफ, रिमोट शाखाएं, टर्मिनल तक आसान पहुंच, आदि शामिल हैं।

सबसे अधिक इस्तेमाल किए जाने वाले गिट क्रियाओं को अंतर्ज्ञानी और निष्पादित करने में आसान बनाकर, स्प्राउट (पूर्व में गिटमैक) गिट उपयोगकर्ता के अनुकूल बनाता है। अधिकांश गिट वर्कफ़्लोज़ के साथ संगत, स्प्राउट डिजाइनरों और डेवलपर्स, टीम सहयोग और उन्नत और नौसिखिया उपयोगकर्ताओं के लिए समान है।

डाउनलोड करें | वेबसाइट

Tower

मैक ओएसएक्स के लिए एक फीचर समृद्ध गिट जीयूआई। एक-उपयोगकर्ता लाइसेंस के लिए 30-दिन का निःशुल्क परीक्षण, $ 59USD।

Download | Tower

EGit

गिट संस्करण नियंत्रण प्रणाली के लिए ईजीट एक ग्रहण टीम प्रदाता है। गिट एक वितरित एससीएम है, जिसका अर्थ है कि प्रत्येक डेवलपर के पास कोड के प्रत्येक संशोधन के सभी इतिहास की एक पूर्ण प्रति है, इतिहास के खिलाफ प्रश्नों को बहुत तेज़ और बहुमुखी बनाते हैं।

ईजीआईटी परियोजना गिट के जेजीआईटी जावा कार्यान्वयन के शीर्ष पर ग्रहण टूलिंग को कार्यान्वित कर रही है।

Download | EGit

गिट एक्सटेंशन

विंडोज के लिए ओपन सोर्स - उपयोग करने में आसान, एक ही पैकेज में गिट के साथ काम करने के लिए आपको जो कुछ भी चाहिए, इंस्टॉल करता है।

गिट एक्सटेंशन विंडोज़ पर गिट के साथ काम करने के लिए एक टूलकिट है जो अधिक सहज है। खोल एक्सटेंशन विंडोज एक्सप्लोरर में अंतरण करेगा और फाइलों और निर्देशिकाओं पर एक संदर्भ मेनू प्रस्तुत करेगा। विजुअल स्टूडियो से गिट का उपयोग करने के लिए एक विजुअल स्टूडियो प्लगइन भी है।

Download

गिट गुई सामान पर विस्तार के लिए dbr लिए बड़ा धन्यवाद।

SourceTree

SourceTree गिट, मर्कुरियल और एसवीएन के लिए एक मुफ्त मैक क्लाइंट है। एटलसियन द्वारा निर्मित, बिटबकेट के पीछे के लोग, यह किसी भी वीसी सिस्टम के साथ समान रूप से अच्छी तरह से काम करता प्रतीत होता है, जो आपको अपनी सभी परियोजनाओं के उपयोग के लिए एक ही उपकरण को मास्टर करने की अनुमति देता है, हालांकि वे संस्करण-नियंत्रित हैं। फ़ीचर पैक, और मुफ़्त।

नौसिखिया और उन्नत उपयोगकर्ताओं दोनों के लिए विशेषज्ञ तैयार और फ़ीचर पैक:

आउटगोइंग और आने वाले बदलावों की समीक्षा करें। शाखाओं के बीच चेरी-पिक। पैच हैंडलिंग, रीबेस, स्टैश / शेल्व और बहुत कुछ।

Download | SourceTree


गिट रीसेट करें

मान लें कि आप एक पुल बनाते हैं, इसे अपने कोड में विलय करते हैं, और निर्णय लेते हैं कि आपको यह पसंद नहीं है। गिट-लॉग, या टिग का प्रयोग करें, और जहां भी आप वापस जाना चाहते हैं, हैश ढूंढें (शायद पुल / विलय से पहले आपकी आखिरी प्रतिबद्धता) हैश की प्रतिलिपि बनाएँ, और करें:

# Revert to a previous commit by hash:
git-reset --hard <hash>

हैश के बजाय, आप पिछली प्रतिबद्धता के लिए शॉर्टकट के रूप में HEAD ^ का उपयोग कर सकते हैं।

# Revert to previous commit:
git-reset --hard HEAD^

Checking Out Code

सबसे पहले एक खाली डीआईआर पर जाएं, इसे एक भंडार बनाने के लिए "गिट इनिट" का उपयोग करें, फिर रिमोट रेपो को अपने आप में क्लोन करें।

git clone [email protected]:/dir/to/repo

जहां भी आप प्रारंभ में क्लोन करते हैं वह है जहां "गिट पुल" डिफ़ॉल्ट रूप से खींच जाएगा।


How can I create a branch on a remote repository?

Assuming that you have cloned your remote repository from some single remote repository.

# create a new branch locally
git branch name_of_branch
git checkout name_of_branch
# edit/add/remove files    
# ... 
# Commit your changes locally
git add fileName
git commit -m Message
# push changes and new branch to remote repository:
git push origin name_of_branch:name_of_branch

How do you compare two revisions of a file, or your current file and a previous revision?

Compare command is git diff .

To compare 2 revisions of a file:

$ git diff <commit1> <commit2> <file_name>

That diffs commit1 against commit2; if you change order then files are diffed the other way round, which may not be what you expect...

To compare current staged file against the repository:

$ git diff --staged <file_name>

To compare current unstaged file against the repository:

$ git diff <file_name>

How do you see the history of revisions to a file?

git log -- filename

How to track remote branches

Assuming there is a remote repository that you cloned your local repository from and also assuming that there is a branch named 'some_branch' on that remote repository, here is how to track it locally:

# list remote branches
git branch -r

# start tracking one remote branch
git branch --track some_branch origin/some_branch

# change to the branch locally
git checkout some_branch

# make changes and commit them locally
....

# push your changes to the remote repository:
git push

प्रतिबद्ध बदलाव

एक बार फ़ाइल संपादित करने के बाद, आपको अपने परिवर्तन गिट में करने की आवश्यकता है। जब आप इस कमांड को निष्पादित करते हैं तो यह एक प्रतिबद्ध संदेश मांगेगा - जो कि पाठ का एक साधारण सा है जो हर किसी को बताता है कि आपने क्या बदला है।

$ git commit source/main.c

निर्देशिका में फ़ाइल main.c प्रतिबद्ध करेगा ./source/

$ git commit -a # the -a flag pulls in all modified files

सभी बदली गई फाइलें (लेकिन नई फाइलें नहीं, उन्हें गिट-एड के साथ इंडेक्स में जोड़ा जाना चाहिए)। यदि आप केवल कुछ फाइलें ही करना चाहते हैं तो आपको उन्हें गिट-एड के साथ पहले चरणबद्ध करना होगा और फिर ध्वज के बिना प्रतिबद्ध होना होगा।

संचार केवल आपके स्थानीय भंडार को बदलता है हालांकि दूरस्थ भंडार नहीं। अगर आप रिमोट रिपोजिटरी में काम भेजना चाहते हैं तो आपको धक्का देना होगा।

$ git push <remote> <branch> # push new commits to the <branch> on the <remote> repository

सीवीएस या एसवीएन से आने वाले किसी के लिए यह एक बदलाव है क्योंकि केंद्रीय भंडार के प्रति प्रतिबद्धता के लिए अब दो कदमों की आवश्यकता है।


फ़ाइलों को अनदेखा करने के लिए इसे कैसे कॉन्फ़िगर करें:

गिट को उन फ़ाइलों को अनदेखा करने की क्षमता है जिन्हें आप ट्रैक करना नहीं चाहते हैं, यह बहुत उपयोगी है।

किसी फ़ाइल या फ़ाइलों के सेट को अनदेखा करने के लिए आप एक पैटर्न प्रदान करते हैं। गिट के लिए पैटर्न वाक्यविन्यास काफी सरल है, लेकिन शक्तिशाली है। यह उन तीनों अलग-अलग फाइलों पर लागू होता है जिनका मैं उल्लेख करता हूं।

  • एक खाली रेखा किसी भी फाइल को अनदेखा नहीं करती है, इसे आमतौर पर विभाजक के रूप में उपयोग किया जाता है।
  • # के साथ घूमने वाली रेखाएं टिप्पणियों के रूप में कार्य करती हैं।
  • ! उपसर्ग वैकल्पिक है और पैटर्न को अस्वीकार कर देगा। कोई भी नकारात्मक पैटर्न जो मैचों से कम प्राथमिकता पैटर्न को ओवरराइड करेगा।
  • उन्नत अभिव्यक्तियों और जंगली कार्ड का समर्थन करता है
    • पूर्व: पैटर्न: *। [ओए] .o या .a (वस्तु और संग्रह फ़ाइलों) में समाप्त भंडार में सभी फ़ाइलों को अनदेखा कर देगा
  • यदि किसी पैटर्न में स्लैश गिट के साथ समाप्त होने वाली निर्देशिका है, तो केवल इस निर्देशिका और पथ के नीचे से मेल खाएगी। इसमें मैच से नियमित फाइलें और प्रतीकात्मक लिंक शामिल नहीं हैं।
  • एक प्रमुख स्लैश उस पथ नाम की सभी फाइलों से मेल खाएगा।
    • पूर्व: पैटर्न /*.c फ़ाइल foo.c से मेल खाएगा लेकिन बार / awesome.c नहीं

gitignore(5) मैन पेज से ग्रेट उदाहरण:

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

आम तौर पर अनचाहे फ़ाइलों को अनदेखा करने के तीन अलग-अलग तरीके हैं।

1) भंडार के सभी उपयोगकर्ताओं के लिए अनदेखा करें:

अपनी कामकाजी प्रतिलिपि की जड़ में .gitignore नाम की एक फ़ाइल जोड़ें।

अपनी प्राथमिकताओं से मेल खाने के लिए .gitignore संपादित करें जिसके लिए फ़ाइलों को अनदेखा किया जाना चाहिए / चाहिए।

git add .gitignore 

और जब आप कर लेंगे तो प्रतिबद्ध करें।

2) केवल भंडार की अपनी प्रति के लिए अनदेखा करें:

अपने पसंदीदा पैटर्न के साथ फ़ाइल $ GIT_DIR / जानकारी / अपनी कार्यशील प्रति में बहिष्कृत / संपादित करें।

पूर्व: मेरी कामकाजी प्रति ~ / src / project1 है इसलिए मैं ~ / src / project1 / .git / info / includee संपादित करूंगा

हो गया!

3) सभी स्थितियों में, अपने सिस्टम पर अनदेखा करें:

आपके सिस्टम के लिए वैश्विक अनदेखा पैटर्न किसी भी फ़ाइल में जा सकते हैं जो आप चाहते हैं।

मेरा व्यक्तिगत रूप से ~ / .gitglobalignore कहा जाता है

मैं फिर निम्नलिखित फ़ाइल के साथ मेरी ~ / .gitconfig फ़ाइल को संपादित करके इस फ़ाइल को गिट को बता सकता हूं :

core.excludesfile = ~/.gitglobalignore

हो गया!

मुझे gitignore(5) मैन पेज अधिक जानकारी के लिए सबसे अच्छा संसाधन माना जाता है।


खैर, इस तथ्य के बावजूद कि आपने अन्य संसाधनों से "बस" लिंक नहीं किया है, यह बहुत मूर्खतापूर्ण है जब पहले से ही एक समुदाय उगाया जा रहा है (और बढ़ रहा है) संसाधन जो वास्तव में काफी अच्छा है: गिट कम्युनिटी बुक । गंभीरता से, एक प्रश्न में यह 20+ प्रश्न संक्षिप्त और सुसंगत लेकिन कुछ भी होने जा रहे हैं। गिट कम्युनिटी बुक एचटीएमएल और पीडीएफ दोनों के रूप में उपलब्ध है और स्पष्ट, अच्छी तरह से स्वरूपित और सहकर्मी समीक्षा किए गए उत्तरों के साथ आपके कई प्रश्नों का उत्तर देता है और एक प्रारूप में जो आपको सीधे आपकी समस्या पर कूदने की अनुमति देता है।

हां, अगर मेरी पोस्ट वास्तव में आपको परेशान करती है तो मैं इसे हटा दूंगा। बस केवल ऐसा कहो।


जीआईटी के साथ वर्कफ़्लो उदाहरण।

गिट बेहद लचीला है और किसी वर्कफ़्लो के लिए अच्छा अनुकूल है, लेकिन किसी विशेष वर्कफ़्लो को लागू करने के लिए यह समझने में कठिनाई हो सकती है कि आप रैखिक "बैकअप" वर्कफ़्लो से परे गिट के साथ क्या कर सकते हैं और उदाहरण के लिए कितनी उपयोगी ब्रांचिंग हो सकती है ।

यह ब्लॉग पोस्ट अच्छी तरह से एक बहुत ही सरल लेकिन प्रभावी वर्कफ़्लो बताता है जो गिट का उपयोग करके सेटअप करना वाकई आसान है।

ब्लॉग पोस्ट से उद्धरण: हम मूल / मास्टर को मुख्य शाखा मानते हैं जहां HEAD का स्रोत कोड हमेशा उत्पादन-तैयार राज्य को प्रतिबिंबित करता है:

वर्कफ़्लो एक ऐसा प्रोजेक्ट बनाने के लिए काफी लोकप्रिय हो गया है जो इस वर्कफ़्लो को लागू करता है: git-flow

एक साधारण वर्कफ़्लो का अच्छा चित्रण, जहां आप अपने सभी परिवर्तनों को विकसित करने में सक्षम करते हैं, और कोड को उत्पादन स्थिति में होने पर केवल मास्टर को धक्का देते हैं:

अब मान लीजिए कि आप एक नई सुविधा पर काम करना चाहते हैं, या मॉड्यूल को दोबारा करने पर काम करना चाहते हैं। आप एक नई शाखा बना सकते हैं, जिसे हम "फीचर" शाखा कह सकते हैं, कुछ ऐसा समय लगेगा और कुछ कोड तोड़ सकता है। एक बार आपकी सुविधा "पर्याप्त स्थिर" हो और उत्पादन के लिए इसे "करीब" ले जाना चाहती है, तो आप अपनी फीचर शाखा को विकसित करने में विलय करते हैं। जब मर्ज के बाद सभी बग को हल किया जाता है और आपका कोड सभी परीक्षणों को ठोस बनाता है, तो आप अपने परिवर्तन मास्टर में डाल देते हैं।

इस प्रक्रिया के दौरान, आपको एक भयानक सुरक्षा बग मिलती है, जिसे तुरंत ठीक किया जाना चाहिए। आपके पास हॉटफिक्सेस नामक एक शाखा हो सकती है, जो सामान्य "विकास" शाखा की तुलना में त्वरित रूप से उत्पादन में धक्का देकर परिवर्तन करता है।

यहां आपके पास एक विशेषता है कि यह फीचर / हॉटफिक्स / विकसित / उत्पादन वर्कफ़्लो कैसा दिख सकता है (ब्लॉग पोस्ट में अच्छी तरह से समझाया गया है, और मैं दोहराना चाहता हूं, ब्लॉग पोस्ट पूरी प्रक्रिया को बहुत अधिक विस्तार से बताता है और मेरे से बहुत बेहतर है ।


Git Magic is all you'll ever need. Guaranteed or your money back!


git status आपका मित्र है, इसे अक्सर इस्तेमाल करें। सवालों के जवाब देने के लिए अच्छा है:

  • वह आदेश क्या किया?
  • मैं किस शाखा पर हूं?
  • मैं क्या करने के बारे में क्या परिवर्तन कर रहा हूँ, और क्या मैं कुछ भूल गया है?
  • पिछली बार जब मैंने इस परियोजना (दिन, सप्ताह, या शायद महीने पहले) पर काम किया था, तो क्या मैं कुछ के बीच में था?

इसके विपरीत, svn status कहें, git status बड़ी परियोजनाओं पर भी तुरंत आगे बढ़ती है। गिट सीखने के दौरान अक्सर इसे आश्वस्त करना पड़ता था, यह सुनिश्चित करने के लिए कि मेरा मानसिक मॉडल क्या चल रहा था, सटीक था। अब मैं अपने आप को याद दिलाने के लिए इसका उपयोग करता हूं कि मैंने अपनी आखिरी प्रतिबद्धता के बाद क्या बदल दिया है।

जाहिर है, अगर आपका .gitignore संवेदनापूर्वक कॉन्फ़िगर किया गया है तो यह अधिक उपयोगी है।


A real good paper for understanding how Git works is The Git Parable . Very recommended!


I got started with the official Git tutorial . I think it's practical enough for beginners (I was, and still am, a beginner, by your definition! I barely grasp makefiles, I've only played a bit with Apache Subversion, etc.).


The Pro Git free book is definitely my favorite, especially for beginners.


Why yet another howto? There are really good ones on the net, like the git guide which is perfect to begin. It has good links including the git book to which one can contribute (hosted on git hub) and which is perfect for this collective task.

On , I would really prefer to see your favorite tricks !

Mine, which I discovered only lately, is git stash , explained here , which enables you to save your current job and go to another branch

EDIT: as the previous post, if you really prefer stackoverlow format with posts as a wiki I will delete this answer





version-control