স্বয়ংক্রিয়ভাবে সাবভার্সন রূপান্তরিত ফাইলগুলি সরান


111

সংস্করণ নিয়ন্ত্রণে নেই এমন ওয়ার্কিং কপির সমস্ত ফাইল পুনরাবৃত্তভাবে মুছে ফেলার উপায় কি কেউ জানেন? (আমার স্বয়ংক্রিয় বিল্ড ভিএমওয়্যারের আরও নির্ভরযোগ্য ফলাফল পেতে আমার এটি দরকার))


7
আমি একজন এসভিএন ব্যবহারকারী এবং আমি শেষ পর্যন্ত স্যুইচটি করতে চাই কিনা তা দেখতে গিটকে এসভিএন এর সাথে তুলনা করে যাচ্ছি। দেখে মনে হচ্ছে এটি অন্য একটি উদাহরণ হতে পারে যেখানে গিট তার "গিট ক্লিন" কমান্ড দিয়ে জ্বলজ্বল করে।
jpierson

3
বা hg purge --allমার্চুরিয়ালে।
ব্রেন্ডন লং

স্ট্যাকওভারফ্লো ডাব্লিকেট / প্রশ্নগুলি / 2803823/… যেখানে আরও অনেক বেশি দরকারী ক্রিয়াকলাপ রয়েছে।
রাফারি

উত্তর:


26

সম্পাদনা:

সাবভার্সন ১.৯.০ এটি করার জন্য একটি বিকল্প চালু করেছে:

svn cleanup --remove-unversioned

তার আগে, আমি এটি করার জন্য এই অজগর স্ক্রিপ্টটি ব্যবহার করি:

import os
import re

def removeall(path):
    if not os.path.isdir(path):
        os.remove(path)
        return
    files=os.listdir(path)
    for x in files:
        fullpath=os.path.join(path, x)
        if os.path.isfile(fullpath):
            os.remove(fullpath)
        elif os.path.isdir(fullpath):
            removeall(fullpath)
    os.rmdir(path)

unversionedRex = re.compile('^ ?[\?ID] *[1-9 ]*[a-zA-Z]* +(.*)')
for l in  os.popen('svn status --no-ignore -v').readlines():
    match = unversionedRex.match(l)
    if match: removeall(match.group(1))

কাজটি বেশ ভালভাবেই করা যাচ্ছে বলে মনে হচ্ছে।


1
এখনও পাইথন ২. 2..২ নিয়ে আমার জন্য কাজ করে। ওয়ারেন পি: আপনি আরও বিশদ সরবরাহ করতে পারেন?
টমাস ওয়াটনেডাল

আমি মনে করি এটি পাইথন ২.6-এ কেবল একটি সমস্যা ছিল। ২. again-এ আমার জন্য আবার কাজ করে।
ওয়ারেন পি

1
ডাউনভোট: বেলো থেকে অন্য সমাধানটি svn cleanup --remove-unversionedআরও ভাল। এবং এটি সাবভারশন ১.৯.০ এর জন্য (এই সংস্করণটি ২০১৫ সালের)। এটি স্থিতিশীল এবং স্ট্যান্ডার্ড।
tres.14159

138

এটি আমার জন্য কাজ করে:

 svn status | egrep '^\?' | cut -c8- | xargs rm

শেঠ রেনো এর চেয়ে ভাল:

svn status | grep ^\? | cut -c9- | xargs -d \\n rm -r 

এটি ফাইলের নাম অনুসারে রূপান্তরিত ফোল্ডার এবং স্পেস পরিচালনা করে

নীচের মতামত অনুসারে, এটি কেবলমাত্র সেই ফাইলগুলিতে কাজ করে যা উপবিবর্তন (স্ট্যাটাস =?) সম্পর্কে জানে না। বিপর্যয় যা কিছু জানে (উপেক্ষা করা ফাইল / ফোল্ডার সহ) মুছে ফেলা হবে না।

আপনি যদি সাবভারশন ১.৯ বা তার বেশি ব্যবহার করে থাকেন তবে আপনি কেবল --remove-unversioned এবং --remove-અવর্জনীয় বিকল্পগুলির সাথে এসএনএন ক্লিনআপ কমান্ড ব্যবহার করতে পারেন


