সংস্করণ নিয়ন্ত্রণে নেই এমন ওয়ার্কিং কপির সমস্ত ফাইল পুনরাবৃত্তভাবে মুছে ফেলার উপায় কি কেউ জানেন? (আমার স্বয়ংক্রিয় বিল্ড ভিএমওয়্যারের আরও নির্ভরযোগ্য ফলাফল পেতে আমার এটি দরকার))
hg purge --all
মার্চুরিয়ালে।
সংস্করণ নিয়ন্ত্রণে নেই এমন ওয়ার্কিং কপির সমস্ত ফাইল পুনরাবৃত্তভাবে মুছে ফেলার উপায় কি কেউ জানেন? (আমার স্বয়ংক্রিয় বিল্ড ভিএমওয়্যারের আরও নির্ভরযোগ্য ফলাফল পেতে আমার এটি দরকার))
hg purge --all
মার্চুরিয়ালে।
উত্তর:
সম্পাদনা:
সাবভার্সন ১.৯.০ এটি করার জন্য একটি বিকল্প চালু করেছে:
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))
কাজটি বেশ ভালভাবেই করা যাচ্ছে বলে মনে হচ্ছে।
svn cleanup --remove-unversioned
আরও ভাল। এবং এটি সাবভারশন ১.৯.০ এর জন্য (এই সংস্করণটি ২০১৫ সালের)। এটি স্থিতিশীল এবং স্ট্যান্ডার্ড।
এটি আমার জন্য কাজ করে:
svn status | egrep '^\?' | cut -c8- | xargs rm
শেঠ রেনো এর চেয়ে ভাল:
svn status | grep ^\? | cut -c9- | xargs -d \\n rm -r
এটি ফাইলের নাম অনুসারে রূপান্তরিত ফোল্ডার এবং স্পেস পরিচালনা করে
নীচের মতামত অনুসারে, এটি কেবলমাত্র সেই ফাইলগুলিতে কাজ করে যা উপবিবর্তন (স্ট্যাটাস =?) সম্পর্কে জানে না। বিপর্যয় যা কিছু জানে (উপেক্ষা করা ফাইল / ফোল্ডার সহ) মুছে ফেলা হবে না।
আপনি যদি সাবভারশন ১.৯ বা তার বেশি ব্যবহার করে থাকেন তবে আপনি কেবল --remove-unversioned এবং --remove-અવর্জনীয় বিকল্পগুলির সাথে এসএনএন ক্লিনআপ কমান্ড ব্যবহার করতে পারেন
svn status | grep "^?" | awk '{print $2}' | xargs -d \\n rm -r
স্বয়ংক্রিয় বিল্ডের জন্য না হলেও একই কাজটি করতে গিয়ে আমি এই পৃষ্ঠাটি পেরিয়ে এসেছি।
আরও কিছুক্ষন দেখার পর আমি কচ্ছপ এসভিএন-তে ' বর্ধিত প্রসঙ্গ মেনু ' আবিষ্কার করি । শিফট কীটি ধরে রাখুন এবং ওয়ার্কিং কপির উপর ডান ক্লিক করুন। ' টার্নাইজড আইটেমগুলি মুছুন ... ' সহ কচ্ছপ এসভিএন মেনুতে এখন অতিরিক্ত বিকল্প রয়েছে ।
যদিও এই নির্দিষ্ট প্রশ্নের জন্য সম্ভবত এটি প্রযোজ্য নয় (যেমন একটি স্বয়ংক্রিয় বিল্ডের প্রসঙ্গে), আমি ভেবেছিলাম এটি অন্যদের একই জিনিসটি করার জন্য সহায়ক হতে পারে।
দেখুন: এসএনএন-ক্লিন
আপনি যদি উইন্ডোজ কমান্ড লাইনে থাকেন,
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"
আমি এটি আমার উইন্ডোজ পাওয়ারশেল প্রোফাইলে যুক্ত করেছি
function svnclean {
svn status | foreach { if($_.StartsWith("?")) { Remove-Item $_.substring(8) -Verbose } }
}
--no-ignore
করতে svn status
এবং -Recurse
করতেRemove-Item
লিনাক্স কমান্ড লাইন:
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
এটি কেনের উত্তরের ভিত্তিতে। (কেনের উত্তর এড়িয়ে যাওয়া ফাইলগুলিকে উপেক্ষা করে; আমার উত্তর সেগুলি মুছে দেয়)
এটি কেবল ইউনিক্স-শেলের সাথে এটি করুন:
rm -rf `svn st . | grep "^?" | cut -f2-9 -d' '`
যদি আপনার পথে কচ্ছপ এসভিএন থাকে এবং আপনি সঠিক ডিরেক্টরিতে থাকেন:
TortoiseProc.exe /command:cleanup /path:"%CD%" /delunversioned /delignored /nodlg /noui
বিকল্পগুলি এর জন্য কচ্ছপ এসভিএন সহায়তাতে বর্ণিত হয়েছে /command:cleanup
:
ফলাফল ডায়ালগটি পপআপ করা থেকে ক্লিনআপ শেষ হয়ে যাওয়া বা ত্রুটির বার্তা দেখানো থেকে বিরত রাখতে / ব্যবহার করুন ou / noprogressui অগ্রগতি কথোপকথনটি অক্ষম করে। / নোডলজি ক্লিনআপ ডায়ালগটি প্রদর্শন করা অক্ষম করে যেখানে ব্যবহারকারী ক্লিনআপে ঠিক কী করা উচিত তা চয়ন করতে পারেন। উপলভ্য ক্রিয়াগুলি স্ট্যাটাস ক্লিনআপের জন্য বিকল্পগুলি / ক্লিনআপ, / রিভার্ট, / বিভ্রান্তিকর, / বিভক্ত, / রিফ্রেশশেল এবং / এক্সটার্নালগুলির সাথে নির্দিষ্ট করা যেতে পারে can
আপনি যদি কচ্ছপ এসএনএন ব্যবহার করে থাকেন তবে এটি করার জন্য একটি গোপন কমান্ড রয়েছে। উইন্ডোজ এক্সপ্লোরারে কনটেক্সট মেনুটি চালু করতে কোনও ফোল্ডারে ডান ক্লিক করলে শিফটটি ধরে রাখুন। আপনি একটি "পরিবর্তিত আইটেমগুলি মুছুন" কমান্ড পাবেন।
বিশদগুলির জন্য এই পৃষ্ঠার নীচের অংশটি দেখুন বা নীচের স্ক্রিন শটটি যা সবুজ তারাগুলির সাথে বর্ধিত বৈশিষ্ট্যগুলিকে হাইলাইট করে এবং হলুদ আয়তক্ষেত্রের সাথে আকর্ষণীয় এক ...
সাবভারশন 1.9.0 রূপান্তরিত আইটেমগুলি অপসারণের বিকল্প চালু করেছে [1]
svn cleanup --remove-unversioned
[1] https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
টমাস ওয়াটনেডস পাইথন স্ক্রিপ্টের আমার সি # রূপান্তর:
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();
}
}
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
সম্পূর্ণ ডিরেক্টরিগুলি (যেগুলি সংগ্রহস্থলের অংশ নয়) ব্যবহারের ক্ষেত্রে অপসারণ করা দরকারঅতিরিক্ত নির্ভরতা ব্যতীত আমি উপরের কোনওটি কাজ করতে পারিনি আমি উইন 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 "${basedir}""
outputProperty="status" />
<echo message="Deleting any unversioned files:" />
<for list="${status}" param="p" delimiter="
" 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}
রেফারেন্সটি পরিবর্তন করুন ।
svn status --no-ignore | awk '/^[I\?]/ {system("echo rm -r " $2)}'
আপনি কী করতে চান তা নিশ্চিত হলে প্রতিধ্বনিটি সরান।
/bin/sh
এবং এন rm
প্রক্রিয়াগুলি কাঁটাচামচ রয়েছে।
পাশাপাশি অন্য একটি বিকল্প অবদান রাখতে পারে
svn status | awk '{if($2 !~ /(config|\.ini)/ && !system("test -e \"" $2 "\"")) {print $2; system("rm -Rf \"" $2 "\"");}}'
/(Confignav.ini)/ আমার নিজের উদ্দেশ্যে।
এবং এসএনএন কমান্ডে --no-অগ্রাহ্য করা ভাল ধারণা হতে পারে
আমি আমার আরএইচ 5 মেশিনে এসএনএন-ক্লিনে হোঁচট খেয়েছি। এটি / ইউএসআর / বিন / এসএনএন-ক্লিনে অবস্থিত
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean
খাঁটি উইন্ডোজ সেমিডি / ব্যাট সমাধান:
@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
আমি এই উত্তরটি থেকে শেঠ রেনোর সংস্করণ চেষ্টা করেছি কিন্তু এটি আমার পক্ষে কার্যকর হয়নি। আমার কাছে ফাইলের নামের আগে 8 টি অক্ষর ছিল, 9 টি ব্যবহৃত হয়নি ।cut -c9-
সুতরাং এটির sed
পরিবর্তে এটি আমার সংস্করণ cut
:
svn status | grep ^\? | sed -e 's/\?\s*//g' | xargs -d \\n rm -r
আপনি যদি পাওয়ারশেলের সাথে শীতল হন:
svn status --no-ignore | ?{$_.SubString(0,1).Equals("?")} | foreach { remove-item -Path (join-Path .\ $_.Replace("?","").Trim()) -WhatIf }
কমান্ডটি আসলে মুছে ফেলতে সম্পাদনা করতে -WhatIf পতাকাটি বের করুন। তা না হলে এটা শুধু আউটপুট কি হবে হবে যদি -WhatIf ছাড়াই চালানো না।
আমি এটিকে টমাস ওয়াটনেডলের উত্তরের মন্তব্য হিসাবে যুক্ত করব , তবে এখনও পারছি না।
এটির সাথে একটি ছোটখাটো সমস্যা (যা উইন্ডোজকে প্রভাবিত করবে না) এটি কেবল ফাইল বা ডিরেক্টরি অনুসন্ধান করে। ইউনিক্সের মতো সিস্টেমে যেখানে প্রতীকী লিঙ্ক উপস্থিত থাকতে পারে, লাইনটি পরিবর্তন করা প্রয়োজন:
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
রাজ্যে কোনও ফাইল না থাকে ।
@জুফেই আমি আপনার উত্তরটি পরীক্ষা করেছি এবং এটি আপডেট সংস্করণ:
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"
%
জি এবং এইচ এর সামনে দুটি চিহ্ন ব্যবহার করতে হবে%~1
কোনও ডিরেক্টরি নাম ব্যবহার করা যেতে পারে, আমি এটি ব্যাট ফাইলে একটি ফাংশন হিসাবে ব্যবহার করেছি, তাই %~1
প্রথম ইনপুট পরামিতিআপনি যদি কোনও কোড লিখতে না চান, svn2svn এর svn2.exe এটি করে, এটি কীভাবে প্রয়োগ করা হয়েছে সে সম্পর্কে একটি নিবন্ধ রয়েছে। মুছে ফেলা ফোল্ডার এবং ফাইলগুলি পুনর্ব্যবহারযোগ্য বাক্সে রাখা হয়।
"Svn2.exe সিঙ্ক [পথ]" চালান।
অজগর, ইউনিক্স শেল, জাভা ইত্যাদির পরিবর্তে পার্ল দিয়ে এটি করা পছন্দ করে এমন লোকেরা এর দ্বারা একটি ছোট পারল স্ক্রিপ্ট যা জিবটিও করে।
দ্রষ্টব্য: এটি সমস্ত রূপান্তরিত ডিরেক্টরিগুলিও সরিয়ে দেয়
#!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();
কচ্ছপ এসভিএন ব্যবহার করে: * ওয়ার্কিং কপি ফোল্ডারে ডান ক্লিক করুন, শিফট-কি ধরে রাখার সময় * "রূপান্তরিত আইটেমগুলি মুছুন" নির্বাচন করুন
কীভাবে আমি আমার ওয়ার্কিং অনুলিপিতে সমস্ত উল্লিখিত / উপেক্ষা করা ফাইল / ফোল্ডারগুলি মুছতে পারি?
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 ()
আমি এটি তৈরি করতে ~ 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!
)
উপরের সি # কোড স্নিপেটটি আমার পক্ষে কাজ করে না - আমার কাছিমের এসএনএন ক্লায়েন্ট রয়েছে এবং লাইনগুলি কিছুটা আলাদাভাবে ফর্ম্যাট করা হয়েছে। এখানে উপরের মতো একই কোড স্নিপেট রয়েছে, কেবলমাত্র ফাংশন এবং পুনরায় ব্যবহারের জন্য পুনরায় লিখে।
/// <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