'SVN लॉग' का लॉग दिखाता धन्यवाद,
जाकारी।
जैसा कि आप जानते हैं, svn लॉग का आउटपुट फ़ाइलों के बजाए लॉग संदेश संदेशों द्वारा व्यवस्थित किया जाता है। यदि आप वर्बोज़ मोड (-v) का उपयोग करते हैं, तो यह प्रत्येक लॉग एंट्री से जुड़े फाइल ("पथ") दिखाएगा। हालांकि उन रास्तों में से कुछ का अनुरोध लक्ष्य के बाहर (: अपने वर्तमान निर्देशिका डिफ़ॉल्ट) हो सकता है। क्या आप चाहते हैं कि परिणाम उन बाहरी पथों को भी शामिल करें? मैं अंकित मूल्य पर अपने प्रश्न लेने लगता है, तो आप सिर्फ छानने के लिए पूछ रहे हैं, तो हाँ आप उन बाहरी रास्तों चाहेगा अगर वे फ़ाइलों के लिए एक सामग्री परिवर्तन का प्रतिनिधित्व करते हैं।
यहाँ एक समाधान है। यह धीमी हो सकती है, लेकिन मैं इसे परीक्षण किया है और यह विंडोज 7 पर cygwin में काम करता है (याद रखें,! यदि आवश्यक हो तो सुनिश्चित करें कि आपके स्क्रिप्ट Unixy लाइन अंत कर dos2unix के साथ)
यह वास्तव में केवल एक ही लंबी लाइन है, एक बाहरी sed स्क्रिप्ट (जो एक वास्तविक हैकर कमांड लाइन पर डाल सकता है लेकिन जीवन छोटा है कमांड लाइन से बचने के साथ खिलवाड़ करने के लिए) को छोड़कर: यहाँ
#!/bin/sh
# These paths are set up for cygwin
SED=/bin/sed
SORT=/bin/sort
UNIQ=/bin/uniq
XARGS=/bin/xargs
GREP=/bin/grep
SVN=svn
# Add desired log options here
LOG_OPTIONS=-v
SINCE_REV=10800
SED_SCRIPT=/cygdrive/c/temp/get-paths.sed
# Make sure you edit the sed script referenced above
# to set the base URL of your repository.
# 1) generate the list of log messages, including affected paths (svn log -v)
# 2) process out those paths (sed)
# 3) eliminate duplicates (sort | uniq)
# 4) get the change history for each of those paths (svn diff)
# 5) filter out the ones that involve only property changes (sed)
# 6) eliminate duplicates again (sort | uniq)
$SVN log $LOG_OPTIONS | $SED -n -f $SED_SCRIPT | $SORT | $UNIQ \
| $XARGS -n20 -I PATHS $SVN diff -r $SINCE_REV --summarize PATHS 2> error.log \
| $SED -n 's/^[^ ].... *//p' | $SORT | $UNIQ
बाहरी sed स्क्रिप्ट है। अपने भंडार के लिए सही आधार URL पर svn भंडार आधार URL को बदलना सुनिश्चित करें। अर्थात। svn URL का प्रारंभिक भाग जो svn log -v द्वारा आउटपुट नहीं है।
# sed script to output all lines between
# /^Changed paths:$/ and /^$/, exclusive.
# Also removes first 5 columns (status) and replaces them with svn repository base url.
/^Changed paths:$/,/^$/ {
/^Changed paths:$/b
/^$/b
s|^.....|https://svn.myrepo.org/prefix|
s/ (from .*)$//
p
}
स्क्रिप्ट उत्पादन कुछ त्रुटि संदेश error.log, मुख्य रूप से "पथ नहीं मिला" होगा, जो मेरा मानना है कि फ़ाइलों को भंडार में मौजूद हुआ करता था लेकिन स्थानांतरित कर दिया गया है (नाम बदला) या हटाई के लिए है।
क्या यह आपकी आवश्यकताओं को पूरा करता है?
this page पर माइकल ऑगस्टिन को क्रेडिट-केवल परिवर्तनों को हटाने के लिए svn diff के आउटपुट को grepping के बारे में विचारों के लिए क्रेडिट।
पीएस This other page एक ही प्रश्न पूछने लगता है, लेकिन वहां कोई पूरा जवाब नहीं है।
पी.पी.एस. पाइपलाइन के अंत में एक अतिरिक्त | sort | uniq
जोड़ने के लिए उपर्युक्त बैश स्क्रिप्ट संपादित करें, क्योंकि मैंने वहां डुप्लीकेट्स को बाहर देखा है। हालांकि मुझे नहीं लगता कि वे क्यों होंगे।
संभावित डुप्लिकेट [क्या एसवीएन डीआईएफएफ कमांड के लिए मेटाडाटा बहिष्करण फ़िल्टर है?] (Http://stackoverflow.com/questions/402522/is-there-a-metadata-exclusion-filter-for-the-svn -डिफ-कमांड) –
@Pekka मुझे कोई समाधान नहीं मिला जो यहां लागू है। समस्याएं समान हो सकती हैं, लेकिन डुप्लीकेट नहीं हैं। –
@zr मुझे खेद है। मैंने दूसरे प्रश्न के भिन्न पहलू को नजरअंदाज कर दिया। हालांकि, क्या सरल जीआरपी निर्माण सही दिशा में नहीं जाता है? –