এসভিএন: কোনও ফাইলকে "প্রতিশ্রুতিবদ্ধ না" হিসাবে চিহ্নিত করার কোনও উপায় আছে?


153

কচ্ছপ এসভিএন এর সাহায্যে, আমি একটি ফাইলকে উপেক্ষা-অন-কমিট চেঞ্জলিস্টে স্থানান্তর করতে পারি, যাতে আমি যখন একটি সম্পূর্ণ ট্রিট করি, তখন সেই ফাইলটিতে পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ না হয়।

এসএনএন কমান্ড-লাইন সরঞ্জামটি ব্যবহার করে এমন কিছু করার কোনও উপায় আছে?

সম্পাদনা: পরামর্শের জন্য ব্যবহার করার জন্য ধন্যবাদ svn:ignore, তবে আমি যা খুঁজছিলাম তা তেমন করে না।

svn:ignoresvn add& এর মতো জিনিসগুলিকে প্রভাবিত করে svn import। এটি এড়াতে ফাইলের নাম ধরণের একটি তালিকা দেয়।

আমার কাছে এমন একটি ফাইল রয়েছে যা ইতিমধ্যে উত্স নিয়ন্ত্রণে রয়েছে, তবে আমি সেই ফাইলটিতে সাময়িক পরিবর্তন করতে চাই যা আমি পরে পুরো উত্স ট্রিতে প্রতিশ্রুতিবদ্ধ হওয়ার পরে প্রতিশ্রুতিবদ্ধ হতে চাই না। আমি আরও অনেক পরিবর্তন করছি এবং আমি আমার মনিটরে একটি নোট আটকে রাখতে বলছিলাম যে আমি বৃক্ষের প্রতিশ্রুতি দেওয়ার আগে সেই ফাইলটি ফিরিয়ে আনব, তবে এসএনএন যদি স্বয়ংক্রিয়ভাবে সেই ফাইলটি এড়িয়ে যেতে পারে তবে ভাল লাগবে।


1
ব্যক্তিগত শাখা এবং সুইচ স্থিতি ব্যবহার করার একটি উপায় আছে। : [1] [1] [আমার অন্যান্য পোস্ট এই বিষয় উপর দেখুন।] Stackoverflow.com/questions/862950/...
ptitpion

উত্তর:


120

ফেব্রুয়ারী ২০১ / / সংস্করণ ১.৯ হিসাবে সাবভার্সনের একটি অন্তর্নির্মিত "কমিট কমিট" / "কমিট অন উপেক্ষা করুন" বৈশিষ্ট্য নেই। এই উত্তরটি একটি অ-আদর্শ কমান্ড-লাইন কর্মক্ষেত্র

ওপি যেমন বলেছে, টরটোইজএসভিএন-এর একটি অন্তর্নির্মিত চেঞ্জলিস্ট রয়েছে, "অবহেলা-অন-কমিট", যা স্বয়ংক্রিয়ভাবে কমিট থেকে বাদ পড়ে। কম্যান্ড-লাইন ক্লায়েন্ট এই তাই আপনি (আদেশ সহকারে সঙ্গে) এই একই আচরণ সম্পন্ন করার জন্য একাধিক তালিকা পরিবর্তনগুলি ব্যবহার করতে হবে না, :

  • কাজের জন্য একটি আপনি প্রতিশ্রুতিবদ্ধ করতে চান [কাজ]
  • আপনি যে বিষয়গুলিকে অগ্রাহ্য করতে চান সেগুলির জন্য একটি

টর্টোইজএসভিএন-এর নজির যেহেতু আমি যে ফাইলগুলি প্রতিশ্রুতিবদ্ধ করতে চাই না তার জন্য আমার উদাহরণগুলিতে "উপেক্ষা-অন-প্রতিশ্রুতি" ব্যবহার করি। আমি যে ফাইলগুলি করি তার জন্য আমি "কাজ" ব্যবহার করব, তবে আপনি যে কোনও নাম বেছে নিতে পারেন।

প্রথমে সমস্ত ফাইলকে "ওয়ার্ক" নামের একটি চেঞ্জলিস্টে যুক্ত করুন। এটি অবশ্যই আপনার ওয়ার্কিং কপির মূল থেকে চালানো উচিত:

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.

