मेरे पास git
के तहत एक प्रोजेक्ट है। एक दिन मैंने परियोजना के तहत सभी प्रोजेक्ट फ़ाइलों को वर्तमान निर्देशिका से foo/bar/
पर ले जाया। मैंने इसे git mv
का उपयोग किया। फिर मैंने कुछ और फाइलें जोड़े और पहले से ही मौजूदा फाइलों में कुछ बदलाव किए।मैं इतिहास को फिर से लिख सकता हूं ताकि सभी फ़ाइलों को छोड़कर, जो मैं पहले से ही स्थानांतरित कर चुका हूं, उपनिर्देशिका में हैं?
परिणामस्वरूप, अब जब मैं foo/bar/file.c
के इतिहास को देखता हूं, तो मैं केवल फाइलों को स्थानांतरित करने के बाद किए गए परिवर्तनों को देख सकता हूं।
मैंने इसे विभिन्न तरीकों से ठीक करने की कोशिश की (filter-branch
उपनिर्देशिका फ़िल्टर, आदि के साथ), लेकिन कुछ भी मदद नहीं की, इसलिए मैं यहां बहुत ढेर हूं। मैं किसी भी मदद की सराहना करूंगा जो आप मुझे दे सकते हैं। धन्यवाद!
@Alexander: आप बैश शेबांग लाइन के साथ एक वास्तविक स्क्रिप्ट में एक-लाइनर (एकल उद्धरण में सब कुछ) डालने का प्रयास करना चाह सकते हैं। मुझे लगता है कि 'फ़िल्टर-शाखा' शायद इसे 'sh' में चलाने की कोशिश कर रहा है, न कि 'bash'। – Cascabel
मैंने कुछ प्रगति की। ऐसा लगता है कि अगर कथन में डबल ब्रैकेट इस त्रुटि का कारण बन रहे थे। सिंगल ब्रैकेट बेहतर काम करते हैं, फिर भी यह काम नहीं करता है। समस्या यह है कि मैंने सबकुछ foo/bar/में स्थानांतरित करने से पहले/प्रोजेक्ट में कुछ सामग्री के साथ foo नाम की निर्देशिका थी। तो अब यह शिकायत करता है "'foo' को अपने आप की उपनिर्देशिका, 'foo/bar/foo' 'में स्थानांतरित नहीं किया जा सकता है। –
@Alexander: आपको तदनुसार स्क्रिप्ट को समायोजित करने की आवश्यकता होगी। कुछ ऐसा है: 'अगर [[! -e foo/bar]]; तो mkdir -p foo/bar; गिट एलएस-पेड़ - नाम केवल $ GIT_COMMIT | grep -v^foo $ | xargs- मैं फ़ाइलें एमवी फाइल foo/बार; fi' स्थानांतरित होने वाली फ़ाइलों की सूची से 'foo' को फ़िल्टर करने के लिए grep का उपयोग करता है। ध्यान दें कि मैं यह भी मान रहा हूं कि 'बार' उपनिर्देशिका तब तक अस्तित्व में नहीं थी जब तक कि आप इसके तहत सबकुछ नहीं ले जाते। यदि ऐसा नहीं है, तो आपको इसके लिए स्क्रिप्ट में भी खाते की आवश्यकता होगी। –