git गिट लॉग एक स्थानांतरित फ़ाइल के लिए इतिहास क्यों नहीं दिखा सकता है, और मैं इसके बारे में क्या कर सकता हूं?




history dvcs (4)

खैर, मुझे git log -M --summary साथ मेरे नाम git log -M --summary ..

मैंने git mv का उपयोग करके दो फाइलों का नाम बदल दिया है, git stash इस्तेमाल किया है, हेड पर एक त्वरित रूप से देखा गया है (इसे बदलने के बिना) फिर git stash pop को फिर से पूरी तरह से वापस पाने के लिए किया। मेरी चाल प्रतिबद्ध सूची से गायब हो गई थी, इसलिए मैंने उन्हें git rm साथ छीन लिया और प्रतिबद्ध संदेश का दावा किया कि गिट ने नाम बदल दिया था नाम बदलना था। तो मैंने सोचा नहीं।

लेकिन अब, पोस्ट-प्रतिबद्ध, मैं स्थानांतरित फ़ाइलों के इतिहास में नहीं मिल सकता! प्रश्न में प्रतिबद्धता के बारे में क्या गिट कहता है:

~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.h
 delete mode 100644 test/R_DebugUI_iOS.m
 create mode 100644 system/runtime/src/R_DebugUI_iOS.h
 create mode 100644 system/runtime/src/R_DebugUI_iOS.m

 <<snip older commits>>
 ~/projects%

अब मैं इन चालित फ़ाइलों में से एक का इतिहास प्राप्त करने की कोशिश कर रहा हूं, इसलिए मैं एक पुराने संस्करण को देख सकता हूं, लेकिन मुझे कुछ भी उपयोगी नहीं मिला है:

~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime
~/projects/system/runtime/src% 

(मैंने बिना --find-copies-harder , -C और - --find-copies-harder , लेकिन इसका कोई फायदा नहीं हुआ है।)

मैं अपने इतिहास को अपने पुराने नाम के तहत प्राप्त कर सकता हूं, जो उस बिंदु पर रुक जाता है जब इसे अपने पुराने स्थान से हटा दिया गया था:

~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.m

commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date:   Tue Dec 7 23:52:51 2010 +0000

    Can set debug UI's alpha.

<<snip older commits>>
~/projects%

तो मैं इस बार पूरी तरह से अटक नहीं गया हूं, लेकिन मैं हर समय इस तरह की चीज करने की कल्पना नहीं करता। (मुझे उम्मीद है कि फाइलों की एक उचित संख्या है जो कम से कम एक बार अपने जीवन में चलेगी।)

क्या मुझसे कुछ गलत हो रही है? फ़ाइल की पुरानी प्रति और नई प्रति 98.8% समान है (166 में से 2 लाइनें बदली गई हैं)। मेरी समझ यह है कि गिट इस मामले में फ़ाइल को ट्रैक करने में सक्षम होना चाहिए, क्योंकि यह स्पष्ट रूप से उन्हें संग्रहीत करने के बजाए संचालन का नाम बदलता है, और फाइलें इतनी ही समान हैं कि मेरा मानना ​​है कि उन्हें उन पर विचार करना चाहिए।

इसे ठीक करने के लिए क्या ऐसा कुछ है, जो मेरे लिए करना संभव है?


अपने स्वयं के प्रश्न का उत्तर देते हुए, क्योंकि मैंने अपनी चिंताओं को समझने में कामयाब रहा है, भले ही मैंने अपनी समस्या का समाधान नहीं किया हो। ( git log --follow अभी भी मेरे लिए काम नहीं करता है, हालांकि।)

सबसे पहले, नामकरण प्रतिबद्धता के लिए --summary लॉग में फ़ाइल के पुराने नाम के साथ delete लाइन शामिल है। तो यदि यह स्पॉट करना आसान है, तो आप वहां से अपना पुराना नाम और git log पा सकते हैं।

यदि यह कुछ बड़ी प्रतिबद्धताओं का हिस्सा है, और इसलिए स्पॉट करने के लिए थोड़ा कठिन है - और यह स्थिति मेरी चिंताओं में से एक थी - git blame -C को फ़ाइल के नए नाम के साथ पहले पोस्ट-नाम संशोधन में उपयोग किया जा सकता है। संभवतः मूल फ़ाइल से लाइनें रहती हैं! - इसलिए गिट को अपना स्रोत ढूंढना चाहिए, और पुराना फ़ाइल नाम दिखाना चाहिए (और अच्छे उपाय के लिए एक प्रतिबद्ध हैश)। फिर आप git log साथ निशान उठा सकते हैं।

इसलिए, यदि आपको फ़ाइल के इतिहास में एक इकाई के रूप में कुछ रुचि है (किसी भी कारण से) तो ऐसा लगता है कि इसे अपेक्षाकृत सरलता से किया जा सकता है। हालांकि मुझे लगता है कि इंप्रेशन गिट पसंद करेगा कि आपने इसे सही तरीके से इस्तेमाल किया है।



git log --follow ./path/to/file

मुझे विश्वास है कि यह वही है जो आप खोज रहे हैं।





git-log