2010-10-08 10 views
19

मैं एक फ़ाइल से फ़ंक्शन लेना चाहता हूं और इसे दूसरे में रखना चाहता हूं, लेकिन दोष इतिहास को रखना चाहता हूं।फ़ाइल को विभाजित करते समय गिट इतिहास रखें

cp a.php b.php 

vim b.php 
# delete everything but 1 function 

vim a.php 
# delete the 1 function 

git add a.php b.php 
git commit 

लेकिन अगर मैं git blame b.php चलाने मैं केवल यह इस नए को दोष देने के लिए प्रतिबद्ध देखते हैं।

उत्तर

4

शायद यह पिछले तो सवाल जानकारीपूर्ण हो सकता है:

How does git track source code moved between files?

स्वीकार किए जाते हैं जवाब की व्याख्या करने के लिए: अनिवार्य रूप से, Git नहीं वास्तव में "स्टोर" कोड ले जाया करता है, जब स्थानांतरण कोड के लिए दोषों की तरह चीजें उत्पन्न करते हैं, तो प्रतिबद्धता से प्रतिबद्धता की पूरी स्थिति की जांच करके पूर्व पोस्ट वास्तव में किया जाता है।

+0

यह जवाब एक "नहीं" है, लेकिन वास्तव में यह एक है की तरह लगता है "कभी कभी।" डिलीट ऐसा लगता है कि गिट को अन्य फाइलों के जन्मदिन से परे इतिहास के लिए फ़ाइल देखने के लिए ट्रिगर करता है। एक समारोह को विभाजित करना, लेकिन ओपी के रूप में बाकी फाइल को रखने से काम नहीं हो सकता है। लेकिन मैं सिर्फ एक फ़ाइल को आधा में विभाजित करता हूं, मूल को हटा देता हूं और इसे दो नए नाम देता हूं, और दोष दोनों नई फाइलों में सही ढंग से असाइन किया जाता है। – Potatoswatter

+0

वूप्स, जो संपादन के बाद ही था। इसे करने के बाद स्पष्ट रूप से नई फाइलों में से एक के लिए दोष खो दिया। अभी भी शायद एक शायद? – Potatoswatter

5

कोशिश git blame -C -C b.php

+0

मैं चाहता हूं कि इतिहास वास्तव में पुराने कामों पर दोष दे। हम गिट-एसवीएन का उपयोग करते हैं ताकि अन्य svn पर होंगे। –

+0

बहुत बुरा। एसवीएन इसका समर्थन नहीं करता है, बिल्कुल! – Arafangion

+0

सुपर सहायक, टीएक्स .. अभी तक 'गीट लॉग'' के लिए समाधान ढूंढने का प्रबंधन नहीं किया है – ptim

13

दोष इतिहास बनाए रखने के लिए सामान्य नियम एक अलग कदम किसी भी संपादन से पहले पहली प्रतिबद्ध बनाना है। यह मेरा अनुभव रहा है कि -C विकल्प की आवश्यकता के बिना यह git blame को काम करने की अनुमति देता है।

  1. नए गंतव्यों की मूल डुप्लिकेट, नष्ट करने के लिए मूल
  2. से अतिरिक्त वर्गों निकालें सुनिश्चित करते हुए: तो नई फ़ाइलों में फ़ाइल को विभाजित करने के मामले में, यह दो प्रतिबद्ध में किया जा सकता डुप्लिकेट फ़ाइलें

प्रदान की उदाहरण में, यह होगा:

cp a.php b.php 
mv a.php c.php 
git add a.php b.php c.php 
git commit 
vim b.php # delete everything but 1 function 
vim c.php # delete the 1 function 
git add b.php c.php 
git commit 
+0

गैर-ग़लत फ़ाइल पर 'गिट एड' का व्यवहार गिट 1.9 के आसपास कभी-कभी बदल गया। हटाए गए फ़ाइलों को प्रतिबिंबित करने के लिए आपको या तो 'git rm' या' git add -A' की आवश्यकता है। –

+0

टिप्पणी @DamianYerrick के लिए धन्यवाद। मुझे विश्वास नहीं है कि अगर आप मंच पर सटीक फाइलें निर्दिष्ट करते हैं तो इसे किसी भी तरह से महत्व देना चाहिए। (परिवर्तन यह था कि, गिट 2.0 के रूप में, "गिट जोड़ें ' 'गिट ऐड-ए ' 'जैसा ही है जिसमें इसमें [रिलीज नोट्स] (https: //git. कर्नेल) के अनुसार निष्कासन शामिल हैं। org/cgit/Git/git.git/सादे/प्रलेखन/RelNotes/2.0.0.txt))। – vine77

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