तोड़फोड़ के साथ आंशिक कमिट


104

मामले को देखते हुए मैंने एक फाइल में दो स्वतंत्र बदलाव किए : उदा। एक नई विधि जोड़ी और दूसरी विधि बदल दी।

मैं अक्सर दोनों बदलावों को एक प्रतिबद्ध नहीं करना चाहता , लेकिन दो स्वतंत्र रूप में ।

गिट रिपॉजिटरी पर मैं हंक को छोटे में विभाजित करने के लिए git-add (1) के इंटरएक्टिव मोड का उपयोग करेगा :

 git add --patch

सबवर्सन के साथ ऐसा करने का सबसे आसान तरीका क्या है? (शायद एक ग्रहण प्लग-इन का उपयोग करके भी)

अपडेट:
में बात Git बारे में , रयान यह कहता है: "। टैंगल्ड कार्य कॉपी समस्या"


क्या आप विशेष रूप से कमांड लाइन पर समाधान के लिए खोज कर रहे थे? नीचे दी गई प्रतिक्रियाओं में से कई में TortoiseSVN का उल्लेख 'कमिट के बाद बहाल' है, जो एक Tortoise-only फीचर है - इसलिए GUI- और विंडोज-आधारित है।
फ्लोरिसला

जवाबों:


35

Git-svn के साथ आप रिमोट SVN रिपॉजिटरी का एक स्थानीय GIT रिपॉजिटरी बना सकते हैं, इसके साथ पूर्ण GIT फीचर सेट (आंशिक कमिट सहित) का उपयोग करके काम कर सकते हैं और फिर इसे सभी SVN रिपॉजिटरी में वापस धकेल सकते हैं।

git-svn (1)


25
इस समाधान में एक विशेष विडंबना है।
tuxayo

65

Tortoise SVN 1.8 अब इसे "कमिट के बाद रिस्टोर" फीचर के साथ सपोर्ट करता है । यह आपको एक फ़ाइल को संपादन करने की अनुमति देता है, जिसमें सभी संपादन प्रतिबद्ध होने के बाद पूर्ववत हैं

प्रलेखन के अनुसार:

फ़ाइल के केवल एक विशिष्ट मुद्दे से संबंधित भागों के लिए:

  1. प्रतिबद्ध संवाद में, फ़ाइल पर राइट-क्लिक करें, "कमिट के बाद पुनर्स्थापित करें" चुनें
  2. उदाहरण के लिए फ़ाइल को TortoiseMerge में संपादित करें: उन परिवर्तनों को पूर्ववत करें, जिन्हें आप अभी तक प्रतिबद्ध नहीं करना चाहते हैं
  3. फ़ाइल सहेजें
  4. फ़ाइल कमिट करें

मुझे आश्चर्य है कि यह कैसे काम करता है। मैंने एसवीएन 1.8 रिलीज़ नोटों की जाँच की , लेकिन मैं यह पता नहीं लगा सकता कि कौन सा फीचर "कमिट के बाद रिस्टोर" है।
डेविड एफएस

3
@ दाविद यह एसवीएन की विशेषता नहीं है। यह TortoiseSVN की एक विशेषता है।
फ्लोरिसला

FYI करें, SVN 1.8 अप्रैल 2018 से 1.10
ग्रेग K

हम इसे यहां प्रलेखन में भी देख सकते हैं: tortoisesvn.net/docs/release/TortoiseSVN_en/…
Guillaume Husta

42

मैंने इसे TortoiseSVN का उपयोग करके किया है ।

बिल्ट इन मर्ज यूटिलिटी आपको रिपॉजिटरी वर्जन और आपकी वर्किंग कॉपी के बीच अंतर दिखाने की अनुमति देती है।

पर्याप्त उपयोगिता के बैकअप बैकअप फ़ंक्शन का उपयोग करें

  1. अपनी फ़ाइल को कमिट करें जैसे कि आप अपने सभी परिवर्तनों को करने जा रहे हैं।
  2. प्रतिबद्ध विंडो में, एक अंतर दिखाने के लिए फ़ाइल पर डबल क्लिक करें।
  3. अलग सेटिंग्स में, मूल फ़ाइल को बैकअप करने के लिए विकल्प पर क्लिक करें ।
  4. अपने इच्छित परिवर्तनों पर राइट-क्लिक करें, और अन्य टेक्स्ट ब्लॉक का चयन करें
  5. एक बार बिल्‍कुल बचाएं । आपके द्वारा सेव किए जाने पर हर बार बैकअप ओवरराइट हो जाएगा। यही कारण है कि आप केवल एक बार बचाना चाहते हैं।
  6. बदलाव को कमिट करें।
  7. निर्मित .bak फ़ाइल के साथ मूल को अधिलेखित करें (जिसमें आपके सभी मूल परिवर्तन होंगे)।
  8. अपनी फ़ाइल कमिट करें।

दो अलग-अलग कमिट का उपयोग करके अब आपको अपने सभी बदलाव करने चाहिए।


1
आपने वास्तव में यह कैसे किया? मुझे उस तकनीक को सीखने में दिलचस्पी होगी।
लास वी। कार्लसन

