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


136

আমার যদি সাবভার্সন সংগ্রহস্থলের একটি কার্যকরী অনুলিপি থাকে, তবে কোনও একক কমান্ড বা সরঞ্জাম দিয়ে সেই ওয়ার্কিং কপির সমস্ত রূপান্তরিত বা উপেক্ষা করা ফাইল মুছার উপায় আছে? মূলত, আমি এসভিএন অ্যানালগ খুঁজছি git clean

হয় একটি কমান্ড লাইন বা জিইউআই সমাধান (কচ্ছপ এসভিএন এর জন্য) গ্রহণযোগ্য হবে।


উত্তর:


98

কচ্ছপ এসভিএন ব্যবহার করে:


7
দুর্দান্ত বৈশিষ্ট্য! এটি লিঙ্কটি আমাকে পড়তে হয়েছিল, তবে এটি এক্সপি-র তালিকার ভিউতে (গাছের দৃশ্যে নয়) কাজ করে - এটি আপনার উত্তরটিতে সম্ভবত অন্তর্ভুক্ত করা উচিত।
নিক মায়ার

5
এসএনএন-এর কমান্ড লাইন সংস্করণ (বিশেষত উইন্ডোজে) একই ফাংশন সরবরাহ করে না?
ব্লু

3
সমবদী নীচে নির্দেশিত হিসাবে:svn cleanup --remove-unversioned --remove-ignored .
হুই

133
svn status --no-ignore | grep '^[I?]' | cut -c 9- | while IFS= read -r f; do rm -rf "$f"; done

এটিতে নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে:

  • উভয় অবহেলিত এবং চিহ্নবিহীন ফাইল মুছে ফেলা হয়
  • কোনও ফাইলের নামটিতে সাদা স্থান থাকলেও এটি কাজ করে (নতুন লাইন বাদে, তবে --xmlবিকল্পটি ব্যবহার না করে এবং এক্সএমএল ফলাফলকে পার্স করা ব্যতীত অন্য অনেক কিছুই করা যায় না )
  • এটি svn statusফাইলের নামের আগে অন্যান্য স্থিতির অক্ষরগুলি মুদ্রণ করেও কাজ করে (এটি ফাইলগুলির ট্র্যাক না হওয়ার কারণে নয়, তবে কেবল ক্ষেত্রে ...)
  • এটি কোনও POSIX- অনুবর্তী সিস্টেমের মধ্যে কাজ করা উচিত

আমি নীচে থাকা একটি শেল স্ক্রিপ্ট ব্যবহার করি svnclean:

#!/bin/sh

# make sure this script exits with a non-zero return value if the
# current directory is not in a svn working directory
svn info >/dev/null || exit 1

svn status --no-ignore | grep '^[I?]' | cut -c 9- |
# setting IFS to the empty string ensures that any leading or
# trailing whitespace is not trimmed from the filename
while IFS= read -r f; do
    # tell the user which file is being deleted.  use printf
    # instead of echo because different implementations of echo do
    # different things if the arguments begin with hyphens or
    # contain backslashes; the behavior of printf is consistent
    printf '%s\n' "Deleting ${f}..."
    # if rm -rf can't delete the file, something is wrong so bail
    rm -rf "${f}" || exit 1
done

2
ঠিক আমি যা খুঁজছিলাম, লিনাক্স এবং ম্যাকোএসেও কবজির মতো কাজ করে!
ধনী

আপনার কি আইএফএস পুনরায় সেট করতে হবে? আমি একটি 'এসভিএনক্লিয়ান' স্ক্রিপ্ট না করা বেছে নিয়েছি। তাই আমি ভাবছি যে এটি কিনা স্ক্রিপ্টের বাকী অংশের জন্য আইএফএস স্ক্রু করবে ...
সি তেওয়াল্ট

