2010-02-05 13 views
51

रिलीज चक्र के लिए शाखा स्रोत सामान्य स्रोत प्रबंधन परिदृश्यों में से एक है। जितनी जल्दी हो सके विलय करना एक अच्छा अभ्यास है। इस प्रकार हमारे पास एक मानव कारक है: शाखा बंद है, लेकिन कोई कुछ वापस ट्रंक में विलय करने के लिए भूल गया।सबवर्सन: ट्रंक में विलय नहीं किए गए सभी संशोधन कैसे प्राप्त करें?

प्रश्न: क्या सभी संशोधन संख्याएं प्राप्त करने के लिए "एक क्लिक" तरीका है जो शाखा एक्स से ट्रंक में विलय नहीं किया गया था?

(नोट: मुझे विलय करने के लिए इन संशोधन संख्याओं की आवश्यकता नहीं है, मुझे उन्हें स्वचालित सत्यापन बनाने की आवश्यकता है, जो लोगों को यह सुनिश्चित करने के लिए याद दिलाएगा कि वे कुछ ट्रंक में विलय करना भूल गए हैं। खुद को विलय करना एक नहीं है मुद्दा।)

ऐसा लगता है कि svn mergeinfo कमांड यहां मदद करने में विफल रहता है। गुजरने वाली शाखा और ट्रंक जड़ें विफल हो जाएंगी यदि मर्ज रूट स्तर पर नहीं किया गया था (और यह एक आम परिदृश्य है)।

स्क्रिप्ट्स, किसी भी प्रकार के एसवीएन हुक समाधान के रूप में आपका स्वागत है।

पीएस

एसवीएन का नवीनतम संस्करण। बहस करने की कोई ज़रूरत नहीं है कि कैसे आम या अच्छा इस परिदृश्य है;)

+0

मुझे आश्चर्य है कि प्रश्न का अभी तक कोई जवाब नहीं है! यह सुनिश्चित करना था कि मर्जिन्फो पेश करने से पहले करना मुश्किल था, लेकिन अब मुझे "बेवकूफ, जैसे आपको Google को सीखना चाहिए, यहां लिंक है"। अजीब और अभी तक निराशाजनक। – Dandikas

उत्तर

5

संक्षिप्त उत्तर: मुझे ऐसा नहीं लगता है।

लंबा उत्तर: मैंने इस प्रश्न का उत्तर देने के लिए एक पायथन लिपि लिखना समाप्त कर दिया। जब भी डेवलपर्स एक परिवर्तन को मर्ज करते हैं तो उन्हें लॉग संदेश में "विलय rXXX" डालना होगा। (यह svn से पहले: mergeinfo अस्तित्व में था) स्क्रिप्ट सभी लाइव svn शाखाओं + ट्रंक को पार करती है और सभी "विलय" लिंक को दोबारा स्कैन करती है, जो प्रतिबिंबित परिवर्तनों की प्रति डेवलपर सूची को आउटपुट करती है।

[अद्यतन] @tmont से उत्तर अब बेहतर है कि हर किसी के पास एक svn संस्करण है जो svn mergeinfo --show-revs eligible और svn merge --record-only का समर्थन करता है, जब आप केवल तार्किक फ़िक्स रिकॉर्ड करना चाहते हैं।

+0

@Nathan Kidd यह वही है जो मैं ढूंढ रहा हूं! केवल अंतर यह है कि मैं इसे विशेष टिप्पणी के बिना काम करने की उम्मीद करता हूं, क्योंकि अब हमारे पास svn है: mergeinfo संपत्ति जगह – Dandikas

+1

@ डंडिकस अगर मैं इसे फिर से लिखना चाहता हूं तो मुझे यकीन नहीं है कि मैं svn: mergeinfo का उपयोग करता हूं।कारण यह है कि हमारी चिंता वास्तव में नहीं है कि एक विशेष अंतर विलय हो जाता है, लेकिन इस मुद्दे के लिए तार्किक सुधार लागू होता है। कभी-कभी यदि कोई शाखा पर्याप्त हो जाती है तो हम इस मुद्दे को ठीक करेंगे और इसे 'विलय' चिह्नित करेंगे, लेकिन वास्तव में हमने किसी भी मूल अंतर को लागू नहीं किया है; एक ही मुद्दे को ठीक करने के लिए एक अलग दृष्टिकोण का उपयोग किया गया था। मैन्युअल लॉग संदेश दृष्टिकोण आपको ऐसा करने देता है, svn: mergeinfo इतना नहीं करता है। –