यह इतना साफ-सुथरा होगा अगर यह स्वचालित रूप से एक कमिट के बाद .bak फाइलों के साथ ओवरराइट हो जाएगा।
BCS

मुझे चरण -3 नहीं मिला: बैकअप विकल्प, कछुआ एसवीएन 1.8.1 का उपयोग कर
sudhAnsu63

4
कोई बात नहीं। 1.8 tortoisesvn.net/tsvn_1.8_releasenotes.html के लिए प्रासंगिक लिंक मिला। केवल एक विशिष्ट मुद्दे से संबंधित फ़ाइल के कुछ हिस्सों को प्रतिबद्ध करने के लिए: प्रतिबद्ध संवाद में, फ़ाइल पर राइट-क्लिक करें, "पुनर्स्थापना के बाद पुनर्स्थापना करें" फ़ाइल को संपादित करें उदाहरण के लिए TortoiseMerge: उन परिवर्तनों को, जो आप अभी तक नहीं करना चाहते हैं फ़ाइल को बचाने के लिए फ़ाइल को कम करें
sudhAnsu63

अफसोस की बात है, यह कछुआ संस्करण 1.8.5 में उपलब्ध नहीं है, और न ही "कमिट के बाद पुनर्स्थापित करें"।
काजाको

24

उपयोग करने का प्रयास करें और svn diff > out.patchफिर out.patchफ़ाइल को कॉपी करें out.patch.addऔरout.patch.modify

जब आपके पास एक काम करने वाली पैच फ़ाइल होती है , तो मूल फ़ाइल का उपयोग करके वापस लाएं svn revert out.c

पैच फ़ाइलों को हाथ से संपादित करें ताकि वे केवल जोड़ने या संशोधित करने के लिए लोभी हों। patchकमांड का उपयोग करके उन्हें मूल फ़ाइल पर लागू करें , परीक्षण करें यदि जोड़ काम किया है, तो svn commitजोड़।

out.patch.modifyपैच के लिए कुल्ला दोहराएँ ।

यदि फ़ाइल में परिवर्तन अलग हैं जैसा कि आपके प्रारंभिक प्रश्न में कहा गया है - एक नया तरीका जोड़ा गया है, एक मौजूदा विधि को बदल दिया गया है - यह काम करेगा

यह एक बहुत ही कठिन समाधान है - हालांकि मुझे यकीन नहीं है कि आपके पास अपने कमिट्स को अलग करने का कोई कारण होना चाहिए।

आप अपने काम को लागू करने के लिए एक ही स्रोत की कई कार्यशील प्रतियां भी देख सकते हैं:

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

यह सुनिश्चित करने के लिए svn upपरीक्षण करें और सुनिश्चित करें कि सब ठीक है।


11

यह v1.8 से TortoiseSvn (विंडोज) का उपयोग करना संभव है।

4.4.1। द कमिट डायलॉग

यदि आपकी कार्य की प्रतिलिपि अद्यतित है और कोई विरोध नहीं है, तो आप अपने परिवर्तनों को करने के लिए तैयार हैं। किसी भी फ़ाइल और / या फ़ोल्डर का चयन करें जिसे आप कमिट करना चाहते हैं, फिर TortoiseSVN → कमिट करें ...।

<स्निप>

4.4.3। फ़ाइलों के केवल कुछ हिस्सों को कमिट करें

कभी-कभी आप केवल एक फ़ाइल में किए गए परिवर्तनों के कुछ हिस्सों के लिए प्रतिबद्ध करना चाहते हैं। ऐसी स्थिति आमतौर पर तब होती है जब आप किसी चीज़ पर काम कर रहे होते हैं, लेकिन उसके बाद तत्काल सुधार की आवश्यकता होती है, और यह तय होता है कि उसी फ़ाइल पर काम किया जा रहा है।

फ़ाइल पर राइट क्लिक करें और कमेंट मेनू का उपयोग करें → कमिट के बाद पुनर्स्थापित करें। यह फ़ाइल की एक प्रति बनाएगा जैसा वह है। फिर आप फ़ाइल को संपादित कर सकते हैं, जैसे कि TortoiseMerge में और उन सभी परिवर्तनों को पूर्ववत करें, जिन्हें आप नहीं करना चाहते हैं। उन परिवर्तनों को सहेजने के बाद आप फ़ाइल कर सकते हैं।

कमिट होने के बाद, फ़ाइल की प्रतिलिपि स्वचालित रूप से बहाल हो जाती है, और आपके पास अपने सभी संशोधनों के साथ फाइल होती है जो वापस नहीं किए गए थे।

लिनक्स पर, मैं http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php आज़माऊंगा। हालांकि यह खुद को आजमाया नहीं है।


8

मैं यह करता था:

  • मेरे संपादक में (मैं vim का उपयोग करता हूं), फ़ाइल को संपादित करें ताकि केवल एक ही बदलाव दिखाई दे
  • फ़ाइल सहेजें (लेकिन संपादक को मत छोड़ें)
  • परिवर्तित फ़ाइल svn के लिए प्रतिबद्ध करें
  • फिर से प्रकट होने वाले परिवर्तनों के दूसरे सेट के लिए पर्याप्त बार संपादक में "पूर्ववत करें" मारो
  • फ़ाइल फिर से सहेजें
  • परिवर्तनों का दूसरा सेट करें।

