एसवीएन: क्या एक फाइल को "प्रतिबद्ध नहीं है" के रूप में चिह्नित करने का कोई तरीका है?


153

TortoiseSVN के साथ, मैं एक फाइल को इग्नोर-ऑन-कमिट चेंजलिस्ट में ले जा सकता हूं, ताकि जब मैं एक पूरा पेड़ लगाऊं, तो उस फाइल में बदलाव न हो सके।

वहाँ svn कमांड लाइन उपकरण का उपयोग कर ऐसा कुछ करने का एक तरीका है?

संपादित करें: सुझावों का उपयोग करने के लिए धन्यवाद svn:ignore, लेकिन यह वह नहीं है जो मैं देख रहा था।

svn:ignoresvn addऔर जैसी चीजों को प्रभावित करता है svn import। यह इसे अनदेखा करने के लिए फ़ाइल नाम पैटर्न की एक सूची देता है।

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


1
व्यक्तिगत शाखा और स्विच स्थिति का उपयोग करने का एक तरीका है। : [1] [1] [मेरी अन्य पोस्ट इस विषय पर देखें।] Stackoverflow.com/questions/862950/...
ptitpion

जवाबों:


120

फरवरी 2016 / संस्करण 1.9 के अनुसार, तोड़फोड़ में अंतर्निहित "प्रतिबद्ध नहीं है" / "प्रतिबद्ध पर ध्यान न दें" सुविधा नहीं है। यह उत्तर एक गैर-आदर्श कमांड-लाइन वर्कअराउंड है

ओपी के अनुसार, TortoiseSVN में एक बिल्ट इन चैंजिस्ट, "इग्नोर-ऑन-कमिट" है, जो स्वचालित रूप से कमिट से बाहर रखा गया है। कमांड-लाइन क्लाइंट के पास यह नहीं है, इसलिए आपको एक ही व्यवहार (कैविएट के साथ) को पूरा करने के लिए कई चैनल का उपयोग करने की आवश्यकता है :

  • एक काम के लिए आप [काम] करना चाहते हैं
  • उन चीजों के लिए जिन्हें आप अनदेखा करना चाहते हैं [अनदेखा करें]

चूँकि TortoiseSVN के साथ मिसाल है, मैं उन फाइलों के लिए अपने उदाहरणों में "इग्नोर-ऑन-कमिट" का उपयोग करता हूं, जिन्हें मैं कमिट नहीं करना चाहता। मैं उन फ़ाइलों के लिए "काम" का उपयोग करूँगा, जो आप करते हैं, लेकिन आप जो भी नाम चाहते थे, उसे चुन सकते हैं।

सबसे पहले, सभी फाइलों को "काम" नाम के एक चेंजलिस्ट में जोड़ें। इसे आपकी वर्किंग कॉपी के मूल से चलाया जाना चाहिए:

svn cl work . -R

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

फिर, उन फ़ाइलों के लिए जिन्हें आप बाहर करना चाहते हैं:

svn cl ignore-on-commit path\to\file-to-ignore

चूँकि फाइलें केवल एक चेंजलिस्ट में हो सकती हैं, अपने पिछले "काम" ऐड के बाद इस तरह से चलने से आप जिस फाइल को "काम" चैनल से अनदेखा करना चाहते हैं उसे हटा दें और इसे "इग्नोर-ऑन-कमिट" चेंजेलिस्ट में डाल दें।

जब आप अपनी संशोधित फ़ाइलों को प्रतिबद्ध करने के लिए तैयार होते हैं, तो आप अपनी इच्छा के अनुसार "कम-काम" जोड़ते हैं:

svn commit --cl work -m "message"

यहाँ एक सरल उदाहरण मेरी मशीन पर दिखता है:

D:\workspace\trunk>svn cl work . -R
Skipped '.'
Skipped 'src'
Skipped 'src\conf'
A [work] src\conf\db.properties
Skipped 'src\java'
Skipped 'src\java\com'
Skipped 'src\java\com\corp'
Skipped 'src\java\com\corp\sample'
A [work] src\java\com\corp\sample\Main.java
Skipped 'src\java\com\corp\sample\controller'
A [work] src\java\com\corp\sample\controller\Controller.java
Skipped 'src\java\com\corp\sample\model'
A [work] src\java\com\corp\sample\model\Model.java
Skipped 'src\java\com\corp\sample\view'
A [work] src\java\com\corp\sample\view\View.java
Skipped 'src\resource'
A [work] src\resource\icon.ico
Skipped 'src\test'