+1

अपना अंक मिला। हमारे काम-प्रवाह इस तरह से थोड़ा अलग है कि जितनी जल्दी हो सके विलय किया जाता है। अर्थात। यदि डेवलपर एक शाखा में ठीक हो जाता है (चाहे वह एक प्रतिबद्ध हो या कई हो, जो फिक्स पूरा करता है) तो वह तुरंत उन्हें ट्रंक में विलीन कर देता है। इस दृष्टिकोण में कई ताकतें और एक गंभीर कमजोरी है - मानव कारक। शाखा में किसी भी फिक्स को कम उपलब्ध समय के साथ अधिक दबाव में किया जाता है। फिर भी हमें अभी भी आश्वस्त करना चाहिए कि लोग (देव लोग सही हैं) जानते हैं कि वे कुछ मर्ज करने के लिए भूल गए होंगे। – Dandikas

0

कारण है कि सीवीएस के लिए SVN के लिए शाखा के :) एक रूट कि तरह दिखना चाहिए चिह्नित करने के लिए एक टैग बनाया:

+ trunk/project1 
+ tags/project1-b1-root 
+ branches/project1-b1 

नोट्स:

  1. टैग Project1-B1-रूट और शाखा Project1-बी 1 ट्रंक से एक ही समय में बनाया जाता है।
  2. किसी को भी प्रोजेक्ट 1-बी 1-रूट पर प्रतिबद्ध होना चाहिए (आप टैग/ पथ के लिए इस ऑपरेशन को प्रतिबंधित कर सकते हैं)।
  3. जब हर कोई दावा किया है, कि वह ट्रंक के लिए सब कुछ कर दिया गया है, आप Project1-बी 1Project1-B1-रूट और के बीच एक अंतर बनाने के लिए और ट्रंक पर लागू करने का प्रयास करें: परिवर्तन, जो पहले से ही लागू होते हैं, चुपचाप छोड़ दिया जाएगा, बाकी के लिए आप अंतर या टकराव देखेंगे।
+0

@dma_k 3 चरण में मानव बातचीत की आवश्यकता है। मुझे वास्तव में कुछ ऐसा चाहिए जो वास्तव में svn mergeinfo की तरह है जो संशोधित संशोधनों की एक साधारण सूची देता है (या विलय नहीं)। विलय के परिणाम मिलने के बाद आपके परिदृश्य में मैन्युअल जांच की आवश्यकता है कि यह पता लगाने के लिए कि कौन से संशोधन विलय नहीं किए गए थे और लेखक कौन हैं। – Dandikas

1

मैं विशिष्ट परिवर्तन संख्या से विलय हो की जरूरत है कि के बारे में चिंता नहीं करता, बल्कि सिर्फ diffs को देखो:,

पहले ट्रंक के साथ तारीख तक पक्ष शाखा लाने (या देखते हैं कि क्या होता है विलय हो):

cd branch-dir 
svn merge --reintegrate http://svnrepo/path-to-trunk . 
svn ci -m'making this branch current' 

cd ../trunk-dir 
svn merge --dry-run http://svnrepo/path-to-trunk http://svnrepo/path-to-branch . 
svn ci -m'merging in all unmerged changes from <branch>' 

, याद रखें SVN मर्ज आदेशों सिर्फ SVN diff आदेशों की तरह लग रहे - आप एक diff/पैच बनाने के लिए, तो एक विशेष स्थान है कि लागू होते हैं। उपरोक्त विलय आदेश केवल यह कह रहा है कि "ट्रंक और शाखा के बीच सभी मतभेद लें, और उन्हें ट्रंक की कार्यशील प्रतिलिपि पर लागू करें"। तो आप अपनी मेल अधिसूचना के लिए एक अंतर में उस दूसरे मर्ज कमांड को आसानी से बदल सकते हैं।

प्रत्येक मामले में आने से पहले भिन्नता की जांच करना न भूलें, यह सुनिश्चित करने के लिए कि कुछ भी बुरा नहीं हुआ है। आपको कुछ संघर्षों को भी हल करना पड़ सकता है।

+0

@ अन्यथा यह विलय पर एक अच्छा संक्षिप्त स्पष्टीकरण है;) मुझे पता है कि कैसे विलय करना है (यानी यह सवाल नहीं था)। मुझे स्रोत बनाए रखने में दिलचस्पी है, और "विलय नहीं किया गया" प्रश्न पर स्वचालित उत्तर प्राप्त करना चाहता हूं। जवाब उन लोगों को मेल किया जाएगा जो विलय करना भूल गए थे। – Dandikas

