2011-05-18 13 views
11

मैं गिट-एसवीएन का उपयोग कर रहा हूं। मैं गिट में जो किया है उसकी एक सूची कैसे प्राप्त कर सकता हूं, लेकिन अभी तक पिछले git svn dcommit के बाद से एसवीएन रिपोजिटरी के लिए प्रतिबद्ध नहीं है? यही है, अगर मैं डॉकिट करता हूं तो मैं कैसे सत्यापित कर सकता हूं?गिट में क्या चेक किया गया है यह देखने के लिए, लेकिन dcommit के माध्यम से svn के लिए प्रतिबद्ध नहीं किया गया है?

उत्तर

12

git svn dcommit के लिए --dry-run विकल्प जानने वास्तव में क्या हो जाएगा के लिए बहुत उपयोगी है सबवर्सन के लिए प्रतिबद्ध विशेष रूप से है कि कि गुण है:

  • यह वास्तव में सबवर्सन
  • यह आपको बताता है जो डिफ सबवर्सन में नए संशोधन बनाने के लिए गणना की जाएगी करने के लिए कुछ भी वचनबद्ध नहीं होते
  • यह आप जो सबवर्सन में शाखा बताता है आप करने से किया जाएगा - इसमें कभी कभी गैर स्पष्ट के बाद से यह पहला पूर्वज में निर्दिष्ट सबवर्सन शाखा से लिया जाता है, इसके एक Git-svn-आईडी के साथ प्रतिबद्ध प्रतिबद्ध संदेश

सामान्य तौर पर यह एक अच्छा विचार है git svn rebase पहले करने के लिए यहां तक ​​कि dcommit का उपयोग करने के बारे में भी सोच रहा है, ताकि आपका इतिहास रैखिक हो - अन्यथा विलय विलय सबवर्सन इतिहास में ज्यादा समझ नहीं ले सकता है। (आप कर तो ली है, इसलिए तो git log और gitk --all भी अनिवार्य रूप से बराबर होगी, लेकिन मैं git svn dcommit --dry-run आप किस बारे में तो होना ही है, भले ही यह व्याख्या करने के लिए और अधिक कठिन है की एक अधिक सटीक तस्वीर देता है लगता है।)

1

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

gitk --all 

आप अपनी शाखाओं का आलेखीय दृश्य देखेंगे। जब आप एसवीएन से अपडेट करते हैं, तो आप अनिवार्य रूप से एक rebase (git svn rebase) करते हैं। इसका मतलब है कि एसवीएन में चेक नहीं किए गए किसी भी स्थानीय काम को अंतिम एसवीएन प्रतिबद्धता के बाद शाखा में दिखाई देगा। मूल रूप से अपने रिमोट एसवीएन ट्रंक और अपनी मास्टर शाखा के बीच काम करता है।

1

मैं git log --oneline --graph का उपयोग करें:

* aaaaaaa commit message 
* bbbbbbb commit message 
|\ 
| * ccccccc commit message 
| * ddddddd commit message 
| * eeeeeee commit message 
|/ 
* fffffff commit message 
|\ 
...

ऐसा नहीं है कि करता है aaaaaaa, bbbbbbb देखने के लिए आसान है, और fffffff वर्तमान (गुरु) शाखा पर हैं। अगली बार जब आप git svn dcommit निष्पादित करते हैं तो ये पहले से ही सबवर्सन के लिए प्रतिबद्ध हैं या प्रतिबद्ध होंगे। (ccccccc करता है, ddddddd, eeeeeee एक अलग शाखा जो मास्टर में विलय हो गया और अलग करता रूप सबवर्सन करने के लिए प्रतिबद्ध नहीं किया जाएगा पर हैं।)

+0

यह स्पष्ट किया जा रहा लायक है कि परिवर्तन 'ccccccc' में पेश किया,' ddddddd' और 'eeeeeee' अप सबवर्सन में खत्म हो जाएगा है, चूंकि विलय प्रतिबद्धता 'ffff के लिए गणना की गई है ffff' में 'bbbbbbbb' में परिवर्तन शामिल होंगे, मान लें कि' ffffffff' का पहला अभिभावक 'bbbbbbbb' है, जैसा कि आप यह कहकर सुझाव देते हैं कि शाखा" मास्टर में विलय "थी। वे परिवर्तन अलग-अलग संशोधन के रूप में नहीं दिखाई देंगे, हालांकि, परिणाम आदर्श से कम हो सकते हैं - अगर आप सबवर्सन को ऐसा इतिहास करना चाहते हैं तो पहले 'गिट svn rebase' करना सबसे सुरक्षित है। –

+0

@ मार्क लॉन्गियर: मेरा इरादा किसी भी डर को दूर करना था कि 'सीसीसीसीसी', 'ddddddd' और 'eeeeeee' subversion में अलग-अलग काम के रूप में दिखाई देगा। मेरे अनुभव में, वे अक्सर एक फीचर शाखा बनाते हैं और अलग-अलग सबवर्जन के रूप में उपयुक्त नहीं होंगे। – titaniumdecoy

0

सिर्फ देखने के लिए प्रतिबद्ध की सूची है, यहाँ मेरी जादू है:

git svn dcommit -n | sed 1d | cut -d" " -f3 | xargs -I{} git log --oneline --no-walk {} 

उत्पादन:

c2e1eff changed a thing 
a889dbf changed a second thing 
18a4653 undid the second thing-- oops 
संबंधित मुद्दे

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