D:\workspace\trunk>svn cl ignore-on-commit src\conf\db.properties
D [work] src\conf\db.properties
A [ignore-on-commit] src\conf\db.properties

D:\workspace\trunk>svn status

--- Changelist 'work':
        src\java\com\corp\sample\Main.java
        src\java\com\corp\sample\controller\Controller.java
        src\java\com\corp\sample\model\Model.java
M       src\java\com\corp\sample\view\View.java
        src\resource\icon.ico

--- Changelist 'ignore-on-commit':
M       src\conf\db.properties

D:\workspace\trunk>svn commit --cl work -m "fixed refresh issue"
Sending        src\java\com\corp\sample\view\View.java
Transmitting file data .done
Committing transaction...
Committed revision 9.

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


1
मैंने आपके द्वारा बताई गई कमांड के साथ दो फाइलें जोड़ी हैं: $svn st --- Changelist 'ignore-on-commit': M database.php M config.php और अभी भी, वे रेपो को भेजे गए हैं। किसी भी विचार मैंने क्या गलत किया?
अत्तिला फुलोप

7
चैंजिस्ट को 'इग्नोर-ऑन-कमिट' में फाइलें जोड़ना अपने आप में फाइलों को कमिटेड होने से नहीं रोकता है। TortoiseSVN (एक Windows GUI क्लाइंट) ने "इग्न-ऑन-कमिट" के संबंध में बनाया है, लेकिन कमांड लाइन svn नहीं करता है। मेरे मूल उत्तर में एक ही सुझाव था कि आप उन फाइलों को जोड़ना चाहते हैं जिन्हें आप किसी चेंजलिस्ट से कमिट करना चाहते हैं, और यह बताने के लिए कहें कि
जोशुआ मैककिनोन

7
नजरअंदाज करना रक्षात्मक रूप से कछुआ आरक्षित सूची है। यह सब कर रहा है डिफ़ॉल्ट रूप से आइटम को जीयूआई में जाँच से रोका जा रहा है, इसलिए यह एक कछुआ जीयूआई विशिष्ट विशेषता है। यदि आप GUI का उपयोग करते हैं तो आपको सूची में जोड़ने के लिए कमांड लाइन का उपयोग करने की आवश्यकता नहीं है। कमिट मेनू आइटम पर केवल संदर्भ मेनू और नीचे आप उन्हें एक चेंजलिस्ट के पास ले जा सकते हैं और पहले से ही अनदेखा कर सकते हैं। tortoisesvn.net/docs/release/TortoiseSVN_en/…
tjmoore

इसने जैक नहीं किया। इसने सब कुछ किया।
अहानिबेक्स्ड

काम नहीं कर रहा है, विशेष रूप से कमांड लाइन समाधान के बारे में पूछा गया सवाल, जीयूआई नहीं।
riv

26

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

मैं लाइनक्स कमांड-लाइन पर काम करता हूं: इसलिए मेरा समाधान स्क्रिप्ट / usr / bin / svnn (हाँ, दो 'n's!) को निम्नानुसार बनाना है:

#! /bin/bash
DIR=/home/mike/dev/trunk

IGNORE_FILES="\
        foo/pom.xml \
        foo/src/gwt/App.gwt.xml \
        foo/src/main/java/gwt/Common.gwt.xml \
        foo/src/main/resources/context/datasource/local.xml \
        foo/src/main/resources/context/environment/local.xml"

for i in $IGNORE_FILES; do mv $DIR/$i $DIR/"$i"_; done;

svn "$@"

for i in $IGNORE_FILES; do mv $DIR/"$i"_ $DIR/$i; done;

जाहिर है, यह मेरी स्थिति के अनुरूप है - लेकिन अपने देव सेटअप के अनुरूप DIR और IGNORE_FILES को बदल दें। स्क्रिप्ट को निष्पादन योग्य में बदलने के लिए:

sudo chmod +x /usr/bin/svnn

.. तब आप IGNORE_FILES सूची में फ़ाइलों में स्थानीय परिवर्तनों की जाँच के डर के बिना "svn" के बजाय "svn" का उपयोग करें। आशा है कि ये आपकी मदद करेगा!


