2008-09-24 7 views
5

हम एक एसवीएन रेपो की शाखाओं का प्रबंधन करने के लिए गिट-एसवीएन का उपयोग कर रहे हैं। हमें निम्नलिखित समस्या का सामना करना पड़ रहा है: शाखा में उपयोगकर्ता एक्स द्वारा कई प्रतिबद्धताओं के बाद, उपयोगकर्ता वाई शाखा में ट्रंक में परिवर्तनों को मर्ज करने के लिए गिट-एसवीएन का उपयोग करना चाहता है। हम जो समस्या देख रहे हैं वह यह है कि सभी व्यक्तिगत मर्ज ऑपरेशंस के लिए प्रतिबद्ध संदेश ऐसा लगता है कि वे उपयोगकर्ता वाई द्वारा बनाए गए थे, जबकि शाखा में वास्तविक परिवर्तन उपयोगकर्ता एक्सगिट-एसवीएन विलय और विवरण

से संकेत करने का कोई तरीका है git-svn कि विलय करते समय, विलय करने वाले व्यक्ति के बजाय किसी दिए गए परिवर्तन के लिए मूल प्रतिबद्ध संदेश/लेखक का उपयोग करें?

उत्तर

13

Git-svn आदमी पेज अनुशंसा करता है कि विलय का उपयोग नहीं करते हैं । "" यह अनुशंसा की जाती है कि आप गिट-एसवीएन फ़ेच करें और रीबेस करें (खींचें या मर्ज न करें) ""। कहा कि, तुम क्या आप :-)

चाहते 2 मुद्दों यहाँ हैं कर सकते हैं। सबसे पहले यह है कि svn केवल कमिटर स्टोर करता है, गेट के रूप में पैच के लेखक नहीं। तो जब वाई मर्ज के लिए प्रतिबद्ध ट्रंक करने के लिए, SVN केवल उसका नाम रिकॉर्ड करता है, भले ही पैच एक्स द्वारा लेखक थे यह आश्चर्यजनक सरल अभी तक ओपन सोर्स प्रोजेक्ट थे लेखक में परिवर्तन का श्रेय प्रदान से बच सकते हैं के लिए महत्वपूर्ण एक अद्भुत Git की सुविधा है सड़क के नीचे कानूनी समस्याएं।

दूसरा, गिट अपेक्षाकृत नई svn विलय सुविधाओं का उपयोग नहीं करता प्रतीत होता है। यह एक अस्थायी बात हो सकती है, क्योंकि गिट सक्रिय रूप से विकसित होता है और हर समय नई सुविधाएं जोड़ दी जाती हैं। लेकिन अभी के लिए, यह उनका उपयोग नहीं करता है।

मैं सिर्फ Git 1.6.0.2 के साथ की कोशिश की है और यह SVN मर्ज के साथ ही कार्रवाई करते समय की तुलना में जानकारी "खो देता है"। SVN 1.5 में, एक नई सुविधा लॉगिंग और एनोटेशन तरीकों को जोड़ा गया है, ताकि ट्रंक पर SVN लॉग जी किसी मर्ज के लिए इस तरह उत्पादन कुछ होगा:

------------------------------------------------------------------------ 
r5 | Y | 2008-09-24 15:17:12 +0200 (Wed, 24 Sep 2008) | 1 line 

Merged release-1.0 into trunk 
------------------------------------------------------------------------ 
r4 | X | 2008-09-24 15:16:13 +0200 (Wed, 24 Sep 2008) | 1 line 
Merged via: r5 

Return 1 
------------------------------------------------------------------------ 
r3 | X | 2008-09-24 15:15:48 +0200 (Wed, 24 Sep 2008) | 2 lines 
Merged via: r5 

Create a branch 

यहाँ, वाई R5 करता है, जो शामिल एक्स पर शाखा से ट्रंक में परिवर्तन। पर

 2   Y int main() 
     2   Y { 
G  4   X return 1; 
     2   Y } 

यहाँ संभालने Y केवल ट्रंक करने के लिए प्रतिबद्ध है, हम देख सकते हैं कि एक लाइन एक्स द्वारा उसे संपादित किया गया था (: लॉग का स्वरूप है जो महान वास्तव में नहीं है, लेकिन यह SVN दोष जी पर अपने स्वयं के में आता है शाखा) और विलय।

इसलिए, यदि आप SVN 1.5.2 का उपयोग कर रहे हैं, तो आप संभवतः अब के लिए असली SVN ग्राहक के साथ विलय की बेहतर हैं। यद्यपि आप गिट में विलय जानकारी खो देंगे, लेकिन यह आमतौर पर शिकायत करने के लिए पर्याप्त चालाक नहीं है।

अद्यतन: मैं सिर्फ देखने के लिए अगर वहाँ अंतरिम में किसी भी अग्रिम कर दिया गया है Git 1.7.1 के साथ इस कोशिश की है। बुरी खबर यह है कि गिट के भीतर विलय अभी भी svn: mergeinfo मानों को पॉप्युलेट नहीं करता है, इसलिए git mergegit svn dcommit के बाद svn सेट नहीं होगा: mergeinfo और यदि सबवर्सन रिपोजिटरी कैनोलिक स्रोत है, तो शायद यह विलय जानकारी खो देगा। अच्छी खबर यह है कि git svn clone svn में पढ़ा जाता है: mergeinfo गुण बेहतर मर्ज इतिहास बनाने के लिए, इसलिए यदि आप svn merge सही तरीके से उपयोग करते हैं (इसे पूर्ण शाखाओं में विलय की आवश्यकता होती है) तो गिट क्लोन उपयोगकर्ताओं को गिट करने के लिए सही लगेगा।

+1

'git svn dcommit' वर्तमान में 'svn: mergeinfo' को दबा सकता है: https://www.kernel.org/pub/software/scm/git/docs/git-svn.html देखें (" mergeinfo "के लिए खोजें) –

6

आप ऐसे मर्ज है कि प्रश्न में प्रतिबद्ध वस्तु को सूचित करता है नहीं कर रहे हैं के बारे में Git को पढ़ाने के लिए ग्राफ्ट का उपयोग कर सकते हैं।

echo "$merge_sha1 $parent1_sha1 $parent2_sha1" >> .git/info/grafts 

यह जानकारी ढूँढना काफी आसान है: दिया मर्ज प्रश्न में प्रतिबद्ध मिल जाए, आप $merge_sha1 और $parent1_sha1 पहले से ही पता है।पारंपरिक, के संदेश के लिए प्रतिबद्ध इस तरह के एक प्रतिबद्ध दूसरे माता पिता की SVN संशोधन संख्या के लिए प्रतिबद्ध है, जो आप केवल संगत प्रतिबद्ध आईडी से अनुवाद में शामिल होंगे:

git svn find-rev r$revnum $branch 

प्रेस्टो आप जानकारी के सभी 3 टुकड़े आप की जरूरत है भ्रष्टाचार बनाएँ।

2

- -add-writer-from-anduse-log-author विकल्पों का उपयोग करने के लिए git-svn का उपयोग करने का प्रयास करें।

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

  • कोई संबंधित समस्या नहीं^_^