+0

@ दंडिकस: मैंने अपने जवाब में और अधिक स्पष्ट होने का जवाब दिया है जिसका मेरा मतलब था। प्रश्न से – Ether

65

यदि आप mergeinfo सब-कमांड के साथ सबवर्जन (1.5 या उच्चतर, मुझे लगता है) के अपेक्षाकृत नए संस्करण का उपयोग कर रहे हैं तो आप यह सुपर आसानी से कर सकते हैं।

svn mergeinfo --show-revs eligible svn://repo/branches/your-branch-name svn://repo/trunk 

यह आप सभी संशोधन कि शाखा "अपने-शाखा का नाम" से ट्रंक को मर्ज होने के लिए पात्र हैं दिखाएगा।

स्रोत: http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.mergeinfo.html

+0

@tmont: "यह svn mergeinfo कमांड की तरह सीम यहां मदद करने में विफल रहता है। अगर शाखा को रूट स्तर पर नहीं किया जाता है तो यह शाखा और ट्रंक जड़ें विफल हो जाती हैं (और यह एक आम परिदृश्य है)।" - शो-रेव पात्र "विलय किए गए" से "अभी तक विलय" करने के लिए केवल सूची बदलते हैं, लेकिन उप फ़ोल्डर प्रतिबद्धता विफलता अभी भी वहां मौजूद है। – Dandikas

+7

"और यह एक आम परिदृश्य है" -> विभिन्न स्तरों पर विलय/शाखा में एक सामान्य त्रुटि है! हमेशा उस स्तर पर विलय करें जहां आपकी शाखा शुरू हुई थी। हमेशा। – bebbo

+3

svn mergeinfo कमांड (कम से कम वर्तमान संस्करण में) के लिए '-R' (रिकर्सिव) विकल्प है, जिसमें इसे कम करने वाले विलय शामिल करना चाहिए। हम हमेशा शीर्ष स्तर पर विलय करने की कोशिश करते हैं (काम निम्न स्तर पर किया जा सकता है, या केवल एक निश्चित निर्देशिका में फाइलों सहित, लेकिन शीर्ष पर हमेशा विलीन हो जाता है) इसलिए मैंने वास्तव में इसका परीक्षण नहीं किया है। – Adam

0

svn merge --dry-run आपको जानकारी आप की जरूरत दे देगा?

+0