अंत में, यह उत्तर वास्तव में सही है। आपको कुछ टूल लिखना होगा। यह वास्तव में अपूर्ण है, क्योंकि मैं एक गतिशील विकल्प रखना चाहता हूं, जैसे svnn ignore configs/*- वाइल्डकार्ड और घंटियाँ और सीटी। मुझे लगता है कि मैं खुद ऐसा कुछ लिखता हूं, और फिर यहां वापस आ जाता हूं!
टॉमाज़ गैंडर

यह महान है! इससे भी बेहतर, svn -> svnn के लिए .bashrc में एक उपनाम बनाएं। इससे भी बेहतर, कमांड के अंदर की फाइलों को नजरअंदाज करने के लिए निर्दिष्ट करने के बजाय, यह गिट की तरह व्यवहार कर सकता है, यह फ़ोल्डर के अंदर .ign फाइल की जांच करेगा और पैटर्न से मेल खाने वाली हर फाइल को नजरअंदाज करेगा।
तारेक

टाइपिंग को फिर से सीखने के बजाय svnn, इसे कॉल करने svnऔर इस स्क्रिप्ट को कुछ इस तरह से रखने पर विचार करें जो आपके पेटीएम की शुरुआत में हो, जैसे कि ${HOME}/bin। स्क्रिप्ट से ही, फिर आप कॉल करेंगे /usr/bin/svn
जोस

17

मुझे विश्वास नहीं है कि रिपॉजिटरी में एक फ़ाइल को अनदेखा करने का एक तरीका है। हम अक्सर web.config और अन्य कॉन्फ़िगरेशन फ़ाइलों के साथ इसमें भाग लेते हैं।

हालांकि सही नहीं है, जो समाधान मैं सबसे अधिक बार देखता हूं और उपयोग करता है, उसके पास .default फ़ाइल और स्थानीय प्रतियां बनाने के लिए एक नांट कार्य होता है।

उदाहरण के लिए, रेपो में एक फ़ाइल होती है जिसे web.config.defaultडिफ़ॉल्ट मान कहा जाता है। फिर एक नांट कार्य बनाएं जो सभी web.config.defaultफाइलों को web.configफिर से नाम देगा और फिर स्थानीय मानों के लिए अनुकूलित किया जा सकता है। इस कार्य को तब बुलाया जाना चाहिए जब एक नई कार्य प्रतिलिपि पुनर्प्राप्त की जाती है या एक निर्माण चलाया जाता है।

आपको उस web.configफ़ाइल को भी अनदेखा करना होगा जो बनाई गई है ताकि वह भंडार के लिए प्रतिबद्ध न हो।


8

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

इसमें आपके लिए अधिक काम करने की आवश्यकता होती है, और आप केवल अपनी कार्यशील प्रति के लिए चैंजिस्ट को लागू कर सकते हैं (जाहिर है, उस अराजकता की कल्पना करें जो यह सुनिश्चित कर सकती है कि क्या आप संशोधन के लिए 'कभी अद्यतन नहीं' संपत्ति लागू कर सकते हैं!)।


1
लेकिन हम जैसा चाहते हैं वैसा ही होता है। उदाहरण के लिए, एक स्रोत फ़ाइल जिसे आपको सिस्टम डिफॉल्ट के बजाय एक डिफ़ॉल्टUserId = yourId सेट करना होगा।
कक्षीय ऑक्ट

4

मैं इस धागे के लिए कुछ फ़ाइलों की "परमाणु" बनाने के लिए एक रास्ते की तलाश में आया और कुछ फाइलों को अनदेखा करने के बजाय मैं दूसरे रास्ते पर चला गया और केवल उन फ़ाइलों की सराहना की जो मुझे चाहिए थी:

svn ci filename1 filename2

हो सकता है, यह किसी की मदद करेगा।


आपका जवाब इस सूत्र में केवल एक पर्याप्त सुझाव है। svn ciबस के लिए उर्फ ​​है svn commit। प्रतिबद्ध कमांड निर्दिष्ट फ़ाइलों की विशेष रूप से प्रतिबद्ध बनाने की अनुमति देता है
ऑक्सफेन

3

दोस्तों मुझे बस एक उपाय मिला। यह देखते हुए कि TortoiseSVN हमारे इच्छित तरीके से काम करता है, मैंने इसे लिनक्स के तहत स्थापित करने की कोशिश की - जिसका अर्थ है, वाइन पर चलना। आश्चर्यजनक रूप से यह काम करता है! तुमको बस यह करना है:

  1. उन फ़ाइलों को जोड़ें जिन्हें आप चलाकर कमिट करना चाहते हैं: "svn changelist 'ign-on-प्रतिबद्ध'।"
  2. TortoiseSVN का उपयोग करने के लिए: "~ / .wine / drive_c / Program \ Files / TortoiseSVN / bin / TortoiseProc.exe / कमांड: कमिट / पाथ: '
  3. बाहर की गई फाइलें डिफ़ॉल्ट रूप से कमिट के लिए अनियंत्रित हो जाएंगी , जबकि अन्य संशोधित फाइलों की जांच की जाएगी। यह बिल्कुल विंडोज के जैसा ही है। का आनंद लें!

(सीएलआई द्वारा फ़ाइलों को बाहर करने की आवश्यकता क्यों है इसका कारण यह है कि ऐसा करने के लिए मेनू प्रविष्टि नहीं मिली, निश्चित रूप से क्यों नहीं। किसी भी तरह, यह बहुत अच्छा काम करता है!)


2

दूषित फ़ाइलों को प्रतिबद्ध होने की अनुमति नहीं है। आप अपने निजी परिवर्तनों को भंडार से बाहर रखने के लिए इसका लाभ उठा सकते हैं। यह कम संख्या में फ़ाइलों के साथ सबसे अच्छा काम करता है।

के लिए संघर्ष करने के लिए a-file, आपकी वर्किंग कॉपी (WC) a-fileमें रिपॉजिटरी से अप टू डेट नहीं होता है, और a-fileआपके WC में वे परिवर्तन होते हैं, जो रिपॉजिटरी में परिवर्तन के समान स्थान पर होते हैं (परिवर्तन जो आपने अपडेट नहीं किए थे अभी तक)। यदि आप ऊपर की शर्तों के लिए प्रतीक्षा नहीं करना चाहते हैं तो आप a-fileइस तरह के लिए संघर्ष पैदा कर सकते हैं :
काम करने वाली कॉपी 1 (WC1) में, ऊपर की ओर पाठ की एक पंक्ति जोड़ें a-file, जैसे कि "यहां संघर्ष करें" । आवश्यक सिंटैक्स का उपयोग करें ताकि आप रिपॉजिटरी को न तोड़ें। a-fileWC1 से प्रतिबद्ध । WC2 में, शीर्ष पर पाठ की एक अलग पंक्ति जोड़ें a-file, जैसे "मुझे एक संघर्ष चाहिए" । WC2 से अपडेट करें, और अब एक-फाइल को संघर्ष में होना चाहिए।


1

मैं इसके बजाय एक सहायक बैश स्क्रिप्ट लिखूंगा जो svn commitआपकी ज़रूरत की सभी फ़ाइलों पर चलती है और उनमें से कोई भी नहीं जो आप नहीं करते हैं। इस तरह आपके पास बहुत अधिक नियंत्रण है।

उदाहरण के लिए, एक पंक्ति के साथ, आप एक्सटेंशन के साथ सभी फ़ाइलें कर सकते हैं .hऔर .cppजिसके लिए आपने परिवर्तन किए हैं (और जिससे विरोध नहीं होगा):

svn commit -m "" `svn status | grep "^M.*[h|cpp]$" | awk '{print $2}' | tr "\\n" " "`

[h|cpp]भाग में एक्सटेंशन बदलें / जोड़ें । -m ""यदि आवश्यक हो तो उद्धरण चिह्नों के बीच एक लॉग संदेश जोड़ें ।


1

कुछ प्रस्तावित विचारों को इस तरह लागू किया जा सकता है:

PowerShell में विंडोज पर

डिफ़ॉल्ट सूची में सभी जोड़ें .ps1

dir -Recurse | ? { -not $_.PSIsContainer } | % { svn cl default $_.FullName }

list.ps1 को अनदेखा करने के लिए जोड़ें

 dir file1 ... filN  % { $_.FullName } > ignore-on-commit
 cat .\ignore-on-commit | % { svn cl ignore-on-commit $_ }
 svn add ignore-on-commit

अब, आप उर्फ ​​कर सकते हैं svn ci --changelist defaultताकि आपको इसे हर बार निर्दिष्ट न करना पड़े। अतिरिक्त लाभ यह है कि आप रिपॉजिटरी में इग्नोर-ऑन-कमिट सूची (यदि आप चाहें) स्टोर कर सकते हैं।

मैं कुछ फ़ाइलों के लिए ऐसा करता हूं जो लगातार पुनर्जीवित होते हैं लेकिन शायद ही कभी वास्तव में हाथ से बदल जाते हैं। उदाहरण के लिए, मैं विशिष्ट प्लेसहोल्डर्स पर अपनी कॉन्फिग फाइलों में रिविजन नंबर जोड़ता हूं, ताकि फाइलें प्रत्येक कमिट पर बदल जाएं, फिर भी मैन्युअल बदलाव दुर्लभ है।


1

मैं SVN में आने के लिए इस इंतजार में थक गया। मैं अनदेखा-से-कमेंट के साथ tortoiseSVN का उपयोग कर रहा था, लेकिन यह एक यूजर डायलॉग बॉक्स को पॉप अप करता है जिसे आप कमांड लाइन से दबा नहीं सकते हैं, और जब मैं अपनी बिल्ड स्क्रिप्ट चलाऊंगा और एक कप चाय बनाऊंगा, तो मुझे उससे नफरत है जब मुझे पता चलता है कि यह 10% उपयोगकर्ता इनपुट के लिए इंतजार कर रहा है।

तो यहाँ एक विंडोज़ पॉवरशेल लिपि है जो केवल उन्हीं फाइलों को बनाती है जो चेंजलिस्ट में नहीं हैं:

# get list of changed files into targets
[XML]$svnStatus = svn st -q --xml C:\SourceCode\Monad
# select the nodes that aren't in a changelist
$fileList = $svnStatus.SelectNodes('/status/target/entry[wc-status/@item != "unversioned"]') | Foreach-Object {$_.path};
# create a temp file of targets
$fileListPath =  [IO.Path]::GetTempFileName();
$fileList | out-file $fileListPath -Encoding ASCII
# do the commit
svn commit --targets $fileListPath -m "Publish $version" --keep-changelists 
# remove the temp file
Remove-Item $filelistPath

1

User88044 की स्क्रिप्ट का अद्यतन।

विचार यह है कि कम-से-कम चेंजलिस्ट में फाइलों को धक्का दिया जाए और बुराई की स्क्रिप्ट को चलाया जाए।

स्क्रिप्ट कमांड से डू-न-कमिट फाइल्स को निकालती है: svn स्टेटस --changelist 'do-not-प्रतिबद्ध'

#! / बिन / बैश DIR = "$ (pwd)"

IGNORE_FILES = "$ (svn स्थिति - राष्ट्रवादी 'do-not-प्रतिबद्ध' | Tail -n +3 | grep -oE '[^] + $')" |

$ IGNORE_FILES में i के लिए; do mv $ DIR / $ i $ DIR / "$ i" _; किया हुआ;

svn "$ @";

$ IGNORE_FILES में i के लिए; do mv $ DIR / "$ i" _ $ DIR / $ i; किया हुआ;

स्क्रिप्ट को / usr / bin / svnn (sudo chmod + x / usr / bin / svnn) में रखा गया है

svnn स्थिति, svnn प्रतिबद्ध, आदि ...


1

आप "उपेक्षा-पर-प्रतिबद्ध" चैंजिस्ट को सीधे कछुआ वीवीएन के साथ कॉन्फ़िगर कर सकते हैं। सभी अन्य फ़ाइलों सहित किसी भी अन्य चेंजलिस्ट को कॉन्फ़िगर करने की आवश्यकता नहीं है

1) "एसवीएन कमिट ..." पर क्लिक करें। 3) मेनू: चेंजलिस्ट> इग्नोर-ऑन-कमिट

अगली बार जब आप एक एसवीएन कमिट करते हैं ... सूची के अंत में फ़ाइलें अनियंत्रित दिखाई देंगी, श्रेणी-अनदेखा-कमिट के तहत।

के साथ परीक्षण किया: TortoiseSVN 1.8.7, बिल्ड 25475 - 64 बिट, 2014/05/05 20:52:12, तोड़फोड़ 1.8.9, -release


1
Youps, मैंने अभी-अभी tjmoore की टिप्पणियां देखीं, जो पहले से ही tortoiseSVN उपयोगकर्ता के लिए अच्छी जानकारी दे रहा है ... कोई कमांड लाइन tortoisesvn.net/docs/release/TortoiseSVN_en/…
lney

क्या यह 1.9 में टूट गया है?
जेक एचएम

1

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

svn status | grep -v excluding | sed 's/^A */"/g; s/$/"/g' | tr '\n' ' ' | xargs svn commit -m "My Message"