3
@ ম্যাট্রিক্সুগলি: না, আপনার IFSআগে যা ছিল ঠিক তেমন পরিবর্তন করার দরকার নেই । আপনি যখন তা করবেন VARNAME=value command, এর নিয়োগ valueথেকে VARNAMEশুধুমাত্র চালানোর সময় প্রযোজ্য command(কিছু ব্যতিক্রম যে ক্ষেত্রে প্রযোজ্য হবে না সঙ্গে read)। আরও তথ্যের জন্য পসিক্স স্পেসিফিকেশন এবং এই পসিক্স বাগ রিপোর্টটি দেখুন।
রিচার্ড হ্যানসেন

@ রিচ, এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ। কয়েক বছর আগে একটি এসএনএন ক্লিনআপ সমাধান সন্ধান করতে এসেছিল এবং কিছু শেল স্ক্রিপ্টিং জ্ঞান নিয়ে চলে গিয়েছিল! স্পষ্টতই আমি এই উত্তরটি ফিরে আসছি বেশ খানিকটা সময়।
সি তেওয়াল্ট

120

আমি জানি এটি পুরানো তবে অন্য কেউ যদি এতে হোঁচট খায় তবে নতুন সংস্করণ (1.9 বা তার পরে) এর এসএনএন সমর্থন --remove-unversioned , যেমন svn cleanup . --remove-unversioned

https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options


18
আমার জন্য, এটি সঠিক উত্তর। এটি ক্রস-প্ল্যাটফর্ম কমান্ড লাইনের উত্তর। এছাড়াও, আপনি উপেক্ষা করা ফাইলগুলি মুছে ফেলতে পারেনsvn cleanup . --remove-ignored
ড্যান অ্যাটকিনসন

1
এসএনএন 1.6 এবং তার বেশি ক্ষেত্রে কাজ করে।
ওজন

2
দয়া করে এটিকে 1.9 এ পরিবর্তন করুন, subversion.apache.org/docs/release-notes/1.9.html দেখুন (আমি স্থানীয়ভাবে চেষ্টা করেছি এবং এটি কার্যকর হয়নি, এবং আমি 1.8.8 এ আছি)
ikku100

2
সমস্যাটি মনে হচ্ছে এটি রূপান্তরিত ফোল্ডারগুলি সরিয়ে দেয় না ।
নাইয়ারগডস

1
@ নায়ারগডস: সত্য, এটি আন-সংস্করণযুক্ত ফোল্ডারগুলি মুছবে না, কেবল অ-সংস্করণযুক্ত ফাইল। কেউ একটি সমাধান পাওয়া গেছে?
ধীরাজ সুবর্ণ

42

এই অনেলাইনার আপনাকে সাহায্য করতে পারে:

$ svn status | grep '^?' | awk '{print $2}' | xargs rm -rf

যত্ন সহকারে ব্যবহার করুন!


13
এটি উপেক্ষা করা ফাইলগুলিকে সরিয়ে দেয় না এবং কোনও ফাইলের নামটিতে সাদা স্থান থাকলে ভাঙবে
রিচার্ড হ্যানসেন

1
এটি উপেক্ষা করা ফাইলগুলিও মুছবে না
প্লেস্টহস

4
আপনি svn status --no-ignoreউপেক্ষা করা ফাইলগুলি ভাল ক্যাপচার করতে ব্যবহার করতে পারেন।
কোডার

3
প্রকৃতপক্ষে, আমি এটিকে উপেক্ষা করা ফাইলগুলিকে স্থানের মধ্যে রেখে যাওয়া একটি বৈশিষ্ট্য হিসাবে বিবেচনা করি।
macetw

15

ইয়ানাল-ইয়েভেস ফার্গিয়াল্লা এবং জিম্ফের উত্তরগুলি পাওয়ারশেল ব্যবহার করে সংশোধন করা হচ্ছে (তবে স্ট্যাকওভারফ্লো দ্বারা মূল পোস্টে মন্তব্য করার অনুমতি দেওয়া হচ্ছে না):