यह एक सरल दृष्टिकोण है जो मानता है कि परिवर्तनों का एक सेट पूर्ववत करना बहुत आसान है। अधिक जटिल स्थितियों के लिए, मैं इसके बारे में चिंता किए बिना दोनों परिवर्तनों को छोड़ दूंगा और प्रतिबद्ध करूंगा।

अब जब मैं git का उपयोग करता हूं, तो यह कुछ ऐसा है जो मुझे आशा है कि मुझे फिर कभी नहीं करना पड़ेगा!


4

मैं या तो एक स्थानीय डेरो रेपो का उपयोग करता हूं, या बस धीरे-धीरे परिवर्तनों को मर्ज करता हूं। विलय के साथ (opendiff FileMerge खोलता है, एक मर्ज प्रोग्राम जो Xcode के साथ आता है; अपने पसंदीदा मर्ज टूल से बदलें):

cp file file.new
svn revert file
opendiff file.new file -merge file

संबंधित परिवर्तनों को मर्ज करें, मर्ज को सहेजें, मर्ज प्रोग्राम को छोड़ दें

svn ci -m 'first hunk' file
mv file.new file
svn ci -m 'second hunk' file

अगर फ़ाइल में एक से अधिक असंबंधित हंक, कुल्ला और दोहराएं (लेकिन आप कमिट करने से पहले इतना इंतजार क्यों करेंगे?)

इसके अलावा, यदि आप git जानते हैं, तो आप git-svn का उपयोग स्थानीय git रेपो को बनाए रखने के लिए कर सकते हैं और अपने कमेंट्स को svn मास्टर सर्वर में सिंक कर सकते हैं; मेरे सीमित अनुभव में महान काम करता है।


9
पुन: "इतना लंबा इंतजार क्यों?" आपका पूरे दिन का एक बड़ा रिफ्लेक्टर और बॉस दोपहर के भोजन से ठीक पहले थोड़ा फिक्स-इस-अब बग छोड़ते हैं।
BCS

4

Visual Studio के लिए VisualSVN आज़माएँ । नवीनतम 6.1 रिहाई QuickCommit सुविधा को प्रस्तुत करती। आप Visual Studio संपादक में इस ब्लॉक और कम से कम चयन संदर्भ मेनू आदेशों का उपयोग करके किसी फ़ाइल में चयनित परिवर्तनों को आंशिक रूप से कर सकते हैं ।

यहां छवि विवरण दर्ज करें


2
  1. उन सभी फाइलों को खोलें जिन्हें आप संपादक की पसंद में विभाजित करना चाहते हैं
  2. एक अलग टूल सेट (विन पर, स्पाइक के सुझाव (पुराने संस्करण का उपयोग करें) का उपयोग करके दूसरा सेट वापस करें
  3. कमिट
  4. अपनी संपादक की पसंद पर वापस जाएं और सभी फ़ाइलों को सहेजें

यह स्पाइक के पूर्ण सुझाव की तुलना में थोड़ा जोखिम भरा है लेकिन इसे करना आसान हो सकता है। यह भी सुनिश्चित करें कि आप इसे पहले किसी और चीज़ पर आज़माएँ क्योंकि कुछ संपादक उस फ़ाइल को सहेजने से इनकार कर देंगे जो उनके नीचे से बदल गई है जब तक आप उस फ़ाइल को पुनः लोड नहीं करते (अपने सभी परिवर्तनों को खोना)


0

मुझे लगता है कि डिफरेंट फाइल्स जेनरेट करने, रीवरटिंग आदि के मुकाबले एक आसान विकल्प यह होगा कि रिपॉजिटरी की दो कॉपियां चेक की जाएं और एक से दूसरे में हॉक कॉपी करने के लिए DeltaWalker जैसे विजुअल डिफर टूल का इस्तेमाल किया जाए।

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


0
  1. बैक-अप प्रतियों से संबंधित सभी संशोधित फ़ाइलों की प्रतिलिपि बनाएँ।
  2. उपयोग करके कार्यशील स्थिति का एक पैच बनाएँ svn diff
  3. फ़ाइलों का उपयोग करके वापस लौटें svn revert
  4. पैच के उन हिस्सों को फिर से लागू करें जिन्हें आप प्रतिबद्ध करना चाहते हैं, या तो patchउपकरण का उपयोग कर , या मैन्युअल संपादन, या जो भी हो।
  5. भागो diffअपने बैक-अप सुनिश्चित करें कि आप सही ढंग से पैच-भागों के लिए लागू किया जा करने के लिए के साथ अपने काम कर प्रतिलिपि तुलना करने के लिए बाद में।
  6. निर्माण और परीक्षण।
  7. प्रतिबद्ध होते हैं।
  8. अपनी बैक-कॉपी प्रतियां अपने रिपॉजिटरी चेक-आउट पर वापस कॉपी करें।
  9. 2 पर दोहराएं (नहीं 1. पर!) जब तक किया।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.