ठीक है, तो यहाँ कमांड का स्पष्टीकरण है। आपके उपयोग के मामले के आधार पर कुछ चीजों को बदलना होगा।

svn status

मुझे सभी फाइलों की एक सूची मिली है। वे सभी उन स्टेटस कैरेक्टर (?;; ए, आदि) से शुरुआत करेंगे। प्रत्येक अपनी-अपनी तर्ज पर है

grep -v excluding

मैं सूची को फ़िल्टर करने के लिए grep का उपयोग करता हूं। इसे या तो सामान्य रूप से (शामिल करने के लिए) या -v ध्वज के साथ (बाहर करने के लिए) इस्तेमाल किया जा सकता है। इस मामले में, इसे बाहर करने के लिए इस्तेमाल किया जा रहा है, एक वाक्यांश "बहिष्कृत" होने के नाते जो बाहर रखा जाएगा।

sed 's/^. */"/g; s/$/"/g'

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

tr '\n' ' '

Tr का उपयोग करते हुए, मैं सभी newlines को रिक्त स्थान के साथ प्रतिस्थापित करता हूं। अब मेरी फ़ाइलों की पूरी सूची एक पंक्ति में है।

xargs svn commit -m "My Message"

अंत में, मैं संदेश के साथ अपनी प्रतिबद्ध कमांड निष्पादित करने के लिए xargs का उपयोग करता हूं। यह प्रतिबद्ध है, और अंतिम तर्क के रूप में मेरी उद्धृत फ़ाइल सूची को छोड़ देता है।

