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


91

मैंने कुछ फ़ाइलों का उपयोग करके नाम बदला है git mv, उपयोग किया है git stash, HEAD पर एक त्वरित नज़र थी (इसे बदले बिना) फिर 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% 

(मैंने भी इसके बिना -M, -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 लाइनें बदल गई हैं)। मेरी समझ यह है कि गिट को इस मामले में फ़ाइल को ट्रैक करने में सक्षम होना चाहिए, क्योंकि यह स्पष्ट रूप से संग्रहीत करने के बजाय संचालन का नाम बदल देता है, और फाइलें समान हैं कि मेरा मानना ​​है कि उन्हें उसी पर विचार करना चाहिए।

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


अनुमान: यदि आप ~ / प्रोजेक्ट्स के बजाय ~ / प्रोजेक्ट्स / सिस्टम / रनटाइम / src के अंदर कमांड निष्पादित करते हैं तो क्या यह काम करता है?
डगलस

नहीं, मुझे वही परिणाम मिलता है। (आम तौर पर गिट आपको किसी भी फ़ोल्डर में रहने देने के बारे में बहुत अच्छा लगता है ...)

हालांकि मुझे एक विचार दिया गया था, और मैंने अपने निष्कर्षों के साथ प्रश्न को अद्यतन किया। टिप्पणी के लिए धन्यवाद!

मैं mswindows पर "1.7.3.1.msysgit.0" के साथ मिलकर "tortoiseGit 1.5.8.0" का उपयोग कर रहा हूं। जब मैं खोजकर्ता में एक फ़ाइल का नाम बदल कर रखता / करती हूं, तो मैं अपने gui "status = Rename" में देखती हूं। मुझे यह बताने के लिए पर्याप्त नहीं है कि यह कैसे कमांडलाइन में किया जाए कि "कैसे करें" का जवाब देने के लिए, लेकिन कछुआ ने मेरे लिए कुछ ऐसा किया जो आपकी उम्मीद के मुताबिक काम किया।
k3b

3
क्या यह एक धोखा है? stackoverflow.com/questions/2314652/…
क्रैगॉक्स

जवाबों:


118

कृपया git log --followअपनी फ़ाइल पर एक कोशिश करें। मैं यहां से सीखता हूं कि क्या फ़ाइलों को बदलने और उनके इतिहास को बनाए रखने के लिए नाम बदलना संभव है?


5
यदि आपको मिलता है fatal: ambiguous argument 'file.txt': unknown revision or path not in the working tree, तो git log --follow - file.txt
nealmcb

28

खैर, मैं अपने नाम के साथ देखते हैं git log -M --summary..


git log -M --summaryयदि आप सिर्फ किसी दिए गए फ़ाइल के इतिहास को देख रहे हैं, यानी फ़ाइल तर्क के साथ कोई भी नाम बदलने की जानकारी नहीं देते हैं।
vinc17 17

17

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

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

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

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


6
मुझे लगता है कि आपको वास्तव में डिलीट / ऐड करने के बजाय नाम बदलने के लिए -M विकल्प की जरूरत है
एड्रियन कोर्निश

1
बस एक ही समस्या थी और ध्यान दिया गया कि आपकी वर्किंग डायरेक्टरी में फर्क पड़ता है git log --follow .कि वर्किंग डाइरेक्टरी नई लोकेशन काम नहीं करती है, जबकि git log --follow path/to/new/dirपुरानी और नई लोकेशन की कॉमन पैरेंट डायरेक्टरी से
एक्जिक्यूट किया जाता है

1
--follow: पैरामीटर काम करता है, लेकिन आप क्या करने की जरूरतgit log --follow -- ./path/to/file
Drumm

मुझे सिर्फ वह समस्या मिली है जो git -log filename.csफ़ाइल मूवमेंट कमिट पर रुकती है (वर्तमान फ़ाइल के फ़ोल्डर में सेट है)। हालाँकि VS इतिहास विंडो पूरी फ़ाइल परिवर्तन लॉग दिखाता है। इसके अलावा, मैं देख सकता हूँ कि फ़ाइल को Github डेस्कटॉप के साथ स्थानांतरित कर दिया गया है। लेकिन git log -10 --follow filename.csमूव कमिट करने से पहले लॉग दिखाता है।
ओलेक्सा

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

मेरा मानना ​​है कि यह वही है जो आप खोज रहे हैं।


3
पांच साल से पहले के उत्तर में यह जानकारी है।
डॉटेंकहेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.