2013-02-12 53 views
6

मैं एक विशिष्ट परियोजना के गिट के इतिहास को लगातार स्नैपशॉट में रखने की कोशिश कर रहा हूं। मैं एक स्नैपशॉट की सामग्री के साथ भंडार निर्देशिका को आबाद करने के लिए और फिरगिट के तहत फाइलें करते समय मैं नाम बदलें सीमा को कैसे नियंत्रित कर सकता हूं?

git add -A . 
git commit -m 'Version X' 

यह चलाकर यह कर रहा हूं विधि this answer में सिफारिश की है। हालांकि, मैं देखता हूं कि प्रतिबद्धता केवल फ़ाइल नामों को पहचानती है जब फ़ाइल सामग्री का 100% वही रहता है। क्या git commit का नाम बदलने के लिए कोई तरीका है, ताकि यह नाम बदल सके जहां फ़ाइल सामग्री थोड़ा बदल गई है? मुझे लगता है कि git merge और git diff में नाम बदलें नाम को नियंत्रित करने के लिए कई विकल्प हैं, लेकिन ये विकल्प git commit के लिए मौजूद नहीं हैं।

बातें मैं कोशिश की है:

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

    git merge -s recursive -Xtheirs -Xpatience -Xrename-threshold=20

    का उपयोग कर हालांकि master पर लगातार शाखाओं विलय, यह मुझे जगह में पुराने संस्करण की नाम बदली गई फाइलों के साथ छोड़ दिया है, नाम

+1

क्या इससे कोई फर्क पड़ता है? 'गिट प्रतिबद्ध' में ऐसा विकल्प सेट करना केवल उस आदेश 'यूआई को प्रभावित करेगा; गिट वास्तव में नामों को ट्रैक नहीं करता है। –

+0

मुझे नामों में काम करने के लिए 'git log --follow'' चाहिए। यह एक सादा अनुक्रम के साथ फ़ाइल के सबसे हाल के संस्करण पर बंद हो जाता है। –

उत्तर

10

git commit कभी भी नामों का पता नहीं लगाता है। यह सिर्फ भंडार को सामग्री लिखता है। नाम (और प्रतियां भी) को तथ्य के बाद ही पता चला है, यानी git diff, git merge और दोस्तों को चलाते समय। ऐसा इसलिए है क्योंकि git कोई नाम/प्रतिलिपि जानकारी संग्रहीत नहीं करता है।

+1

'गिट प्रतिबद्ध' का आउटपुट इंगित करता है कि कुछ फाइलों का नाम बदल दिया गया है या नहीं। मैंने देखा है कि जब यह आउटपुट एक नाम इंगित करता है तो मैं 'git log --follow' के साथ फ़ाइल के इतिहास का पालन कर सकता हूं। यही वह है जो मैं पूरा करना चाहता हूं। –

+1

लेकिन वह जानकारी * संग्रहीत नहीं है *, इसलिए यह 'गिट-प्रतिबद्ध' के लिए ऐसा विकल्प नहीं है। –

+1

मुझे इस तथ्य से छेड़छाड़ की गई कि नए स्थान में एक ही सामग्री के साथ एक प्रतिबद्धता 'गिट लॉग - फॉलो' द्वारा उपयोग की जाने वाली हेरिस्टिक्स में सुधार करने लगती है। –

9

टिप्पणियों और अन्य उत्तर में संकेत के अनुसार, प्रतिबद्धता में नाम बदलने की सीमा को समायोजित करने के लिए यह समझ में नहीं आता है, क्योंकि यह केवल कमांड के आउटपुट को बदल देगा, न कि वास्तव में प्रतिबद्धता में क्या संग्रहीत किया जाता है।

क्या आप कर सकते हैं, तो git log कमांड में नाम पहचान थ्रेसहोल्ड समायोजित करें। आप --find-renames पैरामीटर का उपयोग कर ऐसा करते हैं। यह ज्यादातर परिणाम प्राप्त करता है जिसे मैं प्राप्त करना चाहता था।

+0

गिट लॉग - ढूँढें-नाम सिर्फ मुझे प्रतिबद्ध लॉग दिखाता है। मुझे पता है कि मुझे कॉपी/नाम बदलें थ्रेसहोल्ड प्रतिशत बदलने की जरूरत है, लेकिन मैंने कोई प्रत्यक्ष वाक्यविन्यास उदाहरण नहीं देखा है।क्या आप थोड़ा और विशिष्ट हो सकते हैं? – anon58192932

+0

- फाइंड-नाम बदलते हैं थ्रेसहोल्ड। मुझे उन विकल्पों के बारे में पता नहीं है जो आपको अधिक नियंत्रण प्रदान करते हैं। –

+0

मुझे अपने सटीक मुद्दे के बारे में और जानकारी मिली। मैं एक दिन के दौरान अपने कोड में बदलावों का एक टन बना देता हूं। फाइल जोड़ना और हटाना जैसे चीजों को शामिल करना। मैं फिर वर्तमान परिवर्तनकर्ता में अपने सभी परिवर्तन जोड़ने के लिए गिट एड * .java चलाता हूं। और गिट गलत तरीके से मानता है कि कुछ फाइलें नाम हैं जो उनमें से कोई भी नहीं हैं। इसके आस-पास पहुंचने के लिए मुझे उन फाइलों को गिट करना होगा जिन्हें गलत रूप से एक विशेष परिवर्तनीय के नाम पर माना जाता है, उन्हें प्रतिबद्ध करें, और फिर अन्य सभी फ़ाइलों के साथ एक और प्रतिबद्ध करें। तो मैं खोज-नाम थ्रेसहोल्ड को बदलने की उम्मीद कर रहा था लेकिन इसे गिट एड कमांड – anon58192932

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

  • कोई संबंधित समस्या नहीं^_^