এসভিএন-তে কোনও আদেশ আছে যা আমি কোনও ডিরেক্টরিতে স্থানীয়ভাবে অনুপস্থিত ফাইলগুলি মুছতে ব্যবহার করতে পারি?
বা এটি ব্যর্থ হয়ে, কেবলমাত্র সেই ফাইলগুলিকেই তালিকাভুক্ত করার কিছু উপায় যা অনুপস্থিত (বা আরও সাধারণ ক্ষেত্রে, এ, ডি,? ইত্যাদি স্থিতি রয়েছে)
এসভিএন-তে কোনও আদেশ আছে যা আমি কোনও ডিরেক্টরিতে স্থানীয়ভাবে অনুপস্থিত ফাইলগুলি মুছতে ব্যবহার করতে পারি?
বা এটি ব্যর্থ হয়ে, কেবলমাত্র সেই ফাইলগুলিকেই তালিকাভুক্ত করার কিছু উপায় যা অনুপস্থিত (বা আরও সাধারণ ক্ষেত্রে, এ, ডি,? ইত্যাদি স্থিতি রয়েছে)
উত্তর:
আপনি যদি টরটোইজএসভিএন ব্যবহার করে থাকেন তবে কেবল পরিবর্তনের জন্য পরীক্ষা করুন , স্থিতি কলাম অনুসারে বাছাই করুন missing
, চিহ্নিত সমস্ত এন্ট্রি নির্বাচন করুন, প্রসঙ্গ মেনু খুলতে ডান ক্লিক করুন এবং মুছুন নির্বাচন করুন । অবশেষে, সংগ্রহস্থলের পরিবর্তনগুলি প্রকাশ করার প্রতিশ্রুতিবদ্ধ।
আপনি যদি উইন্ডোতে থাকেন তবে কমান্ড-লাইনটি পছন্দ করেন এবং পাওয়ারশেলের ডাবলিং উপভোগ করুন, এই ওয়ান-লাইনারটি কৌশলটি সম্পাদন করবে:
svn status | ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }
এটি হ'ল আউটপুটটি কেবল সেই ফাইলগুলিতে ফিল্টার করুন যা অনুপস্থিত ফাইলগুলি দেখায় (লাইনের শুরুতে একটি বিস্মৃতি দ্বারা চিহ্নিত), সম্পর্কিত ফাইলের নামটি ক্যাপচার করুন এবং svn rm
সেই ফাইলটির নামের উপর একটি সম্পাদন করুন।
(ব্লগ পোস্ট এসভিএন ওয়ার্কিং কপি থেকে সমস্ত "অনুপস্থিত" ফাইলগুলি সরান ইউনিক্স / লিনাক্সের জন্য অনুরূপ কিছু করে))
svn up
? কারণ ফাইলগুলি এসএনএন সার্ভার থেকে পুনরুদ্ধার করা হয়েছে
আপনি যদি ম্যাক ( ডারউইন ) বা লিনাক্স ব্যবহার করে svn rm
থাকেন তবে সমস্ত অনুপস্থিত ফাইলের জন্য আপনি নিম্নলিখিত কমান্ডগুলির আউটপুটগুলি পাইপ করতে পারেন । এগুলি চালানোর আগে আপনি বর্তমান ওয়ার্কিং ডিরেক্টরিটিকে যথাযথ ডিরেক্টরি বা উপ-ডিরেক্টরিতে সেট করতে পারেন - আপনি এটি আপনার পুরো ওয়ার্কিং কপিটি চালাতে চান কিনা তার উপর নির্ভর করে, বা কেবল একটি উপসেট।
svn rm
আর্গুমেন্ট হিসাবে # 3 এর আউটপুট ব্যবহার করে চালানসুতরাং সম্পূর্ণ কমান্ডটি হ'ল:
svn st | grep ^! | awk '{print " --force "$2}' | xargs svn rm
তথ্যসূত্র:
awk '{print " --force "$2"@"}'
যদি আপনার ফাইলের নাম একটি রয়েছে @
(আপনি উদাহরণস্বরূপ একটি iOS দেব করছি)
awk '{$1=""; print " --force \""substr($0,2)"@\"" }'
করুন, কৌশলটি করা উচিত (এবং
--force
জার্গেজ অংশে রাখেন না ?
svn st | grep ! | cut -d! -f2| sed 's/^ *//' | sed 's/^/"/g' | sed 's/$/"/g' | xargs svn rm
svn status
svn remove
প্রতিটি ফাইল-r
করার মাধ্যমে সমাধান করা যেতে পারে xargs
(চালানো হবে না, যদি না তর্ক দেওয়া হয়) are অতিরিক্তভাবে, আর্গুমেন্টগুলির সংখ্যার সীমাবদ্ধ হওয়া উচিত এবং অপসারণগুলি ব্যাচ করা উচিত কারণ উদ্বোধনটি খুব বড় সংখ্যক ফাইল মুছে ফেলার সাথে ব্যর্থ হয়, যেমন -n 500
। এবং সর্বশেষে তবে সর্বনিম্ন নয়, শেল বিশেষযুক্ত ফাইলগুলির জন্য সঞ্চালিত উদ্ধৃতিটি সাব-ইস্টিমাল রয়েছে $
- \n
ডিলিমিটার হিসাবে আরও ভাল ব্যবহার করুন এবং উদ্ধৃতিটি ছেড়ে দিন xargs
:svn status | grep "!" | cut -d! -f2 | sed 's/^ *//' | xargs -n 500 -d "\n" -r svn rm
আমি সবেমাত্র এটি পেয়েছি, যা কৌশলটি করে, একটি এসভিএন ওয়ার্কিং কপি থেকে সমস্ত "অনুপস্থিত" ফাইলগুলি সরান :
svn rm $( svn status | sed -e '/^!/!d' -e 's/^!//' )
উইন্ডোজ সংস্করণের জন্য পল মার্টিনকে ধন্যবাদ।
এখানে স্ক্রিপ্টে সামান্য পরিবর্তন করা হয়েছে যাতে স্পেস সহ উইন্ডোজ ফাইলগুলিও বিবেচনায় নেওয়া হয়। এছাড়াওmissing.list
ফাইলটি শেষে মুছে ফেলা হবে।
আমি নিম্নলিখিতগুলিকে আমার এসভিএন বিন ডিরেক্টরিতে svndel.bat এ সংরক্ষণ করেছি (আমার %% PATH পরিবেশে সেট করুন) যাতে কমান্ড প্রম্পটে যে কোনও ফোল্ডার থেকে কল করা যায়।
### svndel.bat
svn status | findstr /R "^!" > missing.list
for /F "tokens=* delims=! " %%A in (missing.list) do (svn delete "%%A")
del missing.list 2>NUL
del missing.list 2>NUL
, কারণ আমি মুছে ফেলা ফাইলগুলি প্রথমে সরানোর পরে সরাসরি সমস্ত নতুন ফাইল যুক্ত করেছি যাতে এটি missing.list
এসএনএন-তে যুক্ত হয়েছিল: svn delete "missing.list"
আমার জন্য কাজ করেছে
আমি পাওয়ারশেল বিকল্পটি পছন্দ করি ... তবে আপনি যদি উইন্ডোজ ব্যাচের স্ক্রিপ্ট ব্যবহার করেন তবে এখানে অন্য একটি বিকল্প রয়েছে:
svn status | findstr /R "^!" > missing.list
for /F "tokens=2 delims= " %%A in (missing.list) do (svn delete %%A)
এই শেল স্ক্রিপ্টটি, svn status
আপনার প্রকল্পের ডিরেক্টরিগুলি পুনরাবৃত্তভাবে পরীক্ষা করে , অনুপস্থিত ফাইলগুলি (প্রশ্ন হিসাবে দাবি হিসাবে) মুছে ফেলা এবং ভাণ্ডারে নতুন ফাইল যুক্ত করে। এটি একধরনের "প্রকল্পের বর্তমান স্ন্যাপশটের সংগ্রহস্থলগুলিতে সঞ্চয় করা"।
if [ $# != 1 ]
then
echo "usage: doSVNsnapshot.sh DIR"
exit 0
fi
ROOT=$1
for i in `find ${ROOT} -type d \! -path "*.svn*" `
do
echo
echo "--------------------------"
( cd $i ;
echo $i
echo "--------------------------"
svn status | awk '
/^[!]/ { system("svn rm " $2) }
/^[?]/ { system("svn add " $2) }
'
)
echo
done
কমান্ড লাইনের একটি সামান্য পরিবর্তন, যা ম্যাক ওএসে (আশাবাদী এমনকি লিনাক্সেও) কাজ করে এবং "! এম" (নিখোঁজ এবং সংশোধিত) কমান্ড হিসাবে "এসভিএম এসআর" প্রতিবেদন হিসাবে ফাইলগুলি অনুলিপি করে।
এটি ফাইলগুলির ফাঁকা স্থানগুলির সাথে কপি করে।
এটি পূর্ববর্তী উত্তরের একটি পরিবর্তনের উপর ভিত্তি করে:
svn st | grep ! | sed 's/!M/!/' | cut -d! -f2| sed 's/^ *//' | sed 's/^/"/g' | sed 's/$/"/g' | xargs svn --force rm
missing.list
ইউজার 3689460 এবং পল মার্টিন থেকে সম্পূর্ণরূপে অপসারণ করা সম্ভব
for /F "tokens=* delims=! " %%A in ('svn status ^| findstr /R "^!"') do (svn delete "%%A")
প্রচুর ফাইল নিয়ে কাজ করার সময়, এটি ঘটতে পারে যে xargs এ যুক্তি ইনপুটটি দীর্ঘ। আমি আরও নিষ্পাপ বাস্তবায়নের জন্য গিয়েছিলাম যা সেই ক্ষেত্রেও কাজ করে।
এটি লিনাক্সের জন্য:
#! /bin/bash
# 1. get all statii in the working copy
# 2. filter out only missing files
# 3. cut off the status indicator (!) and only return filepaths
MISSING_PATHS=$(svn status $1 | grep -E '^!' | awk '{print $2}')
# iterate over filepaths
for MISSING_PATH in $MISSING_PATHS; do
echo $MISSING_PATH
svn rm --force "$MISSING_PATH"
done