6
সাইগউইনে উইন্ডোজেও ব্যবহারযোগ্য।
হুনজা

9
আপনি স্থান যুক্ত ফাইলের নামের জন্য xargs -d বিকল্প এবং কোনও যুক্ত ডিরেক্টরিগুলির জন্য r-to -r বিকল্প যুক্ত করার কথা বিবেচনা করতে পারেন: এসএনএন অবস্থা | গ্রেপ ^ \? | কাট -c9- | xargs -d \\ n rm -r
শেঠ রেনো

4
ওএস এক্সে চলিত -d বিকল্পটি নিয়ে আমারও সমস্যা ছিল, আমার বিকল্পটি নিম্নরূপ, যা লাইনব্রেকগুলি নাল চরগুলিতে অনুবাদ করে এবং ফাইলের নামগুলিতে শূন্যস্থান পরিচালনা করতে xargs -0 বিকল্পটি ব্যবহার করে: এসএনএন স্থিতি | গ্রেপ ^ \? | কাট -c9- | tr '\ n' '\ 0' | xargs -0 rm
ব্রায়ান ওয়েবস্টার

3
যদি আপনি অন্য আদেশের আউটপুটে অক্ষরের সঠিক সংখ্যার উপর নির্ভর করে এমন কমান্ডগুলি সম্পর্কে ভ্রান্ত হন:svn status | grep "^?" | awk '{print $2}' | xargs -d \\n rm -r
মাইকেল শ্লোটকে-লেকম্পার

3
@ পাভেল xargs দেখুন - না-রান-যদি-খালি বিকল্প
কেন

71

স্বয়ংক্রিয় বিল্ডের জন্য না হলেও একই কাজটি করতে গিয়ে আমি এই পৃষ্ঠাটি পেরিয়ে এসেছি।

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

যদিও এই নির্দিষ্ট প্রশ্নের জন্য সম্ভবত এটি প্রযোজ্য নয় (যেমন একটি স্বয়ংক্রিয় বিল্ডের প্রসঙ্গে), আমি ভেবেছিলাম এটি অন্যদের একই জিনিসটি করার জন্য সহায়ক হতে পারে।


গ্রেট! এক্সপিতে এটি কেবলমাত্র তালিকার ভিউতে (এক্সপ্লোরারের ডান দিকে) কাজ করে গাছের ভিউতে (বাম দিকে)।
ক্রিস্টোফার ওয়েজব্যাক

কল্পনাপ্রসূত, কেবল এটি পুনর্ব্যবহার বিনের জন্য প্রেরণ করুন, সরাসরি মুছে ফেলা ভাল লাগবে। ঠিক যেটা আমার দরকার ছিল.
ডিন টমাস

আপনি এটি কমান্ড লাইনে কচ্ছপ এসভিএন এর টরটোইসপ্রোক.এক্সে সহ স্বয়ংক্রিয় করতে পারেন: নীচে আমার উত্তরে বিশদ।
stevek_mcc

19

সাবগ্রেশন -সরঞ্জাম প্যাকেজে সাইগউইনে উপস্থিত ।
বোবোগোগো

এবং উবুন্টুতে, একই প্যাকেজে: সাবভারশন-টুলস
টিম

এটি নেস্টেড ভাণ্ডারগুলিও সরিয়ে দেয়।
সার্জ রোগাচ

9

আপনি যদি উইন্ডোজ কমান্ড লাইনে থাকেন,

for /f "tokens=2*" %i in ('svn status ^| find "?"') do del %i

উন্নত সংস্করণ:

for /f "usebackq tokens=2*" %i in (`svn status ^| findstr /r "^\?"`) do svn delete --force "%i %j"

আপনি যদি এটি ব্যাচ ফাইলে ব্যবহার করেন তবে আপনার দ্বিগুণ করতে হবে %:

for /f "usebackq tokens=2*" %%i in (`svn status ^| findstr /r "^\?"`) do svn delete --force "%%i %%j"

