2013-07-17 4 views
10

मैं अलग-अलग फ़ाइलों में कार्यों और कक्षाओं की घोषणा करने के लिए एक एकल फ़ाइल PHP स्क्रिप्ट को दोबारा कर रहा हूं। एक फ़ाइल से दूसरे फ़ाइल में कोड के ब्लॉक को कैसे स्थानांतरित करता है फिर भी प्रत्येक व्यक्तिगत रेखा के लिए गिट इतिहास को संरक्षित करता है? मुझे कोड पर कम से कम git blame पर उपयोग करने की क्षमता चाहिए। पुराने संस्करणों की तुलना में भी सहायक होगा।फ़ंक्शन घोषणा को किसी अन्य फ़ाइल में कैसे स्थानांतरित करें अभी तक गिट इतिहास बनाए रखें?

ध्यान दें कि मुझे 'वर्कअराउंड' समाधानों में दिलचस्पी नहीं है, जिसके लिए कोड को 'पुराने' इतिहास देखने के लिए अतिरिक्त आदेश या झंडे (जैसे --follow) की आवश्यकता होगी, जिसके लिए इतिहास देखने वाले व्यक्ति को यह जानना होगा फाइल को विशेष उपचार की जरूरत है। मैं एक ऐसे समाधान की तलाश में हूं जो आवश्यक मेटाडेटा लिखता है जैसे blame, log, diff, और ऐसे 'बस काम' को अतिरिक्त झंडे या तर्क प्रस्तुत किए बिना सामान्य गिट कमांड लिखते हैं।

मैंने पढ़ लिया है काफी fewpostssimilar problems के समाधान की तलाश में, लेकिन कोई भी उस व्यक्ति के तर्ज पर git blame के मुद्दे का समाधान। एक समाधान जो मुझे लगता है कि काम करेगा copy the file and its entire history होगा, फिर उस से काम करें। हालांकि, यह प्रश्न संतोषजनक उत्तर के बिना बनी हुई है।

+1

ध्यान दें कि 'गिट दोष' पहले से ही फाइलों में कोड की रेखाओं को ट्रैक करता है, लेकिन जब तक कि फाइलों का नाम बदल नहीं जाता है, तब भी आपको गिट को चाल/प्रतिलिपि करने के लिए अतिरिक्त विकल्प पास करना होगा, शायद यह एक महंगा ऑपरेशन है। –

+0

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

+1

क्या आपने यह देखने के लिए ['git blame' दस्तावेज़ीकरण] (https://www.kernel.org/pub/software/scm/git/docs/git-blame.html) पढ़ा है कि यह पहले से ही करता है जो आप देख रहे हैं के लिये? विशेष रूप से –

उत्तर

5

चेतावनी: यह मानता है कि rewriting history स्वीकार्य है। इसका उपयोग तब तक न करें जब तक आप पुनर्लेखन इतिहास के प्रभावों को नहीं जानते। जबकि इतिहास उपयोग git filter-branch बनाए रखने

एकाधिक फ़ाइलों में एक फ़ाइल विभाजित करने के लिए:

git filter-branch --tree-filter 'if [ -f original.php ]; then 
    echo part1.php part2.php part3.php | xargs -n 1 cp original.php; fi' HEAD 

तब लाइनों है कि आप प्रत्येक फ़ाइल से नहीं करना चाहते हैं (केवल वांछित कार्य करता है और कक्षाएं छोड़कर) हटा सकते हैं और परिणाम के लिए प्रतिबद्ध !

+0

धन्यवाद, यह एक अच्छा जवाब है! – dotancohen

+1

ध्यान दें कि लिंक किया गया दस्तावेज़ गिट उपयोगकर्ता मैनुअल है, मुझे अभी तक इसके बारे में पता नहीं था (मुझे लगता है कि इसमें कम खोज रैंकिंग या कुछ है) लेकिन यह बहुत विस्तृत है और ऐसा लगता है कि यह वास्तव में उपयोगी होगा। मैं "धन्यवाद!" से बचने की कोशिश करता हूँ टिप्पणियां लेकिन मैं वास्तव में जोर देना चाहूंगा कि लिंक कितना महत्वपूर्ण है। मैंने गिट में एक पूरी डर्न बुक खरीदी और उस पृष्ठ में अभी भी कुछ जानकारी है कि पुस्तक नहीं है। – jrh

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