একটি বিকল্প হ'ল আপনি 'কাজ' চেঞ্জলিস্টে প্রতিশ্রুতিবদ্ধ প্রতিটি ফাইল যুক্ত করা এবং এমনকি একটি উপেক্ষা তালিকা বজায় রাখবেন না, তবে এটিও অনেক কাজ। সত্যই, একমাত্র সহজ, আদর্শ সমাধান যদি / যখন এটি এসভিএন নিজেই প্রয়োগ করা হয়। ভবিষ্যতে এই পরিবর্তন ঘটে যদি সাবভার্সন ইস্যু ট্র্যাকার, এসভিএন-2858 এ সম্পর্কে এটি সম্পর্কে দীর্ঘকালীন সমস্যা রয়েছে ।


1
আপনি যে কমান্ডটি উল্লেখ করেছেন তার সাথে আমি দুটি ফাইল যুক্ত করেছি: $svn st --- Changelist 'ignore-on-commit': M database.php M config.php এবং এখনও, সেগুলি কমিটের জন্য রেপোতে প্রেরণ করা হয়েছে। কোন ধারণা আমি কি ভুল করেছি?
আটটিলা ফুলপ

7
চেঞ্জলিস্টে 'অ্যাড-অন-কমিট' ফাইল যুক্ত করা ফাইলকে প্রতিশ্রুতিবদ্ধ হওয়া থেকে বিরত রাখে না। কচ্ছপ এসভিএন (একটি উইন্ডোজ জিইউআই ক্লায়েন্ট) "অবহেলা-অন-কমিট" এর প্রতি শ্রদ্ধা জানিয়েছে তবে কমান্ড লাইন এসএনএন তা করে না। আমার আসল উত্তরে আমার একটাই পরামর্শ ছিল আপনি যে ফাইলগুলি পরিবর্তন তালিকাতে প্রতিশ্রুতিবদ্ধ করতে চান তা যোগ করুন এবং এটি প্রতিশ্রুতিবদ্ধ করতে বলুন
জোশুয়া ম্যাককিনন

7
অবহেলা-অন-কমিট অবশ্যই একটি কচ্ছপ সংরক্ষিত তালিকা। এটি যা করছে তা হ'ল ডিফল্টভাবে জিইউআইতে আইটেমগুলি পরীক্ষা করা আটকাচ্ছে, সুতরাং এটি একটি কচ্ছপ জিইউআই নির্দিষ্ট বৈশিষ্ট্য। আপনি জিইআইআই ব্যবহার করেন তবে তালিকাতে যুক্ত করতে আপনাকে কমান্ড লাইন ব্যবহার করার দরকার নেই। প্রতিশ্রুতিবদ্ধ তালিকা আইটেমগুলিতে কেবল প্রসঙ্গ মেনু এবং নীচে আপনি এগুলিকে একটি পরিবর্তন তালিকায় স্থানান্তর করতে পারেন এবং অন-অন-কমিট ইতিমধ্যে সংজ্ঞায়িত।
কচ্ছপসাইভন.নেট

এটি জ্যাক করেনি এটা সবকিছু প্রতিশ্রুতিবদ্ধ।
আহনিবিজ্যাকড

কাজ করছে না, জিওআই নয়, প্রশ্নটি বিশেষত একটি কমান্ড লাইন সমাধান সম্পর্কে জিজ্ঞাসা করেছিল।
রিভ

26

আমি ধারাবাহিকভাবে নিজেকেও এই পরিস্থিতিতে খুঁজে পেয়েছি: এবং চেঞ্জলিস্টগুলি আমার পক্ষে কাজ করে না - আমি যে ফাইলগুলি করতে চাই না তার সংক্ষিপ্ত তালিকা তৈরি করতে চাই, বরং যে ফাইলগুলি আমি চাই তার বিশাল তালিকা বজায় রাখতে পারি সমর্পণ করতে!

আমি লিনাক্স কমান্ড-লাইনে কাজ করি: সুতরাং আমার সমাধানটি হ'ল স্ক্রিপ্ট / ইউএসআর / বিন / এসএনএন (হ্যাঁ, দুটি 'টি সহ!) তৈরি করুন:

#! /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;

স্পষ্টতই, এটি আমার পরিস্থিতি অনুসারে তৈরি - তবে কেবল আপনার ডিয়ার সেটআপের জন্য ডিআইআর এবং আইজিএনওর_এফিলস পরিবর্তন করুন। স্ক্রিপ্টটি এক্সিকিউটেবলের সাথে পরিবর্তনের জন্য স্মরণকারী:

sudo chmod +x /usr/bin/svnn

..তখন আপনি IGNORE_FILES তালিকার ফাইলগুলিতে স্থানীয় পরিবর্তনগুলি পরীক্ষা করার আশঙ্কা ছাড়াই সাবভারশন চালানোর জন্য "এসএনএন" এর পরিবর্তে "এসএনএন" ব্যবহার করেন। আশা করি এটা কাজে লাগবে!


অবশেষে, এই উত্তরটি আসলে সঠিক। আপনাকে কিছু সরঞ্জাম লিখতে হবে। এটি আসলে অসম্পূর্ণ, কারণ আমি চাই একটি গতিশীল বিকল্প, যেমন svnn ignore configs/*- ওয়াইল্ডকার্ড, এবং ঘন্টা এবং সিঁড়ি সহ have আমার মনে হয় আমি নিজেই এমন কিছু লিখি, এবং তারপর এখানে ফিরে আসি!
টমাসজ গ্যান্ডর

এটা অসাধারণ! আরও ভাল, এসএনএন -> এসএনএন এর জন্য .bashrc এ একটি উপকরণ তৈরি করুন। আরও ভাল, কমান্ডের ভিতরে ফাইলগুলি উপেক্ষা করার পরিবর্তে এটি গিটের মতো আচরণ করতে পারে, এটি ফোল্ডারের অভ্যন্তরে একটি .ignore ফাইল চেক করবে এবং প্যাটার্নের সাথে মেলে এমন প্রতিটি ফাইল উপেক্ষা করবে।
তারেক

টাইপিং পুনরায় শেখার পরিবর্তে, svnnএটিকে কল করে বিবেচনা করুন svnএবং এই স্ক্রিপ্টটিকে এমন কিছুতে স্থাপন করা উচিত যা আপনার পাঠাথের শুরুতে হতে পারে, যেমন ${HOME}/bin। স্ক্রিপ্ট নিজেই থেকে, আপনি তারপর কল করবে /usr/bin/svn
জুস্ট করুন

17

আমি বিশ্বাস করি না যে ভাণ্ডারটিতে কোনও ফাইল উপেক্ষা করার উপায় আছে। আমরা প্রায়শই ওয়েবকনফিগ এবং অন্যান্য কনফিগারেশন ফাইলগুলির সাথে এটি চালাই।

নিখুঁত না হলেও, আমি যে সমাধানটি প্রায়শই দেখতে পাই এবং ব্যবহার করি তা হ'ল। ডিফল্ট ফাইল এবং স্থানীয় অনুলিপি তৈরির জন্য একটি ন্যান্ট টাস্ক।

উদাহরণস্বরূপ, রেপোতে একটি ফাইল বলা হয় web.config.defaultযার ডিফল্ট মান থাকে। তারপরে একটি ন্যান্ট টাস্ক তৈরি করুন যা এতে সমস্ত web.config.defaultফাইলের নাম পরিবর্তন web.configকরে স্থানীয় মান অনুসারে কাস্টমাইজ করা যায়। একটি নতুন ওয়ার্কিং কপি পুনরুদ্ধার করা বা বিল্ড চালানোর সময় এই টাস্কটি বলা উচিত।

আপনার web.configতৈরি করা ফাইলটিকেও এড়িয়ে চলতে হবে যাতে এটি স্টোরের প্রতি প্রতিশ্রুতিবদ্ধ না হয়।


8

চেঞ্জলিস্টগুলি পরীক্ষা করে দেখুন , যা আপনাকে পরিবর্তিত ফাইলগুলি প্রতিশ্রুতি দিতে চায় না এমন ফিল্টারগুলি আউট করার জন্য একটি বিকল্প সরবরাহ করতে পারে। আপনি যদি না বলছেন তবে এসভিএন কোনও ফাইল স্বয়ংক্রিয়ভাবে এড়িয়ে যাবে না - এবং আপনি যেভাবে বলবেন যে এই ফাইলটি অন্য ফাইলগুলির থেকে কিছুটা আলাদা সেটিকে একটি পরিবর্তন তালিকায় রাখা উচিত to

এটির জন্য আপনার আরও কাজ প্রয়োজন, এবং আপনি কেবলমাত্র আপনার ওয়ার্কিং কপির পরিবর্তিত তালিকাটি প্রয়োগ করতে পারেন (স্পষ্টতই, বিশৃঙ্খলার কল্পনা করুন যে আপনি যদি কোনও পুনর্বিবেচনার ক্ষেত্রে 'কখনই আপডেট করবেন না' সম্পত্তি প্রয়োগ করতে পারতেন তবে তা অনুধাবন করতে পারে!)!


1
তবে আমরা ঠিক তাই চাই উদাহরণস্বরূপ, একটি উত্স ফাইল যা আপনার সিস্টেম ডিফল্টের পরিবর্তে একটি ডিফল্ট ইউজারআইডি = আপনারআইডি সেট করতে হবে।
orbfish

4

আমি এই থ্রেডে এসেছি মাত্র কিছু ফাইলের "পারমাণবিক" কমিট করার উপায় খুঁজছি এবং প্রতিশ্রুতিবদ্ধ কিছু ফাইল উপেক্ষা করার পরিবর্তে আমি অন্য পথে চলেছি এবং কেবল আমার যে ফাইলগুলি চাচ্ছিলাম তা দিয়েছিলাম:

svn ci filename1 filename2

হতে পারে, এটি কাউকে সাহায্য করবে।


আপনার উত্তরটি এই থ্রেডে কেবলমাত্র একটি পর্যাপ্ত পরামর্শ। svn ciসহজভাবে উপনাম svn commit। কমিট কমান্ড নির্দিষ্ট ফাইলগুলির নির্দিষ্ট প্রতিশ্রুতিবদ্ধ করতে অনুমতি দেয়
অক্সফেন

3

বন্ধুরা আমি সবেমাত্র একটি সমাধান পেয়েছি। টার্টোইজএসভিএন আমাদের যেভাবে চায় সেভাবে কাজ করে, আমি এটি লিনাক্সের অধীনে ইনস্টল করার চেষ্টা করেছি - যার অর্থ ওয়ানে চলছে। আশ্চর্যজনকভাবে এটি কাজ করে! আপনাকে যা করতে হবে তা হ'ল:

  1. আপনি যে ফাইলগুলি চালিয়ে যেতে চান তা যুক্ত করে যোগ করুন: "এসএনএন চেঞ্জলিস্ট '' উপেক্ষা করুন-অন-প্রতিশ্রুতি '"।
  2. প্রতিশ্রুতি দেওয়ার জন্য কচ্ছপ এসভিএন ব্যবহার করুন: "~ / .ওয়াইন / ড্রাইভ_সি / প্রোগ্রাম \ ফাইল / কচ্ছপ এসভিএন / বিন / কচ্ছপপ্রস.ক্সি / আদেশ: কমিট / পাথ: '
  3. বাদ ফাইল হতে হবে অবারিত , ডিফল্ট অনুসারে কমিট জন্য যখন অন্যান্য পরিবর্তিত ফাইল চেক করা হবে। এটি উইন্ডোজের অধীনে ঠিক একই রকম। উপভোগ করুন!

(সিএলআই দ্বারা ফাইলগুলি বাদ দেওয়ার কারণ হ'ল এটি করার জন্য মেনু এন্ট্রি পাওয়া যায়নি, কেন তা নিশ্চিত নয় Any কোনও উপায়, এটি দুর্দান্ত কাজ করে!)


2

দ্বন্দ্বযুক্ত ফাইলগুলি প্রতিশ্রুতিবদ্ধ হওয়ার অনুমতি নেই। আপনার ব্যক্তিগত পরিবর্তনগুলি সংগ্রহস্থল থেকে দূরে রাখতে আপনি এটির সুবিধা নিতে পারেন। এটি সংখ্যক ফাইলের সাথে সবচেয়ে ভাল কাজ করে।

এর জন্য দ্বন্দ্ব পেতে a-file, আপনার কার্যকরী অনুলিপি (ডাব্লুসি) a-fileএর সংগ্রহস্থল থেকে আপ টু ডেট নেই a-fileএবং আপনার ডব্লিউসিতে যে পরিবর্তনগুলি একই অবস্থানে ছিল সেগুলি সংগ্রহস্থলের পরিবর্তনের (যে পরিবর্তনগুলি আপনি আপডেট করেননি) এখনও)। যদি আপনি উপরের শর্তগুলির জন্য অপেক্ষা না করতে চান তবে আপনি এটির জন্য একটি দ্বন্দ্ব তৈরি করতে পারেন a-file:
ওয়ার্কিং অনুলিপি 1 (ডাব্লুসি 1) এ, শীর্ষস্থানীয় পাঠ্যের একটি লাইন যুক্ত করুন a-file, যেমন "এখানে বিরোধ করুন" । প্রয়োজনীয় সিনট্যাক্সটি ব্যবহার করুন যাতে আপনি ভান্ডারটি ভাঙ্গেন না। WC1 a-fileথেকে প্রতিশ্রুতিবদ্ধ । ডাব্লুসি 2 তে "আমি একটি সংঘাতa-file চাই " এর মতো শীর্ষের উপরে পাঠ্যের একটি আলাদা লাইন যুক্ত করুন । ডাব্লুসি 2 থেকে আপডেট, এবং এখন একটি ফাইল দ্বন্দ্ব থাকা উচিত।


1

এর পরিবর্তে আমি একটি সহায়ক বাশ স্ক্রিপ্ট লিখব যা svn commitআপনার প্রয়োজনীয় সমস্ত ফাইল এবং আপনার নয় এমন একটিরও চলবে । এইভাবে আপনার আরও অনেক বেশি নিয়ন্ত্রণ রয়েছে।

উদাহরণস্বরূপ, এক লাইনের সাহায্যে, আপনি এক্সটেনশন সহ সমস্ত ফাইল প্রতিশ্রুতিবদ্ধ করতে পারেন .hএবং এতে .cppআপনি যে পরিবর্তন করেছেন (এবং যার ফলে কোনও বিরোধের সৃষ্টি হবে না):

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

[h|cpp]অংশে এক্সটেনশনগুলি পরিবর্তন / যুক্ত করুন । -m ""প্রয়োজনে এর উদ্ধৃতিগুলির মধ্যে একটি লগ বার্তা যুক্ত করুন ।


1

প্রস্তাবিত কিছু ধারণাগুলি এভাবে প্রয়োগ করা যেতে পারে:

উইন্ডোজ পাওয়ার পাওয়ারে

ডিফল্ট list.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

এসভিএন তৈরির জন্য অপেক্ষা করতে করতে আমি ক্লান্ত হয়ে পড়েছিলাম। আমি কচ্ছপ এসভিএন ব্যবহার করে উপেক্ষা-অনিত-প্রতিশ্রুতি দিয়েছিলাম, তবে এটি একটি ব্যবহারকারীর ডায়ালগ বক্সকে পপ আপ করে দেয় যা আপনি কমান্ড লাইন থেকে দমন করতে পারবেন না, এবং যখন আমি আমার বিল্ড স্ক্রিপ্টটি চালাচ্ছি এবং গিয়েছিলাম এবং এক কাপ চা করি, তখন আমি এটি ঘৃণা করি আমি এটি আবিষ্কার করে ফিরে এসেছি এটি ব্যবহারকারীর ইনপুটটির 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

ব্যবহারকারী 88044 এর স্ক্রিপ্ট আপডেট।

ধারণাটি হ'ল ফাইলগুলি করণীয় না করা পরিবর্তন লিস্টে ঠেকানো এবং মন্দ স্ক্রিপ্টটি চালানো।

স্ক্রিপ্টটি করণীয়-না-করা ফাইলগুলি কমান্ডটি থেকে সরিয়ে দেয়: এসএনএন স্থিতি - পরিবর্তন তালিকা 'ডু-না-কমিট'

#! / বিন / বাশ ডিআইআর = "$ (পিডব্লিউডি)"

IGNORE_FILES = "$ (এসএনএন স্ট্যাটাস - চেঞ্জলিস্ট '' করণীয় নয় '| লেজু -ন +3 | গ্রেপ -oE' [^] + $ ')"

আমি G IGNORE_FILES এ; do mv $ DIR / $ i $ DIR / "$ i" _; সম্পন্ন;

এসএনএন "$ @";

আমি G IGNORE_FILES এ; do mv $ DIR / "$ i" _ $ DIR / $ i; সম্পন্ন;

স্ক্রিপ্টটি / usr / bin / svnn (sudo chmod + x / usr / bin / svnn) এ স্থাপন করা হয়েছে

এসএনএএনএন স্ট্যাটাস, এসএনএনএন কমিট ইত্যাদি ...


1

আপনি সরাসরি কচ্ছপ এসভিএন এর সাথে "উপেক্ষা-অনিত" পরিবর্তন তালিকাটি কনফিগার করতে পারেন। অন্য সমস্ত ফাইল সহ অন্য কোনও পরিবর্তন তালিকাটি কনফিগার করার দরকার নেই

1) "এসভিএন কমিট ..." ক্লিক করুন (আমরা প্রতিশ্রুতি করব না, পরিবর্তনের জন্য গ্রাফিকাল মেনু সন্ধানের এক উপায়) 2) তালিকায় আপনি যে ফাইলটি বাদ দিতে চান তার উপর ডান ক্লিক করুন Right 3) মেনু: চেঞ্জলিস্টে সরান> প্রতিশ্রুতি উপেক্ষা করুন

পরের বার আপনি কোনও এসভিএন কমিট করবেন ... ফাইলগুলি তালিকা-শেষে শেষ করা হবে না-অন-প্রতিশ্রুতি বিষয়শ্রেণীতে অন্তর্ভুক্ত।

এর সাথে পরীক্ষিত: কচ্ছপ এসভিএন 1.8.7, বিল্ড 25475 - 64 বিট, 2014/05/05 20:52:12, সাব্ভারশন 1.8.9, -প্রেস করুন


1
ইউপ্রেস, আমি কেবল tjmoore এর মন্তব্যগুলি দেখেছি, ইতোমধ্যে কচ্ছপ
এসভিএন

এটি কি 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

আমি তালিকাটি ফিল্টার করতে গ্রেপ ব্যবহার করি। এটি হয় সাধারণত (অন্তর্ভুক্ত করার জন্য) অথবা -v পতাকা সহ (বাদ দিতে) ব্যবহার করা যেতে পারে। এই ক্ষেত্রে, এটি বাদ দেওয়ার জন্য ব্যবহৃত হচ্ছে, একটি শব্দ বাক্যটি "বাদ দিয়ে" যা বাদ থাকবে being

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

এখন আমি প্রতিটি লাইনের শুরুতে স্থিতি চরিত্র এবং সাদা স্থান সরিয়ে ফেলি এবং তারপরে সেড ব্যবহার করে প্রতিটি লাইন উদ্ধৃত করি। আমার কিছু ফাইলের নামগুলির মধ্যে ফাঁকা স্থান রয়েছে, তাই উদ্ধৃতি দেওয়া হচ্ছে।

tr '\n' ' '

টিআর ব্যবহার করে, আমি সমস্ত নিউলাইনগুলি স্থানগুলির সাথে প্রতিস্থাপন করি। এখন কমিট করার জন্য আমার ফাইলগুলির সম্পূর্ণ তালিকা এক লাইনে।

xargs svn commit -m "My Message"

শেষ অবধি, আমি বার্তাটি দিয়ে আমার কমিট কমান্ড কার্যকর করতে xargs ব্যবহার করি। এটি প্রতিশ্রুতিবদ্ধ এবং আমার উদ্ধৃত ফাইল তালিকাটিকে শেষ যুক্তি হিসাবে ড্রপ করে।

ফলাফলটি হ'ল চূড়ান্তভাবে সবকিছু যেভাবে আমি এটি করতে চাই সেভাবে কাজ করে। এই গড্ডামন হুপসের মধ্য দিয়ে আমাকে ঝাঁপিয়ে পড়তে বাধ্য করার জন্য আমি এখনও একধরনের ঘৃণাজনক এসএনএন, তবে আমি এটি নিয়ে বাঁচতে পারি। আমি অনুমান করি.


0

আমি ঠিক একই সমস্যার মুখোমুখি হয়েছি এবং আমার গুগল আমাকে কিছুই দেয় নি বলে আমি মনে করি যে আমি একটি কার্যনির্বাহ পেয়েছি। এখানে আমি যা করেছি তা এখানে আমার মনে হয়, তবে আমি এসভিএন (<1.5,> - এর - স্থানীয়-স্থানীয় বিকল্প নেই) এর একটি পুরানো সংস্করণে আটকে আছি এবং আমি এর কোনও বিশেষজ্ঞ নই , আমি নিশ্চিত হতে পারি না এটি একটি সর্বজনীন সমাধান। এটি যদি আপনার পক্ষেও কাজ করে তবে দয়া করে আমাকে জানান!

আমি এসভিএন থেকে পেয়েছি এমন একটি প্রেস্টাশপ ইনস্টল নিয়ে কাজ করছি, যেহেতু অন্যান্য লোকেরা ইতিমধ্যে এটিতে কাজ শুরু করেছিল। যেহেতু অন্য সার্ভারের জন্য ডিবি সেটিংস করা হয়েছিল, তাই আমি সেগুলি / কনফিগারেশন ফোল্ডারের কিছু ফাইলে পরিবর্তন করেছি। যেহেতু এই ফোল্ডারটি ইতিমধ্যে ভার্সন করা হয়েছে, এটি এসএনএন-তে সেট করা: উপেক্ষা করা এতে আমার স্থানীয় পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ হতে বাধা দেয় না। আমি যা করেছি তা এখানে:

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)

এখন আমি এসএনএন অ্যাড - ফোর্স চালাতে পারি। আমার কনফিগারেশনটি যুক্ত না করেই রেপো রুটে, এমনকি এটি রেপোর সংস্করণটির সাথেও মেলে না (আমার ধারণা আমি যদি আরও একবার এটি সংশোধন করে, পরীক্ষা না করি তবে আমাকে আবারও এই সমস্ত কিছু ঘটাতে হবে)। আমার ফাইলগুলি ওভাররাইট হওয়া বা কোনও ত্রুটি না পেয়ে আমি আপডেটও করতে পারি।


0

এমন একটি সমাধান যা ডিরেক্টরি বৈশিষ্ট্যের পরিবর্তনগুলিকে অগ্রাহ্য করে না

আমি এর ভিত্তিতে সমাধানটি ব্যবহার করার চেষ্টা করেছি changelist, তবে এটি নিয়ে আমার বেশ কয়েকটি সমস্যা রয়েছে। প্রথমে আমার সংগ্রহস্থলে হাজার হাজার ফাইল রয়েছে, তাই প্রতিশ্রুতিবদ্ধ হওয়া পরিবর্তনটি বিশাল, এবং আমার svn statusআউটপুট দীর্ঘ দীর্ঘ হয়ে গেছে এবং দরকারী হওয়ার জন্য বিশ্লেষণ করা দরকার। সর্বাধিক গুরুত্বপূর্ণ হ'ল আমি একীভূত হওয়া থেকে আসা পরিবর্তনগুলি প্রতিহত করতে চেয়েছিলাম, যার অর্থ তারা সম্পত্তি পরিবর্তনগুলি অন্তর্ভুক্ত করে। পরিবর্তন তালিকা তৈরি করার সময় ডিরেক্টরিতে সংযুক্ত এসএনএন বৈশিষ্ট্যগুলি প্রতিশ্রুতিবদ্ধ হয় না, তাই আমাকে অতিরিক্ত প্রতিশ্রুতিবদ্ধ করতে হয়েছিল:

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বর্তমান ডিরের এবং তার বৈশিষ্ট্যগুলি রেকর্ড করি .) ।Msvn 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
দ্রষ্টব্য, উপরের উদাহরণটি দেখায় যে কীভাবে আপনার এসভিএনগোরোর সম্পত্তিতে ইনপুট হিসাবে পূর্বে কনফিগার করা সিভিসিগনোর ফাইলটি ব্যবহার করতে হয়।
বেন হফস্টিন

1
কোন এসএনএন: উপেক্ষা কেবলমাত্র রূপান্তর ফাইলগুলির জন্য। সংস্করণ ফাইলগুলিতে কাজ dosn't
সের্গিও

1
এবং এটি স্থানীয়ও নয়। এটি একটি সম্পত্তি পরিবর্তন যা নিজেই কমিট হবে।
আদম বদুরা

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

*.xmlফাইল উপেক্ষা করার ধরনে নয়; আপনি এখানে ডিরেক্টরি নাম ব্যবহার করতে পারেন।


3
-1 কারণ আপনি কোনও ভাণ্ডার অংশের এমন একটি ফাইলকে উপেক্ষা করতে পারবেন না।
zellus
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.