1
এই ধরনের আমার জন্য কাজ করে। যদিও কিছু বিপরীতমুখী ফোল্ডার দমিয়েছে বলে মনে হচ্ছে।
jpierson

7

আমি এটি আমার উইন্ডোজ পাওয়ারশেল প্রোফাইলে যুক্ত করেছি

function svnclean {
    svn status | foreach { if($_.StartsWith("?")) { Remove-Item $_.substring(8) -Verbose } }
}

2
পুনঃটুইট করুন হ্যা আমরা করি. কাটা রুটি থেকে এটি সবচেয়ে বড় জিনিস নয়, তবে এটি ব্যাচকে মারধর করে। আমি বলব এটি কমপক্ষে ব্যাশের মতো দরকারী, সম্ভবত আপনি কিছুটা বেশি ন্যাশনাল যেহেতু আপনি নেট নেট এসেম্বলিতে টানতে পারেন।
jpmc26

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

1
আপনি যোগ করতে চান করতে পারেন --no-ignoreকরতে svn statusএবং -RecurseকরতেRemove-Item
কেভিন স্মিথ

5

লিনাক্স কমান্ড লাইন:

svn status --no-ignore | egrep '^[?I]' | cut -c9- | xargs -d \\n rm -r

বা, যদি আপনার কিছু ফাইল রুটের মালিকানাধীন থাকে:

svn status --no-ignore | egrep '^[?I]' | cut -c9- | sudo xargs -d \\n rm -r

এটি কেনের উত্তরের ভিত্তিতে। (কেনের উত্তর এড়িয়ে যাওয়া ফাইলগুলিকে উপেক্ষা করে; আমার উত্তর সেগুলি মুছে দেয়)


5

এটি কেবল ইউনিক্স-শেলের সাথে এটি করুন:

rm -rf `svn st . | grep "^?" | cut -f2-9 -d' '`

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

4

আপনি কি কেবল নতুন স্থানে রফতানি করতে এবং সেখান থেকে তৈরি করতে পারবেন না?


1
একটি স্বয়ংক্রিয় বিল্ডের জন্য আমি একটি পরিষ্কার রফতানি চাই।
ছ।

1
আদর্শভাবে, আপনি এটি করবেন তবে আপনার চেকআউটটি খুব বড় হলে এটি সমস্যাযুক্ত। সম্ভবত ওপি জিজ্ঞাসা করার কারণ: বিল্ডটি সংক্ষিপ্ত করতে।
jpmc26

4

যদি আপনার পথে কচ্ছপ এসভিএন থাকে এবং আপনি সঠিক ডিরেক্টরিতে থাকেন:

TortoiseProc.exe /command:cleanup /path:"%CD%" /delunversioned /delignored /nodlg /noui

বিকল্পগুলি এর জন্য কচ্ছপ এসভিএন সহায়তাতে বর্ণিত হয়েছে /command:cleanup:

ফলাফল ডায়ালগটি পপআপ করা থেকে ক্লিনআপ শেষ হয়ে যাওয়া বা ত্রুটির বার্তা দেখানো থেকে বিরত রাখতে / ব্যবহার করুন ou / noprogressui অগ্রগতি কথোপকথনটি অক্ষম করে। / নোডলজি ক্লিনআপ ডায়ালগটি প্রদর্শন করা অক্ষম করে যেখানে ব্যবহারকারী ক্লিনআপে ঠিক কী করা উচিত তা চয়ন করতে পারেন। উপলভ্য ক্রিয়াগুলি স্ট্যাটাস ক্লিনআপের জন্য বিকল্পগুলি / ক্লিনআপ, / রিভার্ট, / বিভ্রান্তিকর, / বিভক্ত, / রিফ্রেশশেল এবং / এক্সটার্নালগুলির সাথে নির্দিষ্ট করা যেতে পারে can


4

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

বিশদগুলির জন্য এই পৃষ্ঠার নীচের অংশটি দেখুন বা নীচের স্ক্রিন শটটি যা সবুজ তারাগুলির সাথে বর্ধিত বৈশিষ্ট্যগুলিকে হাইলাইট করে এবং হলুদ আয়তক্ষেত্রের সাথে আকর্ষণীয় এক ...

