Your approach तुच्छ मतभेद (जैसे लाइन न खत्म होने वाली शैली, या/धब्बा फिल्टर साफ करने के लिए कारण मतभेद) फ़ाइल के स्थानीय और भंडार संस्करणों के बीच के मामले में काम करने के लिए विफल हो सकता है।
निम्न स्क्रिप्ट हैश पर निर्भर होने के बजाय git diff
के माध्यम से काम करती है। यह फ़ाइल नाम के बाद diff विकल्प स्वीकार करता है।
उपयोग के उदाहरण:
# list all commits that introduce the file README.md in its local state
list_introducing_commits README.md
# list all commits that introduce the file README.md in its local state
# ignoring any difference in whitespace
list_introducing_commits README.md -w
list_introducing_commits (एक बेहतर नाम नहीं पा सके):
#!/bin/bash
if [ $# -eq 0 ]
then
echo "Usage: $(basename $0) path/to/file [<diff-options>]"
exit 1
fi
file="$1"
shift 1
for rev in $(git log --pretty=%H -- "$file")
do
if git diff --exit-code [email protected] $rev -- $file &> /dev/null
then
echo $rev
fi
done
@ ब्रिस का कारण यह है कि मैं पूछता हूं कि (गिट के साथ) मुझे हमेशा संदेह है कि "git ls-tree --do-something-magical जैसा कुछ आदेश है जो मैं चाहता हूं। जैसा कि मैंने पाया" गिट हैश- ऑब्जेक्ट "पाइथन में एक आसान गिट शा -1 कैलकुलेटर लिखने के कुछ मिनट बाद! – Xevious
एक उदाहरण तब होगा जब कोई पोस्ट मॉर्टम या निदान के लिए दिए जाने तक समर्थन स्तर तक कॉन्फ़िगरेशन फ़ाइल (हार्डवेयर से पुनर्प्राप्त) भेजता है। क्या प्रतिबद्धता या रिलीज यह आया था? रास्ते के दिनों में, हमने इस उद्देश्य के लिए आरसीएस (और अंततः सीवीएस) कीवर्ड विस्तार का उपयोग किया। मुझे पूरा यकीन है कि हम नकली कीवर्ड विस्तार जोड़ने के लिए प्रतिबद्धता और चेकआउट हुक का उपयोग कर सकते हैं, लेकिन यह इतनी कड़वाहट है कि मैं यह भी उल्लेख करने के लिए थोड़ा शर्मिंदा है। – Xevious
लिंक बताता है, और यह आपकी दूसरी टिप्पणी से स्पष्ट है, कि आप एक ऐसी फाइल के बारे में बात कर रहे हैं जो आपके काम करने वाले पेड़ का हिस्सा नहीं है - लेकिन वें ई सवाल स्वयं यह नहीं कहता है। ऐसा लगता है कि आप सिर्फ 'गिट लॉग -1 - $ फाइलनाम' (संभवतः "संबंधित" के अर्थ पर कुछ भ्रम के साथ पूछ रहे हैं)। क्या आप इसे थोड़ा सा कर सकते हैं? – trentcl