2009-10-20 12 views
11

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

गलती से गैर-स्पष्ट तरीकों से गिट रिपॉजिटरीज़ को पेंच करने के लिए अन्य लोगों ने क्या किया है, और आपने इसे कैसे हल किया?

+0

यह http://stackoverflow.com/questions/1491766/what-are-common-antipatterns-of-using-git का एक डुप्लिकेट है और उत्तरों को विलय किया जाना चाहिए। – innaM

+0

ए "गॉचा" वास्तव में "एंटी-पैटर्न" जैसी चीज नहीं है। मैंने भंडार विनाश के बारे में पूछा, उसने सबसे बुरी प्रथाओं के बारे में पूछा। –

उत्तर

14

सामान्य स्लैश जब adding a submodule:

जब आप Git एक submodule पर जोड़ने का उपयोग करें, सुनिश्चित करें कि आप एक पीछा स्लेश नहीं है बनाते हैं।

> git add local/path 
    -- adds the submodule 

> git add local/path/ 
    -- adds all the files in the submodule directly into your repository, big no-no 
11

यह गॉचा नहीं है, यह गीट चा है।

+21

लॉल +1 मजाकिया -1 टिप्पणी होनी चाहिए –

1

एक Git भंडार के साथ मेरी सबसे शर्मनाक क्षणों में से एक है, हालांकि इसके बारे में sed और जानें:

मैं एक बार मेरी भंडार की उप-निर्देशिका के एक find ... -exec sed -i ... आपरेशन कर रहा था। मैंने इसे पहले -i के बिना परीक्षण किया था, विचलित हो गया, वापस आ गया और इसे चलाने से पहले मेरे रेपो में शीर्ष निर्देशिका में स्विच करने में कामयाब रहा। अब, गिट की महत्वपूर्ण फाइलें केवल पढ़ने के लिए हैं, लेकिन sed -i डिफ़ॉल्ट रूप से फ़ाइल को नामकरण से दूर ले जाती है, फिर मूल पर वापस लिखती है, इसलिए यह केवल पढ़ने-योग्य फ़ाइल पर गिट की ऑब्जेक्ट्स पर ठीक काम करती है। प्रतिस्थापन उलटा नहीं था, और मुझे रिमोट के रूप में ट्रैक करने वाले किसी व्यक्ति से क्लोनिंग और लाने से भंडार पुनर्प्राप्त करना पड़ा।

मैंने कभी भी एक पल के लिए सोचा नहीं था कि sed केवल पढ़ने-योग्य फ़ाइलों पर काम करेगा। कहानी का नैतिक: sed -i -c का उपयोग करें, जो फ़ाइल की प्रतिलिपि बनाता है, फिर मूल को ओवरराइट करने का प्रयास करता है।

7

मेरे git config user.name को महसूस किए बिना सार्वजनिक भंडार में प्रकाशित करना गलत था।
इसका मतलब है कि सार्वजनिक रेपो को अब एक नाम (और एक ईमेल) मिलता है जिसे मैं बिल्कुल प्रकाशित नहीं करता था। यदि वह रेपो दोहराया गया है, ... यह बहुत देर हो चुकी है।

यही वजह है कि मैं कर रहा पसंद करते हैं मेरे user.name मेरी Git शीघ्र खोल में दिखाया गया है, तब यह होने का अर्थ:

MY_HOSTNAME /c/Prog/myGitProject (master)$ 

मैं इस देखें:

MY_HOSTNAME /c/Prog/myGitProject (master) VonC $ 

मैं जानता हूँ कि मैं कौन हूँ इस गिट बैश सत्र में मैंने पहले कमांड से टाइप किया है!

+0

एक वैश्विक उपयोगकर्ता नाम सेट करना जो आप ठीक से हैं उससे बचने के लिए। – Kzqai

+0

@Tchalvak: हाँ, लेकिन आपके पास कई स्थानीय प्रतिनिधि हैं, प्रत्येक को अपने संबंधित अपस्ट्रीम (रिमोट) रिपोज़ को धक्का देने के लिए * अलग * नाम की आवश्यकता है ... एक वैश्विक चर पर्याप्त नहीं है। – VonC

+0

निश्चित रूप से, लेकिन यह एक डिफ़ॉल्ट नाम/ईमेल सेट करने का विषय बन जाता है जिसे आपको सार्वजनिक करने में कोई समस्या नहीं है, और केवल विशिष्ट मामलों में अधिक संवेदनशील लोगों का उपयोग करना। * shrugs * – Kzqai

2

काम काम काम ...

git commit 

काम काम काम ...

git commit 

हम्म ...

git rebase -i origin/master 

एकीकृत करने का समय क्या है? संघर्ष? फिर

git reset --hard origin/master 

रो रोना रोना शुरू करते हैं ...