এসভিএন প্রসারিত প্রসঙ্গ মেনু বনাম মান মেনু



3

টমাস ওয়াটনেডস পাইথন স্ক্রিপ্টের আমার সি # রূপান্তর:

Console.WriteLine("SVN cleaning directory {0}", directory);

Directory.SetCurrentDirectory(directory);

var psi = new ProcessStartInfo("svn.exe", "status --non-interactive");
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.WorkingDirectory = directory;

using (var process = Process.Start(psi))
{
    string line = process.StandardOutput.ReadLine();
    while (line != null)
    {
        if (line.Length > 7)
        {
            if (line[0] == '?')
            {
                string relativePath = line.Substring(7);
                Console.WriteLine(relativePath);

                string path = Path.Combine(directory, relativePath);
                if (Directory.Exists(path))
                {
                    Directory.Delete(path, true);
                }
                else if (File.Exists(path))
                {
                    File.Delete(path);
                }
            }
        }
        line = process.StandardOutput.ReadLine();
    }
}

আমি বরং পরিবর্তিত ফাইলগুলি স্থানান্তরিত করব, যদি আপনার পরে অন্য কোথাও প্রয়োজন হয়।
leppie

অবশ্যই একটি ডেভলপমেন্ট মেশিনে - তবে বিল্ড ভিএমওয়্যারটিতে, এটির কোনও কারণ নেই যে এটির উপর কেউ লগ ইন করে এবং ফাইল তৈরি করে না।
স্টিফান শাল্টজ

ধন্যবাদ, আমি এটি নির্মাণের পূর্বে আমার উত্স দির পরিষ্কার করতে ক্রুসেকট্রোলটিতে আমার এমএস বিল্ড লিপির অংশ হিসাবে ব্যবহার করেছি
গ্রেগম্যাক

আপনার কোডের উপর ভিত্তি করে শুরু হয়েছে এবং আরও কিছুটা
টম মেফিল্ড

3
svn st --no-ignore  | grep '^[?I]' | sed 's/^[?I]  *//' | xargs -r -d '\n' rm -r

সাবভার্সন নিয়ন্ত্রণে নয় এমন সমস্ত ফাইল মুছতে এটি ইউনিক্স শেল কমান্ড।

মন্তব্য:

  • stমধ্যে svn stএকটি বিল্ড-ইন ওরফে হয় status, অর্থাত্ কমান্ড সমতূল্যsvn status
  • --no-ignoreস্ট্যাটাস আউটপুটে অ-সংগ্রহস্থলগুলির ফাইলও অন্তর্ভুক্ত থাকে, অন্যথায় .cvsignoreইত্যাদি ইত্যাদির মাধ্যমে উপেক্ষা করা হয় - যেহেতু লক্ষ্যটি হ'ল বিল্ডগুলির জন্য একটি পরিষ্কার প্রারম্ভিক বিন্দু থাকা এই সুইচটি আবশ্যক
  • grepবৈধরূপে প্রতিষ্ঠিত সরকারকে উত্খাত করার জন্য ফিল্টার যেমন যে আউটপুট শুধুমাত্র অজানা ফাইল ফেলে রাখা হয় - লাইন থেকে শুরু করে ?যে ছাড়া উপেক্ষা করা হবে বৈধরূপে প্রতিষ্ঠিত সরকারকে উত্খাত তালিকা ফাইল অজানা --no-ignoreবিকল্প
  • ফাইল নাম পর্যন্ত উপসর্গ মাধ্যমে সরানো হয় sed
  • xargsকমান্ড মাধ্যমে নির্দেশ করা হয় -rনির্বাহ না rm, যখন যুক্তি তালিকা খালি হবে
  • -d '\n'বিকল্প বলে xargsযেমন বিভেদক যেমন কমান্ড এছাড়াও ব্যবধান সহ ফাইলের নামের জন্য কাজ করে একটি newline ব্যবহার করতে
  • rm -r সম্পূর্ণ ডিরেক্টরিগুলি (যেগুলি সংগ্রহস্থলের অংশ নয়) ব্যবহারের ক্ষেত্রে অপসারণ করা দরকার