powershell -Command "&{(svn status --no-ignore) -match '^[\?i]' -replace '^.\s+' | rm -recurse -force}

"I" বর্ণটি ধারণ করে এমন সমস্ত ফাইলের সাথে মিল রেখে, রেখার সূচনা নির্দিষ্ট করতে এটি ক্যারেট ("^") যুক্ত করে। এই কমান্ডটি অ-ইন্টারেক্টিভ এবং একটি স্ক্রিপ্টে ব্যবহারযোগ্য করে তোলার জন্য আরএমএসে -recurse এবং-ফোর্সের পতাকাও যুক্ত করুন।


কমান্ডটির শেষে একটি অতিরিক্ত ডাবল উদ্ধৃতি প্রয়োজন। আমি কেবল এটি যুক্ত করব, তবে সম্পাদনাগুলি কমপক্ষে ছয়টি অক্ষর হতে হবে be
আয়ান মিলার

7

এখানে দেওয়া বিবিধ কমান্ড লাইনের উত্তর দ্বারা প্রমাণিত হিসাবে এসভিএন-তে অনেকগুলি জিনিস বিভিন্ন উপায়ে করা যেতে পারে। সংস্করণ ১.7 এর আবির্ভাবের সাথে সাথে কচ্ছপ এসভিএন-এর আরও একটি কৌশল রয়েছে যা প্রকৃতপক্ষে স্টেফানের উত্তরের চেয়ে উত্তম শস্যের রেজোলিউশন সরবরাহ করে, আপনাকে উপেক্ষা করা ফাইলগুলি থেকে পৃথক সংস্করণযুক্ত ফাইলগুলি নির্বাচন করতে দেয়। TortoiseSvn >> Clean up...এই ডায়ালগটি খোলার জন্য কেবল নির্বাচন করুন ।

কচ্ছপ এসভিএন পরিষ্কার করার বিকল্পগুলি


7

পাওয়ারশেল সহ:

(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm

কমান্ড লাইন থেকে:

powershell -Command "&{(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm}"

3
আমি এই খাঁটি উইন্ডোজ স্ক্রিপ্ট পছন্দ! আমি -match '[\?i]' -replace '^.{8}'পরিবর্তে ব্যবহারের পরামর্শ দেব , যা কোনও সাদা নাম দিয়ে কোনও ফাইলের নাম শুরু হলেও সঠিকভাবে কাজ করে এবং উপেক্ষা করা ফাইলগুলিও মুছে দেয়।
জিম্প

1
জিম্ফের প্রস্তাবিত টুইটগুলি ব্যবহার করা ভাল কাজ করে তবে আমি এমন একটি মামলায় চলে এসেছি যেখানে আমি আইটেমনটফাউন্ডএক্সেপশন পেয়েছি। দেখা যাচ্ছে, এসএনএন স্থিতির ফলাফল সেটটিতে একটিমাত্র ফাইল ছিল। এই টুইটটি সমস্যার সমাধান করে: code@ (এসএনএন স্থিতি - না-উপেক্ষা) -ম্যাচ '[\? I]' -পরিবর্তন '^। {8}' | rm। এই পোস্টটির
এনেছেন

1
এবং যেহেতু এটি আপনাকে ডিরেক্টরিগুলির জন্য অনুরোধ করবে এসএনএন-তে নয় (যেহেতু পুনরাবৃত্তি নির্দিষ্ট করা হয়নি), এটি কোনও স্ক্রিপ্টে ব্যবহারের পক্ষে ভাল নয়। ব্যবহার করুন:powershell -Command "&{(svn status --no-ignore) -match '[\?i]' -replace '^.{8}' | remove-item -force -recurse}"
থিঙ্কোফা

6

এই অনেলাইনারটি আমার জন্য কাজ করে (রিচার্ড হ্যানসেনের উত্তরের উপর ভিত্তি করে, যা আশ্চর্যরূপে স্পেসযুক্ত ফাইলগুলির জন্য কাজ করে না):

svn status --no-ignore | grep '^[I?]' | cut -c 9- | xargs -d"\n" -I{} rm {}

2
খুব unversioned ফোল্ডার ডিলিট যোগ -frকরার rmকমান্ড প্রয়োগ করুন: SVN অবস্থা --no-উপেক্ষা | গ্রেপ '^ [আমি?]' | কাট-সি 9- | xargs -d "\ n" -I {} rm -fr {}
ডেনিস গোলোমাজভ

5

কচ্ছপ এসভিএন ব্যবহার করে:

  1. ওয়ার্কিং কপির মূলটিতে ডান ক্লিক করুন এবং কচ্ছপ এসভিএন -> "পরিবর্তনের জন্য চেক করুন" নির্বাচন করুন
  2. "উপেক্ষা করা ফাইলগুলি দেখান" নির্বাচন করুন
  3. "পাঠ্য স্থিতি" কলাম অনুসারে বাছাই করুন
  4. "অ-সংস্করণযুক্ত" ফাইলগুলিতে স্ক্রোল করুন, এখন সমস্ত এক সাথে গোষ্ঠীভুক্ত; এগুলি সব নির্বাচন করুন এবং -> মুছতে ডান ক্লিক করুন
  5. "উপেক্ষা করা" ফাইলগুলিতে স্ক্রোল করুন, এখন সমস্ত এক সাথে গোষ্ঠীযুক্ত; এগুলি সব নির্বাচন করুন এবং -> মুছতে ডান ক্লিক করুন

আসলেই একটি সুন্দর এবং পরিষ্কার সমাধান নয়, তবে আমি (উইন্ডোজ) এর সবচেয়ে দ্রুততম উপায় way

অগ্রাহ্য করা ফাইলগুলির সাথে টিপসের জন্য pkh ধন্যবাদ।


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

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

4

এটি অন্যান্য উত্তরের মতো, তবে বাস্তবে উপেক্ষা করা ফাইলগুলি (আরইএসগুলিতে 'আমি' নোট করুন):

 rm -rf `svn status --no-ignore | grep '^[\?I]' | sed 's/^[\?I]//'`

1
যদি কোনও ফাইলের নাম সাদাটে থাকে তবে এটি ভেঙে যায়
রিচার্ড হ্যানসেন

4

কেউ বলেছিল আপনি উইন্ডোজ কমান্ড লাইন থেকে এটি করতে পারবেন না।

ষাঁড়.

for /f "tokens=2 delims= " %I IN ('svn st --no-ignore ^| findstr /R "^[I?]"') DO (DEL /S /F /Q /A:H "%I" & rmdir /S /Q "%I")

এটি কি এক লাইনে এবং একক জিএনইউ সরঞ্জাম প্রয়োজন হয় না। :)


for /f "tokens=2 delims= " %%I IN ('svn st --no-ignore ^| findstr /R "^[I?]"') DO (DEL /S /F /Q /A:H "%%I" & rmdir /S /Q "%%I")
দরিয়েন পারদিনাস

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

1

আপনি এগুলিকে কেবল এসভিএন কমান্ড লাইন দিয়ে মুছে ফেলতে পারবেন না (যদিও জিইউআই সরঞ্জামগুলি সম্পর্কে নিশ্চিত নয়) যদি আপনি লিনাক্স সিস্টেমের অধীনে থাকেন তবে এটি আপনাকে সহায়তা করতে পারে:

http://www.guyrutenberg.com/2008/01/18/delete-unversioned-files-under-svn/

অন্যান্য (পাশবিক) পদ্ধতিটি হল পরিবর্তনগুলি করা, ফোল্ডার থেকে সমস্ত মুছুন এবং আবার চেকআউট।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.