मुझे पता है कि मैं svn diff -r a:b repo
दो निर्दिष्ट संशोधनों के बीच परिवर्तनों को देख सकता हूं । जो मैं चाहूंगा वह हर संशोधन के लिए एक फ़ाइल है जिसने फ़ाइल को बदल दिया है। क्या ऐसा आदेश उपलब्ध है?
मुझे पता है कि मैं svn diff -r a:b repo
दो निर्दिष्ट संशोधनों के बीच परिवर्तनों को देख सकता हूं । जो मैं चाहूंगा वह हर संशोधन के लिए एक फ़ाइल है जिसने फ़ाइल को बदल दिया है। क्या ऐसा आदेश उपलब्ध है?
जवाबों:
इसके लिए कोई अंतर्निहित कमांड नहीं है, इसलिए मैं आमतौर पर ऐसा कुछ करता हूं:
#!/bin/bash
# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {
# first revision as full text
echo
read r
svn log -r$r $url@HEAD
svn cat -r$r $url@HEAD
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
फिर, आप इसे कॉल कर सकते हैं:
history_of_file $1
svn: '.' is not a working copy svn: Syntax error in revision argument '@HEAD' svn: Syntax error in revision argument '@HEAD'
svn log --diff [path_to_file]
इस तरह से काम करता है! stackoverflow.com/a/24938573/3185510
जो आपने वर्णित किया है उससे थोड़ा अलग है, लेकिन मुझे लगता है कि यह वही हो सकता है जो आपको वास्तव में चाहिए:
svn blame filename
यह उस समय के लेखक द्वारा लिखी गई प्रत्येक पंक्ति के साथ फाइल को प्रिंट करेगा और इसे अंतिम रूप देने वाले लेखक का।
यदि आप कोड परिवर्तन के साथ फाइल का पूरा इतिहास देखना चाहते हैं:
svn log --diff [path_to_file] > log.txt
--diff
क्योंकि इसमें विकल्प के लिए परीक्षण हैं जबकि 1.7.3 में कोई नहीं है - subversion/tests/cmdline/log_tests.py
।
--limit <number>
विकल्प के साथ । जैसे:svn log --diff --limit 5 [path_to_file]
आप git-svn
रिपॉजिटरी को Git रिपॉजिटरी में आयात करने के लिए उपयोग कर सकते हैं , फिर उपयोग करें git log -p filename
। यह संबंधित अंतर के बाद फ़ाइल के लिए प्रत्येक लॉग प्रविष्टि दिखाता है।
git log X..Y -o filename
के साथ शुरू
svn log -q file | grep '^r' | cut -f1 -d' '
इससे आपको उन संशोधनों की सूची मिल जाएगी जहां फ़ाइल बदल गई थी, जिसे आप बाद में बार-बार कॉल करने के लिए स्क्रिप्ट का उपयोग कर सकते हैं svn diff
।
svn log -q some_file.xxx | grep ^r | awk '{print $1}' | sed -e 's/^r//' | xargs -i svn diff -rHEAD:{} some_file.xxx > ~/file_history.txt
अच्छा सा एक लाइनर (awk कट के समान ही करता है)
अजीब तरह से नामित "दोष" कमांड ऐसा करता है। यदि आप कछुआ का उपयोग करते हैं, तो यह आपको "पुनरीक्षण" संवाद से देता है, फिर एक फाइल सूची जिसमें रेखा के पास एक पंक्ति होती है और उसके बगल में लेखक होता है।
यदि आप संशोधन जानकारी पर राइट क्लिक करते हैं, तो आप एक "शो लॉग" डायलॉग ला सकते हैं, जो पूरी चेकइन की जानकारी देता है, साथ ही अन्य फाइलें जो चेकइन का हिस्सा थीं।
जहाँ तक मुझे पता है कि इसे पूरा करने के लिए svn कमांड में कोई निर्माण नहीं किया गया है। आपको सभी भिन्नताओं को बनाने के लिए कई कमांड चलाने के लिए एक स्क्रिप्ट लिखने की आवश्यकता होगी। एक सरल दृष्टिकोण एक GUI svn ग्राहक का उपयोग करना होगा यदि वह एक विकल्प है। उनमें से कई जैसे कि ग्रहण के लिए विध्वंसक प्लगइन एक फ़ाइल के इतिहास को सूचीबद्ध करेगा और साथ ही आपको प्रत्येक संशोधन के रूप को देखने की अनुमति देगा।
धन्यवाद, बेंडिन। मुझे आपका समाधान बहुत पसंद है।
मैंने इसे हाल के परिवर्तनों को दिखाते हुए रिवर्स ऑर्डर में काम करने के लिए बदल दिया। जो लंबे समय से स्थायी कोड के साथ महत्वपूर्ण है, कई वर्षों से बनाए रखा गया है। मैं आमतौर पर इसे अधिक में पाइप करता हूं।
svnhistory elements.py |more
मैंने -r को सॉर्ट में जोड़ा। मैंने कल्पना को हटा दिया। 'पहले रिकॉर्ड' के लिए हैंडलिंग। यह अंतिम प्रविष्टि पर त्रुटि करेगा, क्योंकि इसमें कोई अंतर नहीं है। हालांकि मैं इसके साथ रह रहा हूं क्योंकि मैं कभी भी उस स्थान से नीचे नहीं गया।
#!/bin/bash
# history_of_file
#
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
#
# Dlink
# Made to work in reverse order
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
history_of_file $1
मैंने इस विषय पर शोध करते हुए आंशिक उत्तरों का एक गुच्छा देखा है। मेरे लिए यही काम करता है और आशा करता हूं कि यह दूसरों की मदद करेगा। यह कमांड कमांड लाइन पर आउटपुट डिस्प्ले करेगा, रिविजन नंबर, ऑथर, रिविजन टाइमस्टैम्प और किए गए बदलावों को दिखाएगा:
svn blame -v <filename>
अपनी खोज को आसान बनाने के लिए, आप एक फ़ाइल में आउटपुट लिख सकते हैं और जिस चीज़ की तलाश कर रहे हैं उसके लिए grep कर सकते हैं।