2

অতিরিক্ত নির্ভরতা ব্যতীত আমি উপরের কোনওটি কাজ করতে পারিনি আমি উইন 32 এ আমার স্বয়ংক্রিয় বিল্ড সিস্টেমে যুক্ত করতে চাই না। সুতরাং আমি নিম্নলিখিত পিঁপড়া কমান্ডগুলি একসাথে রেখেছি - নোট করুন এগুলির জন্য পিঁপড়া-অবদানের জেআর ইনস্টল করা দরকার (আমি পিছু পিছু 1.7.0 সহ সর্বশেষতম সংস্করণ 1.0b3 ব্যবহার করছি)।

নোট করুন এটি সতর্কতা ছাড়াই সমস্ত উল্টানো ফাইল মুছে ফেলে files

  <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
  <taskdef name="for" classname="net.sf.antcontrib.logic.ForTask" />

  <macrodef name="svnExecToProperty">
    <attribute name="params" />
    <attribute name="outputProperty" />
    <sequential>
      <echo message="Executing Subversion command:" />
      <echo message="  svn @{params}" />
      <exec executable="cmd.exe" failonerror="true"
            outputproperty="@{outputProperty}">
        <arg line="/c svn @{params}" />
      </exec>
    </sequential>
  </macrodef>

  <!-- Deletes all unversioned files without warning from the 
       basedir and all subfolders -->
  <target name="!deleteAllUnversionedFiles">
    <svnExecToProperty params="status &quot;${basedir}&quot;" 
                       outputProperty="status" />
    <echo message="Deleting any unversioned files:" />
    <for list="${status}" param="p" delimiter="&#x0a;" trim="true">
      <sequential>
        <if>
          <matches pattern="\?\s+.*" string="@{p}" />
          <then>
            <propertyregex property="f" override="true" input="@{p}" 
                           regexp="\?\s+(.*)" select="\1" />
            <delete file="${f}" failonerror="true" />
          </then>
        </if>
      </sequential>
    </for>
    <echo message="Done." />
  </target>

ভিন্ন ফোল্ডারের জন্য, ${basedir}রেফারেন্সটি পরিবর্তন করুন ।


1
দ্রষ্টব্য: কেবল রূপান্তরিত ফাইলগুলি মুছুন; খালি রূপান্তরিত ফোল্ডারগুলি সরায় না।

2
svn status --no-ignore | awk '/^[I\?]/ {system("echo rm -r " $2)}'

আপনি কী করতে চান তা নিশ্চিত হলে প্রতিধ্বনিটি সরান।


1
এটি xargs ভিত্তিক উত্তরের চেয়ে নিকৃষ্ট কারণ কারণ ফাইলগুলি মোছার জন্য এন /bin/shএবং এন rmপ্রক্রিয়াগুলি কাঁটাচামচ রয়েছে।
ম্যাক্সচলেপজিগ

একমত। Xargs তথ্যের জন্য ধন্যবাদ।
আরিয়া


1

পাশাপাশি অন্য একটি বিকল্প অবদান রাখতে পারে

svn status | awk '{if($2 !~ /(config|\.ini)/ && !system("test -e \"" $2 "\"")) {print $2; system("rm -Rf \"" $2 "\"");}}'

/(Confignav.ini)/ আমার নিজের উদ্দেশ্যে।

এবং এসএনএন কমান্ডে --no-অগ্রাহ্য করা ভাল ধারণা হতে পারে



1

খাঁটি উইন্ডোজ সেমিডি / ব্যাট সমাধান:

@echo off

svn cleanup .
svn revert -R .
For /f "tokens=1,2" %%A in ('svn status --no-ignore') Do (
     If [%%A]==[?] ( Call :UniDelete %%B
     ) Else If [%%A]==[I] Call :UniDelete %%B
   )
svn update .
goto :eof

:UniDelete delete file/dir
if "%1"=="%~nx0" goto :eof
IF EXIST "%1\*" ( 
    RD /S /Q "%1"
) Else (
    If EXIST "%1" DEL /S /F /Q "%1"
)
goto :eof