नोप :(सूखे रन बताएंगे कि चल रहे विलय संघर्ष का उत्पादन करने जा रहे हैं। फिर, आप उन संशोधनों को खोजने का प्रयास कर सकते हैं जो विलय नहीं हुए थे, लेकिन यह एक ऐसा गेम है जो "एक क्लिक" क्रिया नहीं है जिसे स्वचालित के लिए निर्धारित किया जा सकता है शाखा बंद करने पर चलाएं। – Dandikas

2

मुझे पता है आपके मामले शायद इस के लिए बहुत देर हो चुकी है, लेकिन है कि मैं क्या बात की इस तरह के लिए क्या एक सम्मेलन स्थापित करने के लिए मर्ज करता है तो वे बाद में पहचाने जाने योग्य रहे हैं। उदाहरण के लिए "विलय [1234]: ... (1234 का पूर्ण प्रतिबद्ध लॉग) ..."। फिर मैं बाद में एक स्क्रिप्ट के साथ svn लॉग से इसे पार्स कर सकता हूं।

सुनिश्चित करें कि आपके पूरी टीम है यह, एक स्क्रिप्ट में मर्ज सम्मेलन बनाने के लिए और अपनी परियोजना में रख बनाने के लिए। (उदा।, ./scripts/merge 1234)। लोग आम तौर पर भी इस की सराहना करेंगे, दोगुना इसलिए यदि स्क्रिप्ट आसान बाहर स्रोत यूआरएल स्वचालित रूप से

गुड लक लगाना तरह बातें करने से से कच्चे SVN कमांड यह होगी विलीन हो जाती है बनाता है।

+0

यह जरूरी चीज की तरह लगता है, सिवाय इसके कि मैं टिप्पणियों पर एक सम्मेलन नहीं करना चाहता क्योंकि हमारे पास एसवीएन v1.5 – Dandikas

+0

से शुरू होने वाली मर्जिंफो संपत्ति है। मैं चाहता हूं कि यह भी काम करे, लेकिन मेरे पास अभी तक 1.5 मर्ज हैंडलिंग स्थिति को जटिल करने के अलावा कुछ भी करने के लिए। –

1

मैं माफी चाहता मैं अब इस अधिकार का परीक्षण करने के लिए घर पर मेरी SVN सर्वर की जरूरत नहीं है, लेकिन आदेश सकता है:

svn log --verbose 

जो तुम पार्स सकता है? मुझे मुख्य रूप से मुख्य रूप से विलय करने के बाद आउटपुट सुनिश्चित नहीं है, लेकिन आप एक स्क्रिप्ट का उपयोग कर सकते हैं (जो मेरे पास नहीं है क्योंकि मैं अपने एसवीएन सर्वर का उपयोग कर अकेला हूं) लॉग और सभी को पढ़ना जिन फ़ाइलों को चेक किया गया है, और उसके बाद एक कीवर्ड की ओर इशारा करते हुए संकेत मिलता है कि फ़ाइल को मुख्य में विलय कर दिया गया है?

मैं कुछ समय के लिए घर आने पर इसे आज रात बाहर देखने की कोशिश करूंगा यदि मेरे पास कुछ समय है।

0

एक चांदी की गोली की कमी के कारण, अनुशासित तरीका क्या विलय कर दिया गया और जहां से एक नोट रखने के लिए है।

+0

जब तक एक ही प्रोजेक्ट पर काम कर रहे <10 डेवलपर हैं तब तक सही है। एक बड़े टीम के साथ आप या तो कोडिंग वर्क-फ्लो को बदलते हैं या चेक मैन्युअल रूप से (sux) करते हैं। – Dandikas

+1

Nooo! चांदी की बुलेट की कमी के कारण, इसे विकसित करना होगा। सर्वोत्तम प्रक्रिया वर्किंग कोड है। –

+0

@Pavel यदि कोई अन्य दिलचस्प चीजें हैं जो कोई विकसित करना चाहते हैं, तो इस मुद्दे के लिए कोई भी इसके बजाय गिट पर स्विच करना पसंद कर सकता है। –

0

Ether के जबाब above के आधार पर, शाखा आप मर्ज ना किए गए संशोधन

svn merge --dry-run http://svnrepo/path-to-merge-source . \ 
| grep Merging            \ 
| sed 's/--- Merging//'         \ 
| sed 's/into.*//'           \ 
| sort -u             \ 
| sed 's/ through r/:/'         \ 
| sed -e :a -e N -e 's/\n//' -e ta       \ 
| sed 's/ r/ -r/g'           \ 
| sed 's|^|svn log http://svnrepo/path-to-merge-source |' 
+1

यदि आप अपने 2 और 3 डी लाइनों की तरह खुद को एक grep और sed का उपयोग करते हैं, तो इस सरल अनुकूलन को आजमाएं: sed -n's/--- विलय // p ' –

0

मैं का यह बनाया जा रहा 3 साल के बाद अपने धागा का आनंद ले रहा हूँ के लिए जाँच करना चाहते हैं से।और मुझे विश्वास है वहाँ अभी भी प्रपत्र डाल यह :)

क्या मैं $ svn help merge में हालांकि पाया में अपने कार्य के लिए कोई समाधान विलीन हो जाती है सलाह उप पेड़ नहीं करने के लिए:

आप चाहते हैं केवल एक उप-विलय विलय करें, तो उपट्री पथ दोनों SOURCE और TARGET_WCPATH में शामिल होना चाहिए; इस हतोत्साहित

mergeinfo बचने सबट्री के लिए, है तो मुझे लगता है कि समाधान के लिए अपने "आम परिदृश्य" को तोड़ने के लिए की सबट्री कर विलीन हो जाती है है।

मर्ज ऑपरेशन के लिए कुछ नियंत्रण स्थापित करना अनिवार्य होगा, अन्यथा किसी को भी एक शाखा तक पहुंच पढ़ने और दूसरे तक पहुंच लिखने से पहले से दूसरे में विलय कर सकते हैं। तो वास्तविक सवाल है - कैसे सबट्री नियंत्रित करने के लिए विलीन हो जाती है))

0

मैं शाखाओं के बीच विलय नहीं किया संशोधन को खोजने के लिए जावा वेब अनुप्रयोग विकेट का उपयोग करने और SVNKit लिखा है, यह जो चाहें करें करने के लिए अनुकूलित किया जा सकता है ... link

screen

संबंधित मुद्दे