Git आप पश्चाताप के बिना अपने स्थानीय इतिहास मिटा देता है। सबसे बड़ा गोचाचा है कि आप सुरक्षा नेट हैं।

+7

ठीक है, फिर 'गिट रीफ्लॉग' के लिए हुरेय। :) – Bombe

+0

क्या 'गिट रीफ्लॉग' मुझे गिराए गए कामों को देखने की अनुमति देता है? यह केवल गतिविधि सूचीबद्ध करता है और मैंने 'रीसेट - हार्ड' बनाया है (उत्तर अपडेट किया गया है, यह गलत था)। –

+0

'गिट रीसेट - हार्ड' उन प्रमुख तरीकों में से एक है जो वास्तव में पैर में खुद को शूट कर सकते हैं। इस प्रकार, मैंने इसका कभी भी उपयोग नहीं किया। मैं सिर्फ 'गिट रीसेट' ~ 1' और फिर 'गिट चेकआउट' व्यक्तिगत फाइलों को आवश्यकतानुसार रीसेट करता हूं। – Kzqai

5
  1. केवल साकार आप .gitignore में forgotten an entry है एक बार आप शाखाओं में से एक लोड में फैले मैचों मिल गया है।

  2. कि Git ऐड भूलकर क्या वहां नहीं है नहीं जोड़ता है ...

     
    git add . 
    git commit 
    git status 
    //hey! why didn't it commit my deletes?, Oh yeah, silly me 
    git add -u 
    git commit --amend 
    

  3. आप एक git branch list करते हैं, तो आप एक नई शाखा list कहा जाता हो, लेकिन यदि आप एक git stash करते हैं, आप अपने कार्यक्षेत्र रखे हो ; गुप्त कोष के लिए, आप जरूरतlist यदि आप सूची चाहते हैं ...

अधिक जल्द ही, शायद ...

+2

स्पष्ट रूप से गिट ऐड-ए है जो – Benjol

+0

दोनों करता है लेकिन आपका क्या मतलब है "क्या नहीं है"? –

3
  1. काम काम काम
  2. छिपाने की जगह में परिवर्तन
  3. नवीनतम लायें
  4. रीबेस
  5. संघर्ष प्राप्त करें, उन्हें ठीक करें
  6. "Git --continue rebase" करने के लिए भूल जाओ
  7. पॉप गुप्त कोष
  8. एहसास मैं "Git --continue rebase" भूल गया
  9. Git --abort rebase
  10. परिवर्तन मैं मूल रूप से रखे - pfffft, चला गया । काम

    git branch new-branch 
    

    कार्य, प्रतिबद्ध, ... एहसास मेरे सारे काम, गुरु पर है नई शाखा पर नहीं:

+0

ओह, यह भयानक है। –

+6

नहीं, यह मामूली परेशानी है। आपका स्टैश अभी भी आपके भंडार में है, आपको बस इसे ढूंढना है। यदि आप अभी भी अपने कंसोल सत्र में हैश प्रदर्शित करते हैं, तो आप वहां जाते हैं! यदि नहीं, तो इसका पता लगाने के लिए 'git fsck' का उपयोग करें। अधिक जानकारी के लिए यह SO उत्तर देखें: http://stackoverflow.com/questions/89332/recover-dropped-stash-in-git –

0

एक नई शाखा बनाएँ।

मैं करना चाहिए था:

git checkout -b new-branch 

की तरह कुछ मैं क्यों नहीं कर सकते हैं: बनाने के लिए विकल्प के साथ

git branch -c new-branch 

(चेकआउट के लिए ग) कि डिफ़ॉल्ट व्यवहार ???

0

कार्य कार्य का काम। एक परिवर्तन स्टेजिंग शुरू करें। ध्यान दें कि आप सबकुछ नहीं चाहते हैं। आंशिक प्रतिबद्धता सावधानीपूर्वक चरणबद्ध करें।

आखिरकार यह तय करें कि यह वर्तमान शाखा के लिए तैयार नहीं है। मैं चरणबद्ध परिवर्तनों को एक नई अस्थायी शाखा में प्रतिबद्ध करना चाहता हूं। अवधारणात्मक रूप से इतनी छोटी लगती है, है ना?

Google यह कैसे करें इसके लिए Google। शीर्ष उत्तर stash, checkout -b newbranch, stash pop कहता है। यह आश्चर्यजनक रूप से करें, सोच रहा है कि एक आसान तरीका क्यों नहीं है।

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

+0

कार्य कार्य का काम। 'गिट स्टेटस', 'गिट डिफ' और 'गिट एड' के एकाधिक पुनरावृत्तियों पर एक दर्दनाक सावधानीपूर्वक आंशिक प्रतिबद्धता का मंचन करें। तय करें कि आप कर चुके हैं, 'गिट प्रतिबद्ध-ए'। वुवाहा :( – damian

संबंधित मुद्दे