আসলে এই স্ক্রিপ্টটি আমার ফাইলগুলি মোছেনি। এটিতে ফাঁকা থাকার কারণে হতে পারে। @ সুকেশনাবিয়ারের এক-লাইন উত্তরটি কাজ করেছে।
ক্রিশ্চিয়ান ওয়েস্টারবিক

1

আমি এই উত্তরটি থেকে শেঠ রেনোর সংস্করণ চেষ্টা করেছি কিন্তু এটি আমার পক্ষে কার্যকর হয়নি। আমার কাছে ফাইলের নামের আগে 8 টি অক্ষর ছিল, 9 টি ব্যবহৃত হয়নি ।cut -c9-

সুতরাং এটির sedপরিবর্তে এটি আমার সংস্করণ cut:

svn status | grep ^\? | sed -e 's/\?\s*//g' | xargs -d \\n rm -r

1

আপনি যদি পাওয়ারশেলের সাথে শীতল হন:

svn status --no-ignore | ?{$_.SubString(0,1).Equals("?")} | foreach { remove-item -Path (join-Path .\ $_.Replace("?","").Trim()) -WhatIf }

কমান্ডটি আসলে মুছে ফেলতে সম্পাদনা করতে -WhatIf পতাকাটি বের করুন। তা না হলে এটা শুধু আউটপুট কি হবে হবে যদি -WhatIf ছাড়াই চালানো না।


1

আমি এটিকে টমাস ওয়াটনেডলের উত্তরের মন্তব্য হিসাবে যুক্ত করব , তবে এখনও পারছি না।

এটির সাথে একটি ছোটখাটো সমস্যা (যা উইন্ডোজকে প্রভাবিত করবে না) এটি কেবল ফাইল বা ডিরেক্টরি অনুসন্ধান করে। ইউনিক্সের মতো সিস্টেমে যেখানে প্রতীকী লিঙ্ক উপস্থিত থাকতে পারে, লাইনটি পরিবর্তন করা প্রয়োজন:

if os.path.isfile(fullpath):

প্রতি

if os.path.isfile(fullpath) or os.path.islink(fullpath):

লিঙ্কগুলি অপসারণ করতে।

আমার জন্য, শেষ লাইনটি এতে পরিবর্তন if match: removeall(match.group(1))করা

    if match:
        print "Removing " + match.group(1)
        removeall(match.group(1))

যাতে এটি প্রদর্শিত হয় যা এটি অপসারণ করছে তাও কার্যকর ছিল।

ব্যবহারের ক্ষেত্রে উপর নির্ভর করে, ?[\?ID]নিয়মিত অভিব্যক্তির অংশটি আরও ভাল হতে পারে ?[\?I], যেমন Dসংস্করণ নিয়ন্ত্রণে থাকা মুছে ফেলা ফাইলগুলিও সরিয়ে দেয়। আমি এটি একটি পরিষ্কার, চেক ইন ফোল্ডারে তৈরি করতে ব্যবহার করতে চাই, যাতে কোনও Dরাজ্যে কোনও ফাইল না থাকে ।


1

@জুফেই আমি আপনার উত্তরটি পরীক্ষা করেছি এবং এটি আপডেট সংস্করণ:

FOR /F "tokens=1* delims= " %%G IN ('svn st %~1 ^| findstr "^?"') DO del /s /f /q "%%H"
FOR /F "tokens=1* delims= " %%G IN ('svn st %~1 ^| findstr "^?"') DO rd /s /q "%%H"
  • আপনাকে অবশ্যই %জি এবং এইচ এর সামনে দুটি চিহ্ন ব্যবহার করতে হবে
  • অর্ডার স্যুইচ করুন: প্রথমে সমস্ত ফাইল সরান, তারপরে সমস্ত ডিরেক্টরি মুছে ফেলুন
  • (alচ্ছিক :) জায়গায় %~1কোনও ডিরেক্টরি নাম ব্যবহার করা যেতে পারে, আমি এটি ব্যাট ফাইলে একটি ফাংশন হিসাবে ব্যবহার করেছি, তাই %~1প্রথম ইনপুট পরামিতি

0

