2008-12-31 11 views
22

मैं स्रोत नियंत्रण प्रणाली के रूप में एसवीएन का उपयोग करता हूं, और मुझे आश्चर्य है कि मेटाडेटा मतभेदों को अनदेखा करते समय निर्देशिकाओं की तुलना कैसे करें। क्या वास्तविक सामग्री की तुलना करने और किसी मेटाडेटा को अनदेखा करने के लिए svn diff बताने का कोई तरीका है?क्या एसवीएन डीआईएफएफ कमांड के लिए मेटाडाटा बहिष्करण फ़िल्टर है?

मेरा मतलब है मेटाडेटा जैसे एसवीएन गुण, आदि जो फ़ाइल सामग्री को प्रभावित नहीं करते हैं। मान लें कि फ़ाइल एक्स में ट्रंक टी की तुलना में शाखा बी में एक अतिरिक्त संपत्ति है। दुर्भाग्यवश यह 'एसवीएन डिफ टी बी' में दिखाई देगी, भले ही फ़ाइल एक्स की वास्तविक सामग्री समान है।

मैं कुछ इस तरह के लिए देखो:

svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize 

अद्यतन: मैं आंशिक रूप से फाइल सिस्टम पर सीधे diff'ing बजाय SVN उपकरण का उपयोग करके इस हल किया। नीचे अपना खुद का जवाब देखें ...

+0

आप मेटाडाटा से क्या मतलब है चल रहा है के रूप में SVN मदद डॉक्स

svn diff --patch-compatible 

यह वही है के माध्यम से खोज? – codelogic

+0

"एसवीएन गुण" इसका वर्णन करने के लिए एक बेहतर शब्द है। मैंने इसे स्पष्ट करने के लिए अपनी पोस्ट तय की .. – driAn

+0

यदि आपको कोई समाधान मिलता है तो कृपया इसे पोस्ट करें, मुझे उत्सुकता है कि यह कैसे किया जाएगा। शायद जीआईटी में यह सुविधा है ... –

उत्तर

3

ऐसा लगता है कि svn अंतर्निहित टूल्स का उपयोग करके ऐसा करने का कोई तरीका नहीं है। मैंने इसे कैसे हल किया: दोनों पेड़ों को निर्यात करें और अपने पसंदीदा diff टूल का उपयोग करके फाइल सिस्टम पर उन्हें गंभीर रूप से अलग करें। यह किसी भी तरह से ऐसा करने का एकमात्र तरीका है:/

0

मुझे यकीन नहीं है, लेकिन एक सरल 'svn diff | grep -iv "अनदेखा करने के लिए सामान" एक कामकाज होगा।

+1

पूरा डिफ केवल टेक्स्ट की एक बड़ी मात्रा के रूप में आता है, मुझे इसे 'svn property added' जैसे परिवर्तनों को फ़िल्टर करने के लिए इसे मैन्युअल रूप से पार्स करना होगा। दुर्भाग्य से grep का उपयोग करके मैं कोई आसान काम नहीं कर सकता। – driAn

-6

आप उन फ़ाइलों और निर्देशिकाओं पर svn:ignore संपत्ति सेट कर सकते हैं, जिन्हें आप अनदेखा करने के लिए svn diff चाहते हैं।

+1

मैं विशिष्ट निर्देशिकाओं या फ़ाइलों को अनदेखा नहीं करना चाहता, यह एक ही फाइल के विभिन्न गुणों (उर्फ मेटाडाटा) को अनदेखा करने के बारे में है। मान लें कि फ़ाइल एक्स में ट्रंक टी की तुलना में शाखा बी में एक अतिरिक्त संपत्ति है। यह वास्तविक सामग्री समान है, भले ही यह svn diff में दिखाई देगी। – driAn

10

यदि आप --summarize विकल्प का उपयोग करते हैं, तो पहले कॉलम के बजाय दूसरे में संपत्ति परिवर्तन दर्शाए जाते हैं।

अर्थात, और

M URL -- indicates content change 
M URL -- property change 
MM URL -- content and property change 

यह थोड़ा ग्रेप आसान है। मुझे लगता है कि यदि आप एक पूर्ण अंतर चाहते हैं तो आप दो चरण की प्रक्रिया कर सकते हैं - पहले सामग्री परिवर्तन के साथ फ़ाइलों को खोजने के लिए संक्षेप में उपयोग करें, फिर उन्हें अलग करें।

5

जोसेफ वाटकिन्स से अच्छी नोक।

svn diff A B --summarize | grep '^. ' 

ग्रेप लाइन पर दूसरे चरित्र के रूप में एक जगह के लिए लग रहा है:

यहाँ ग्रेप जूनियर उपयोगकर्ताओं के लिए आदेश है।

+2

क्षमा करें। यह svn diff ए बी --समारिज होना चाहिए। grep -v '^' किसी स्थान से शुरू होने वाली सभी पंक्तियां छिपी जानी चाहिए, क्योंकि वहां केवल फाइलें ही फाइलों पर बदलती हैं। –

+0

यह उन मामलों को संभाल नहीं करता है जहां फ़ाइल सामग्री * और * गुण दोनों बदल जाते हैं, या जहां कुछ और, लॉकिंग की तरह, फ़ाइल के साथ हुआ और फ़ाइल संशोधित की गई है। – trysis

1

मैंने ऐसा करने के लिए एक स्क्रिप्ट लिखी, मुझे एक ऑनलाइन नहीं मिला।

स्क्रिप्ट स्क्रिप्ट के शीर्ष पर दर्ज नियमित अभिव्यक्तियों की एक सरणी के आधार पर डेटा को हटा देती है। वर्तमान में, यह गुणों को बदलने के लिए सेट अप किया गया है, लेकिन यह नियमित परिवर्तनों की श्रृंखला से मेल खाने वाले किसी भी बदलाव को हटा सकता है।

स्क्रिप्ट सेट करने के बाद, बस स्क्रिप्ट में svn diff के आउटपुट को पाइप करें। मैंने फिल्टर को पैरामीटर के बजाय स्क्रिप्ट में रखा क्योंकि मैं हमेशा एक ही फ़िल्टर चलाता हूं।

मैंने इसे जीपीएलवी 2 के रूप में जारी किया।

clean_svn_diff.bash

21

आप गुण परिवर्तन सहित किसी भी बाहरी लाइनों को हटाने के लिए 'filterdiff --clean' के माध्यम से SVN diff उत्पादन पारित कर सकते हैं।

+0

विज्ञापन के रूप में काम करना - बढ़िया! डेबियन/उबंटू उपयोगकर्ताओं के लिए एक संकेत: यदि आपके सिस्टम पर 'filterdiff' नहीं है, तो आप इसे' apt-get install patchutils' के माध्यम से इंस्टॉल कर सकते हैं। –

2

यहां एक एकल आदेश है जो यह सब करता है।

svn diff -r 54833:57215 --summarize | egrep -v '^ |^D|^A' | awk '{ print $2 }' | xargs svn diff -r 54833:57215 

एनबी:: यदि आप सभी (गैर संपत्ति) संशोधन 54,833 और 57215. के बीच वर्तमान में निर्देशिका में सभी फ़ाइलों के लिए डिफ यह आदेश यह क्या करना चाहिए पता लगाना चाहते हैं कहो यह केवल डिफ संशोधित फ़ाइलों - नहीं जोड़ा या हटाया गया फ़ाइलें।

1

मिले इस जबकि

svn diff --show-copies-as-adds --ignore-properties 
संबंधित मुद्दे