2011-03-29 9 views
7

मैं अपने खाली गिट रिपॉजिटरीज़ को "रिक्त" प्रारंभिक प्रतिबद्धता से बस खाली करने के लिए एक खाली .gitignore फ़ाइल को स्पर्श करके और इसे करने के लिए शुरू करना चाहता हूं। मेरे कारण लगभग this question में समान हैं। Baiscally, पहली प्रतिबद्धता ("पूंछ") कोई माता पिता प्रतिबद्ध नहीं है, तो विभिन्न अजीब और अप्रत्याशित चीजें होती हैं जो अन्य कामों के साथ नहीं होती हैं।गिट इनिट के बाद स्वचालित रूप से खाली .gitignore फ़ाइल को प्रतिबद्ध करें?

तो वहाँ एक के बाद init हुक है कि मैं touch .gitignore && git commit .gitignore -m "Initial commit" के साथ हर Git init पालन करने के लिए उपयोग कर सकते हैं की तरह कुछ है? या मुझे अपना खुद का कस्टम इनिट कमांड लिखना चाहिए जो ऐसा करता है?

उत्तर

13

आप एक रेपो में प्रतिबद्ध चाहते हैं, git init उपयोग न करें - यह खाली रेपोस बनाता है! इसके बजाय git clone का उपयोग करें। बस अपने खाली गिटिनोरोर की प्रतिबद्धता के साथ एक संग्रह बनाएं, और क्लोन करें कि जब भी आप यह विशेष छद्म-खाली भंडार चाहते हैं। (आप अगर आप इसे उपलब्ध कहीं भी चाहते GitHub पर सार्वजनिक रूप से होस्ट कर सकते हैं।)

वैकल्पिक रूप से, अपने स्थानीय मशीन पर, आप क्या चाहते हैं के लिए एक Git उर्फ ​​बनाना:

[alias] 
    myinit = !git init && touch .gitignore && git add .gitignore && git commit -m "empty gitignore" 

ध्यान दें कि आप नहीं कर सकते अंतर्निहित कमांड के समान नाम वाले उपनाम।

+0

मैं उपसर्ग चाहिए 'Git स्थिति के साथ कि और>/dev/बातिल ||' या कुछ और, ताकि 'myinit' आदेश नो-सेशन अगर एक Git रेपो पहले से ही मौजूदा निर्देशिका में मौजूद होगा? –

+0

@Ryan: - recopies टेम्पलेट (विशेष रूप से, '* .sample' हुक) एक मौजूदा रेपो में Git init'' और (निर्देशिका संरचना बनाता है तुम ऐसा ही कुछ अगर आप चाहते हैं कर सकते हैं, लेकिन ऐसा नहीं ज्यादा बात करता है जो प्रभावी रूप से नो-ऑप होगा)। यदि आप इसे उपसर्ग करते हैं, तो 'गिट स्टेटस' वह नहीं है जो आप चाहते हैं - अन्य चीजों के साथ, यह धीमा है। मैं 'गिट rev-parse HEAD और>/dev/null' की अनुशंसा करता हूं। यह केवल एक रेपो के भीतर सफल होगा जहां 'हेड' एक प्रतिबद्धता को इंगित करता है - यानी यदि आप पहले से ही 'गिट इनिट' चला चुके हैं तो यह असफल हो जाएगा, जिससे आपके बाकी कदम उठेंगे। – Cascabel

+0

ऊह, आप पोस्ट कर सकते हैं कि [यहां] (http://stackoverflow.com/questions/5491832/how-can-i-check-whether-a-git-repository-has-any-commits-in-it) तो मैं इसे उत्तर के रूप में स्वीकार कर सकता हूं? –

3

जब आप git init करते हैं, तो .git निर्देशिका (जिसमें हुक शामिल हैं) को डिफ़ॉल्ट मानों में प्रारंभ किया जाता है। इसलिए git init के बाद कोई हुक मौजूद नहीं है। एक काल्पनिक "पोस्ट-इनिट" हुक बेकार होगा क्योंकि यह केवल एक ही समय पर चल सकता है, जहां हुक निर्देशिका शुरू की जाती है (और इसमें कोई सक्रिय हुक नहीं होता है)।

ऐसा लगता है कि आपको लगता है कि यह करता है, के बाद से एक हुक उचित समाधान नहीं है एक कस्टम आदेश लेखन से बेहतर हो सकता है।

+0

हाँ, मैं लगा कि क्या Git के रूप में हुक इस दृष्टिकोण सही तरीके से नहीं थे संदर्भित करता है। यही कारण है कि मैंने कुछ हुक * जैसे * हुक - मुझे बस 'गिट इनिट' चलाने के बाद कस्टम व्यवहार को ट्रिगर करने का कोई मतलब था। –

3

यह बहुत नहीं है, लेकिन यह काम करेंगे। जब भी आप एक रेपो को निष्क्रिय करना चाहते हैं, तो निम्न दो आदेश चलाएं।

git init 
touch .gitignore 

तो यकीन है कि Git अपने gitignore फ़ाइल रन ट्रैक कर रहा है बनाने के लिए:

git add .gitignore 
git commit .gitignore -m "Adding .gitignore" 

कैसे आप अपने रेपो की स्थापना के आधार पर आप वैसे भी दूसरे दो आदेशों कर हो सकता है।

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