আপনি যদি কোনও কোড লিখতে না চান, svn2svn এর svn2.exe এটি করে, এটি কীভাবে প্রয়োগ করা হয়েছে সে সম্পর্কে একটি নিবন্ধ রয়েছে। মুছে ফেলা ফোল্ডার এবং ফাইলগুলি পুনর্ব্যবহারযোগ্য বাক্সে রাখা হয়।

"Svn2.exe সিঙ্ক [পথ]" চালান।


0

অজগর, ইউনিক্স শেল, জাভা ইত্যাদির পরিবর্তে পার্ল দিয়ে এটি করা পছন্দ করে এমন লোকেরা এর দ্বারা একটি ছোট পারল স্ক্রিপ্ট যা জিবটিও করে।

দ্রষ্টব্য: এটি সমস্ত রূপান্তরিত ডিরেক্টরিগুলিও সরিয়ে দেয়

#!perl

use strict;

sub main()

{

    my @unversioned_list = `svn status`;

    foreach my $line (@unversioned_list)

    {

        chomp($line);

        #print "STAT: $line\n";

        if ($line =~/^\?\s*(.*)$/)

        {

            #print "Must remove $1\n";

            unlink($1);

            rmdir($1);

        }

    }

}

main();

0

কচ্ছপ এসভিএন ব্যবহার করে: * ওয়ার্কিং কপি ফোল্ডারে ডান ক্লিক করুন, শিফট-কি ধরে রাখার সময় * "রূপান্তরিত আইটেমগুলি মুছুন" নির্বাচন করুন

কীভাবে আমি আমার ওয়ার্কিং অনুলিপিতে সমস্ত উল্লিখিত / উপেক্ষা করা ফাইল / ফোল্ডারগুলি মুছতে পারি?


0

PERL এ করার একটি পরিষ্কার উপায় হ'ল:

#!/usr/bin/perl
use IO::CaptureOutput 'capture_exec'

my $command = sprintf ("svn status --no-ignore | grep '^?' | sed -n 's/^\?//p'");

my ( $stdout, $stderr, $success, $exit_code ) = capture_exec ( $command );
my @listOfFiles = split ( ' ', $stdout );

foreach my $file ( @listOfFiles )
{ # foreach ()
    $command = sprintf ("rm -rf %s", $file);
    ( $stdout, $stderr, $success, $exit_code ) = capture_exec ( $command );
} # foreach ()

0

আমি এটি তৈরি করতে ~ 3 ঘন্টা ব্যবহার করেছি। এটি ইউনিক্সে করতে 5 মিনিট সময় লাগবে। মেন ইস্যুগুলি হ'ল: উইন ফোল্ডারগুলির নামগুলির শূন্যস্থান, %% i সম্পাদনা করা অসম্ভবতা এবং উইন সিএমডি লুপে ওয়ার্স সংজ্ঞায়িত করতে সমস্যা।

setlocal enabledelayedexpansion

for /f "skip=1 tokens=2* delims==" %%i in ('svn status --no-ignore --xml ^| findstr /r "path"') do (
@set j=%%i
@rd /s /q !j:~0,-1!
)

0

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

        /// <summary>
    /// Cleans up svn folder by removing non committed files and folders.
    /// </summary>
    void CleanSvnFolder( string folder )
    {
        Directory.SetCurrentDirectory(folder);

        var psi = new ProcessStartInfo("svn.exe", "status --non-interactive");
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        psi.WorkingDirectory = folder;
        psi.CreateNoWindow = true;

        using (var process = Process.Start(psi))
        {
            string line = process.StandardOutput.ReadLine();
            while (line != null)
            {
                var m = Regex.Match(line, "\\? +(.*)");

                if( m.Groups.Count >= 2 )
                {
                    string relativePath = m.Groups[1].ToString();

                    string path = Path.Combine(folder, relativePath);
                    if (Directory.Exists(path))
                    {
                        Directory.Delete(path, true);
                    }
                    else if (File.Exists(path))
                    {
                        File.Delete(path);
                    }
                }
                line = process.StandardOutput.ReadLine();
            }
        }
    } //CleanSvnFolder
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.