नतीजा यह है कि सब कुछ अंततः उस तरह से काम करता है जैसा मैं चाहता हूं। मुझे अब भी इन गोड्डामन हुप्स के माध्यम से कूदने के लिए मजबूर करने के लिए नफरत है, लेकिन मैं इस के साथ रह सकता हूं। मेरा अनुमान।


0

जैसा कि मैं ठीक उसी मुद्दे का सामना कर रहा था, और मेरी गुगली मुझे कुछ भी नहीं दे रही थी, मुझे लगता है कि मुझे एक वर्कअराउंड मिला। यहाँ मैंने क्या किया, यह मेरे लिए काम करने लगता है, लेकिन जैसा कि मैं एसवीएन के एक पुराने संस्करण के साथ फंस गया हूं (<1.5, क्योंकि इसके पास - प्रशासन-स्थानीय विकल्प नहीं है) और मैं इसका कोई विशेषज्ञ नहीं हूं , मुझे यकीन नहीं हो रहा है कि यह एक सार्वभौमिक समाधान है। अगर यह आपके लिए भी काम करता है, तो कृपया मुझे बताएं!

मैं एक Prestashop स्थापित कर रहा था जो मुझे SVN से मिला था, क्योंकि अन्य लोगों ने पहले ही इस पर काम करना शुरू कर दिया था। चूंकि DB सेटिंग्स दूसरे सर्वर के लिए की गई थीं, इसलिए मैंने उन्हें कुछ फाइल में / config फ़ोल्डर में बदल दिया। जैसा कि इस फ़ोल्डर को पहले ही संस्करणित किया गया था, इसे svn में सेट करना: अनदेखा करना मेरे स्थानीय संशोधनों को इस पर प्रतिबद्ध होने से नहीं रोक सकेगा। यहाँ मैंने क्या किया है:

cp config ../cfg_bkp              # copy the files out of the repo
svn rm config                     # delete files both from svn and "physically"
svn propset svn:ignore "config" . # as the files no longer exists, I can add my ignore rule and then...
mv ../cfg_bkp config              # ...bring'em back
svn revert --recursive config     # make svn forget any existing status for the files (they won't be up for deletion anymore)

अब मैं svn add --force चला सकता हूं। मेरे कॉन्फ़िगरेशन को जोड़े बिना रेपो रूट पर, भले ही यह रेपो के संस्करण से मेल नहीं खा रहा हो (मुझे लगता है कि मुझे यह सब फिर से करना होगा अगर मैंने इसे एक बार फिर से संशोधित किया, तो परीक्षण नहीं किया)। मैं अपनी फ़ाइलों को अधिलेखित किए बिना या कोई त्रुटि प्राप्त किए बिना भी अपडेट कर सकता हूं।


0

एक समाधान जो निर्देशिका गुणों में परिवर्तन की उपेक्षा नहीं करता है

मैंने इसके आधार पर समाधान का उपयोग करने की कोशिश की changelist, लेकिन मेरे पास इसके साथ कुछ मुद्दे हैं। पहले मेरी रिपॉजिटरी में हज़ारों फाइलें हैं, इसलिए प्रतिबद्ध होने के लिए चैंजिस्ट बहुत बड़ा है, और मेरा svn statusआउटपुट बहुत लंबा हो गया है और उपयोगी होने के लिए पार्स करने की आवश्यकता है। सबसे महत्वपूर्ण यह है कि मैं उन परिवर्तनों को करना चाहता था जो मर्ज से आए थे, जिसका अर्थ है कि उनमें संपत्ति में बदलाव शामिल हैं। चैंजिस्ट करते समय, डायरेक्टरी से जुड़ी svn प्रॉपर्टीज़ कमिट नहीं होती हैं, इसलिए मुझे एक अतिरिक्त कमिटमेंट करना पड़ा:

svn ci --cl work -m "this commits files from the work changelist only"
svn up
svn ci --depth empty DIR . -m "record merge properties"

आपको कई निर्देशिकाओं के लिए ऐसा करना पड़ सकता है (यहां मैं DIRवर्तमान dir के गुणों को रिकॉर्ड करता हूं .), मूल रूप Mसे svn statusकमांड जारी करते समय दूसरे कॉलम में उन लोगों के साथ ।

उपाय

मैंने पैच और इस्तेमाल किया svn patch। छद्म कोड में:

svn diff $IGNORE_FILES > MYPATCH   # get the mods to ignore
svn patch --reverse-diff MYPATCH   # remove the mods
svn ci -m "message"                # check-in files and directory properties
svn patch MYPATCH                  # re-apply the mods

अन्य पोस्टरों की तरह, मैं अनदेखी करने के लिए फ़ाइलों की सूची बनाए रखने के लिए एक स्क्रिप्ट का उपयोग कर रहा हूं:

#! /usr/bin/env bash

finish() {
    svn patch MYPATCH               # re-apply the mods
}
trap finish EXIT

IGNORE_FILES="\
sources/platform/ecmwf-cca-intel-mpi.xml \
runtime/classic/platform/ecmwf-cca.job.tmpl \
runtime/classic/platform/ecmwf-cca-intel.xml"

svn diff $IGNORE_FILES > MYPATCH # get the mods to ignore
svn patch --reverse-diff MYPATCH # remove the mods

svn "$@"

मैं आम तौर पर साथ में इसका इस्तेमाल किया ciऔर revert -R .


-1

svn:ignore आपका जवाब है

उदाहरण:

$ svn propset svn:ignore -F .cvsignore .
property 'svn:ignore' set on '.'

1
ध्यान दें, उपरोक्त उदाहरण से पता चलता है कि आपकी svnignore संपत्ति के इनपुट के रूप में पहले से कॉन्फ़िगर की गई cvsignore फ़ाइल का उपयोग कैसे करें।
बेन हॉफस्टीन

1
नहीं svn: अनदेखी सिर्फ फाइलों को हटाने के लिए है। संस्करण फ़ाइलों के साथ काम न करें
Sérgio

1
और यह भी स्थानीय नहीं है। यह एक संपत्ति परिवर्तन है जो स्वयं द्वारा शुरू किया जाएगा।
एडम बदुरा

-9
svn propset "svn:ignore" "*.xml" .

*.xmlफ़ाइलों की अनदेखी करने के पैटर्न है, आप यहां निर्देशिका नाम का भी उपयोग कर सकते हैं।


3
-1 क्योंकि आप उस फ़ाइल को अनदेखा नहीं कर सकते जो रिपॉजिटरी का हिस्सा है।
ज़ेलुस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.