আমার গিটহাব সংগ্রহস্থলে আমার 2 টি ডিরেক্টরি রয়েছে। আমি তাদের মধ্যে একটি মুছতে চাই। পুরো সংগ্রহস্থলটি মোছা ও পুনরায় তৈরি না করে আমি কীভাবে এটি করতে পারি?
আমার গিটহাব সংগ্রহস্থলে আমার 2 টি ডিরেক্টরি রয়েছে। আমি তাদের মধ্যে একটি মুছতে চাই। পুরো সংগ্রহস্থলটি মোছা ও পুনরায় তৈরি না করে আমি কীভাবে এটি করতে পারি?
উত্তর:
আপনি উভয় ডিরেক্টরিতে 'মাস্টার' চেকআউট করতে পারেন;
git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
মন্তব্যে উল্লিখিত হিসাবে, আপনি সাধারণত যা করতে চান তা হ'ল এই ডিরেক্টরিটি গিট থেকে সরিয়ে ফেলুন তবে ফাইল সিস্টেম থেকে সম্পূর্ণ মুছবেন না (স্থানীয়)
সেক্ষেত্রে ব্যবহার করুন:
git rm -r --cached myFolder
git rm -r myFolder
এটি চেষ্টা করেছিলাম তবে "মাইফোল্ডার" ডিরেক্টরি থেকে সবকিছু মুছে ফেলেছি। "মাইফোল্ডার" ডিরেক্টরিতে সমস্ত কিছু ফিরিয়ে দিতে হবে এবং তারপরে প্রতিশ্রুতিবদ্ধ।
git rm -r --cached myFolder
git rm -r --cached directory/
কেবল গিট ট্র্যাক থেকে অপসারণ করে, তবে সংগ্রহস্থল কাঠামোটি থেকে যায়।
ডিরেক্টরি সরানোর পদক্ষেপ
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
পরবর্তী কমিটগুলিতে সেই ফোল্ডারটিকে উপেক্ষা করার পদক্ষেপ
পরের কমিটস থেকে সেই ফোল্ডারটিকে উপেক্ষা করার জন্য .gitignore নামের মূলটিতে একটি ফাইল তৈরি করুন এবং এতে ফোল্ডারগুলির নাম দিন। আপনি চান হিসাবে অনেক রাখতে পারেন
.gitignore ফাইলটি এর মতো দেখতে হবে
/FolderName
যদি কোনও কারণে, কর্মকাজে যা বলেছে তা কাজ করে না, আপনি যে ডিরেক্টরিটি ব্যবহার করতে চান তা বা আপনার ফাইল সিস্টেম ব্রাউজারের সাথে মুছে ফেলার চেষ্টা করতে পারেন (উদাঃ উইন্ডোজ ফাইল এক্সপ্লোরার ইন)। ডিরেক্টরি মুছে ফেলার পরে, কমান্ড জারি করে:
git add -A
এবং তারপরে
git commit -m 'deleting directory'
এবং তারপরে
git push origin master
।
আপনি এটি চেষ্টা করতে পারেন:
git rm -rf <directory_name>
এটি ডিরেক্টরি মুছে ফেলতে বাধ্য করবে।
আপনি যদি ডিরেক্টরিটিতে ফাইলগুলি অপসারণ করেন ( git rm
অন্যান্য উত্তরগুলি ব্যাখ্যা করে) তবে গিট সম্পর্কিত যতক্ষণ ডিরেক্টরি থাকে ততক্ষণ ডিরেক্টরিটি বিদ্যমান থাকে না। আপনি একটি খালি ডিরেক্টরি প্রতিশ্রুতিবদ্ধ করতে পারবেন না, বা একটিও সরাতে পারবেন না।
এটি সাবভারশনের মত নয় যেখানে আপনাকে স্পষ্টভাবেই করতে হবে svn rm emptyfolder/
, এবং ঘটনাক্রমে কেন man
গিটের জন্য পৃষ্ঠাটি নিজেকে "বোকা কনটেন্ট ট্র্যাকার" হিসাবে বর্ণনা করে
"আমি কীভাবে একটি গিট সংগ্রহস্থলে একটি খালি ডিরেক্টরি যুক্ত করব" এ সম্পর্কিত একটি উত্তর এই বিষয়ে FAQ- এর লিঙ্ক :
বর্তমানে গিট ইনডেক্সের নকশা (স্টেজিং এরিয়া) কেবলমাত্র ফাইলগুলি তালিকাভুক্ত করার অনুমতি দেয় এবং খালি ডিরেক্টরিগুলি পরিবর্তনের জন্য যথেষ্ট সক্ষম কেউই এ পরিস্থিতির প্রতিকারের জন্য যথেষ্ট যত্ন নেয়নি।
ডিরেক্টরিগুলির মধ্যে ফাইল যুক্ত করার পরে স্বয়ংক্রিয়ভাবে যুক্ত হয়। এটি হ'ল ডিরেক্টরিগুলি কখনই ভান্ডারে যুক্ত করতে হয় না এবং সেগুলি নিজেই ট্র্যাক করা যায় না।
আপনি "
git add <dir>
" বলতে পারেন এবং এটি সেখানে ফাইল যুক্ত করবে।যদি আপনার সত্যিকারের চেকআউটগুলিতে একটি ডিরেক্টরি থাকতে হয় তবে আপনার এটিতে একটি ফাইল তৈরি করা উচিত। .gitignore এই উদ্দেশ্যে ভাল কাজ করে; আপনি এটিকে খালি রেখে দিতে পারেন, বা ডিরেক্টরিতে প্রদর্শিত ফাইলগুলির নাম পূরণ করতে পারেন।
আমি ইতিমধ্যে ফোল্ডারটি আগেই প্রতিশ্রুতিবদ্ধ করেছি এবং ইতিহাসের ডিরেক্টরিটিও মুছে ফেলতে চাই।
আমি নিম্নলিখিতগুলি করেছেন:
এতে ফোল্ডার যুক্ত করুন .gitignore
:
echo Folder_Name/ >> .gitignore
সমস্ত কমিট থেকে সরান:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
পুরানো কমিটস থেকে রেফগুলি সরিয়ে ফেলুন:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
সমস্ত পুরানো রেফ সম্পূর্ণরূপে সরানো হয়েছে তা নিশ্চিত করুন
rm -Rf .git/logs .git/refs/original
একটি আবর্জনা সংগ্রহ সম্পাদন করুন
git gc --prune=all --aggressive
অনলাইন সংগ্রহস্থলের পরিবর্তনের জন্য আপনাকে চাপ দিন:
git push
আপনি এখানে সম্পন্ন করা হয়েছে।
তবে আপনি সমস্ত শাখায় সমস্ত পরিবর্তনের সাথে নিম্নলিখিত পরিবর্তনগুলি চাপতে পারেন: তবে এই আদেশের সাথে সাবধান হন!
git push origin --all --force
git push origin --tags --force
এর পরে ফোল্ডারটি গিট থেকে সরানো হয়েছে, তবে স্থানীয় ডিস্ক থেকে মুছে ফেলা হয়নি।
খালি ফোল্ডারগুলি মুছে ফেলার জন্য
আমি তৈরি করা একটি খালি ডিরেক্টরি (ফোল্ডার) মুছতে চেয়েছিলাম, গিট এটি মুছতে পারে না, কিছু গবেষণা করার পরে আমি শিখেছি গিট খালি ডিরেক্টরিগুলি ট্র্যাক করে না। যদি আপনার কার্যক্ষম গাছটিতে একটি খালি ডিরেক্টরি থাকে তবে আপনি এটি দিয়ে সহজেই মুছে ফেলা উচিত
rm -r folderName
গিটকে জড়িত করার দরকার নেই।
আপনি আটলাসিয়ান উত্স ট্রি (উইন্ডোজ) ( https://www.atlassian.com/software/sourcetree/overview ) ব্যবহার করতে পারেন । গাছ থেকে কেবল ফাইলগুলি নির্বাচন করুন এবং শীর্ষে "সরান" বোতামটি চাপুন। স্থানীয় সংগ্রহস্থল এবং স্থানীয় গিট ডাটাবেস থেকে ফাইলগুলি মুছে ফেলা হবে। তারপরে কমিট করুন, তারপরে চাপ দিন।
আমার এক সহকর্মী বিএফজি রেপো-ক্লিনারটিকে পরামর্শ দিয়েছিল যা আমি শক্তিশালী বলে মনে করি। এটি কেবল অবাঞ্ছিত ডেটা মুছে ফেলবে না তবে সম্পর্কিত কোনও কমিট তথ্য থেকে আপনার ভান্ডারও পরিষ্কার করে।
নতুন ডিরেক্টরি যুক্ত করতে:
mkdir <YOUR-DIRECTORY>
কিন্তু এখন গিট এই নতুন ডিরেক্টরি দ্বারা সচেতন নয়, কারণ গিট ফাইলের ডিরেক্টরি ট্র্যাক করে না ডিরেক্টরেটরি
git status
গিটটি আমরা যে পরিবর্তন করেছি সে সম্পর্কে সচেতন হবে না, তাই আমরা .keep
এই নতুন পরিবর্তন দ্বারা গিটকে সচেতন করতে লুকানো ফাইল যুক্ত করব ।
touch /YOUR-directory/.keep
এখন, আপনি git status
গিট আঘাত করলে পরিবর্তনগুলি সম্পর্কে সচেতন হবে।
আপনি যদি ডিরেক্টরিটি মুছতে চান তবে আপনার এই আদেশটি ব্যবহার করা উচিত।
rm -r <YOUR-DIRECTORY>
এবং যদি আপনি ব্যবহার করে চেক করেন তবে আপনি git status
দেখতে পাবেন ডিরেক্টরিটি সরানো হয়েছে।
প্রথম গিট কমান্ডটি কিছু মুছে ফেলার আগে আপনারা কে তা জানতে হবে
2 টি উত্তরের সংমিশ্রণটি আমার পক্ষে কাজ করেছিল
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
যদি এটি এখনও কিছু সতর্কতা দেখায় তবে ফাইলগুলি ম্যানুয়ালি সরান
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push