.Gitignore এ তালিকাভুক্ত কিন্তু এখনও ভান্ডারটিতে থাকা ফাইলগুলি কীভাবে সরিয়ে ফেলা যায়?


327

আমার সংগ্রহশালায় আমার কিছু ফাইল রয়েছে যা এড়িয়ে যাওয়া উচিত, আমি এগুলিকে .gitignore এ যুক্ত করেছিলাম তবে অবশ্যই সেগুলি আমার সংগ্রহশালা থেকে সরানো হয়নি।

সুতরাং আমার প্রশ্নটি হল, ফিল্টার-শাখা ব্যবহার করে এমন কোনও ম্যাজিক কমান্ড বা স্ক্রিপ্ট রয়েছে যা আমার ইতিহাসটি পুনরায় লিখতে পারে এবং এই সমস্ত ফাইল সহজেই মুছে ফেলতে পারে? অথবা কেবলমাত্র একটি আদেশ যা একটি অঙ্গীকার তৈরি করবে যা তাদের সরিয়ে দেবে?





সতর্কতা: যদিও এটি আপনার স্থানীয় থেকে দৈহিক ফাইলটি সরিয়ে ফেলবে না, এটি পরবর্তী গিট টানে অন্য বিকাশকারী মেশিন থেকে ফাইলগুলি সরিয়ে ফেলবে। গিটকে ট্র্যাক করা একটি ফাইল যা এখন .gitignore এ রয়েছে সে সম্পর্কে "ভুল" কীভাবে করবেন?
ক্রিস রুফ

@ স্টিভয়েসিয়াক এটি প্রশ্নের সদৃশ নয় কারণ এই প্রশ্নটি সমস্ত উপেক্ষা করা ফাইল সম্পর্কে জিজ্ঞাসা করে এবং এর অনুরূপ প্রশ্নের তুলনায় এর আরও ভাল উত্তরও রয়েছে।
ওমন

উত্তর:


438

আপনি এগুলি ম্যানুয়ালি সংগ্রহস্থল থেকে সরাতে পারেন:

git rm --cached file1 file2 dir/file3

বা, যদি আপনার কাছে প্রচুর ফাইল থাকে:

git rm --cached `git ls-files -i --exclude-from=.gitignore`

তবে উইন্ডোজে গিট বাশে এটি কাজ করবে বলে মনে হয় না। এটি একটি ত্রুটি বার্তা উত্পন্ন করে। নিম্নলিখিত আরও ভাল কাজ করে:

git ls-files -i --exclude-from=.gitignore | xargs git rm --cached  

এই ফাইলগুলি ব্যতীত পুরো ইতিহাসটি পুনরায় লেখার বিষয়ে, আমি খুব সন্দেহ করি এটি করার একটি স্বয়ংক্রিয় উপায় আছে।
এবং আমরা সকলেই জানি যে ইতিহাসের পুনর্লিখনটি খারাপ, তাই না? :)


2
দুর্ভাগ্যক্রমে উইন্ডোজ কমান্ডের গিট ব্যাশ ফাঁকা স্থানগুলির সাথে কাজ করে না
ন্যাট বান্দি

19
ক্যাপকেকে ধন্যবাদ git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cachedকৌশলটি মনে হচ্ছে
নাট বান্দি

3
আমি উইন্ডোতে একই সমস্যার সাথে আটকে গেলাম। আমি পাওয়ারশেল ব্যবহার করছি, এবং আমার ক্ষেত্রে আমি @ সামি-ডিন্ডে দ্বারা তৃতীয় কমান্ডটি পেয়েছি এবং এটিকে ফোরচে পরিণত করেছি changed এটি হয়ে গেছেgit ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}
dig

1
"git ls-ফাইল -i --exclud-from = .gitignore" খুব সহায়ক, এটি আমাকে ফাইলগুলিকে .ignore দ্বারা বাদ দেওয়া হয়েছে বলে জানায়।
ওভেন কাও

1
আমি এই কমান্ডগুলি পেয়ে খুশি হয়েছি, তবে এটি সত্যিই সংগ্রহস্থল থেকে ফাইলগুলি সরিয়ে দেয় না। যখন আমি 2300 কেবি চিত্র সরিয়ে ফেলেছি, সংগ্রহস্থলের আকারটি কেবল 10 কেবি ছাড়িয়েছে। সুতরাং এটি ব্যবহার করা যাবে না, উদাহরণস্বরূপ, স্থানান্তরকে ছোট এবং দ্রুত তৈরি করতে।
জান পোটুভনেক

343

কোনও ওএসে কাজ করার একটি সহজ উপায় হ'ল

git rm -r --cached .
git add .
git commit -m "Removing all files in .gitignore"

আপনি .gitignore এর ফাইলগুলি বাদে মূলত সমস্ত ফাইল পড়েছিলেন


1
এই প্রভাব কীভাবে রেপোতে অন্য ব্যবহারকারীরা একটি টান কার্যকর করছে - আমি এটি ফোল্ডারটি পড়তে চাইলে আমরা আর ট্র্যাক করতে চাই না সেটি মুছে ফেলা হবে ??? আমরা কীভাবে এটি প্রতিরোধ করতে পারি - আমরা কেবল আনট্র্যাক করতে চাই
snh_nl

এটি একটি ফেক কমিট ম্যাসেজ সহ সমস্ত ফাইলকে চিহ্নিত হিসাবে চিহ্নিত করবে!
হায়দার জেইনেডাইন

3
ভুয়া কমিট বার্তা বলতে কী বোঝ? এটি একটি বাস্তব প্রতিশ্রুতি বার্তা: পি আপনি আপনার প্রয়োজনের উপর নির্ভর করে অবশ্যই বার্তাটি পরিবর্তন করতে পারেন ...
gtatr

1
কেবলমাত্র সম্পূর্ণতার জন্য আপনার শেষে গিট পুশ কমান্ডের প্রয়োজন।
মারিউজ বিওলোব্রজেস্কি

1
এটি করবেন না, এটি সমস্ত ফাইলের ইতিহাস মুছে ফেলবে
অগ্রাথ

144

.Gitignore- এ থাকা ফাইলগুলি যেমন ট্র্যাক করা হচ্ছে না, আপনি সংস্করণ নিয়ন্ত্রণে নেই এমন ফাইলগুলি পুনরাবৃত্তভাবে মুছে ফেলার জন্য গিট ক্লিন কমান্ডটি ব্যবহার করতে পারেন ।

git clean -xdnএকটি শুকনো রান সঞ্চালন করতে ব্যবহার করুন এবং দেখুন কি সরানো হবে।
তারপরে git clean -xdfএটি কার্যকর করতে ব্যবহার করুন ।

মূলত, git clean -hবা man git-clean(ইউনিক্সে) আপনাকে সহায়তা দেবে।

সচেতন থাকুন যে এই কমান্ডটি নতুন ফাইলগুলি মুছে ফেলবে যা মঞ্চে নেই।

আশা করি এটা সাহায্য করবে.


6
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি আসলে কাজ করে (ম্যাকোসগুলিতে স্বীকৃত উত্তরটি আমার পক্ষে কাজ করে না) এবং এটি পরিষ্কার er
রজার ওবা

25
এই উত্তরটি প্রযোজ্য নয় - ওপি বলেছেন ফাইলের মধ্যে .gitignore হয় ট্র্যাক করা হচ্ছে।
কেন উইলিয়ামস

20
হুঁশিয়ার! এটি শাখা থেকে সরিয়ে ফেলার পরিবর্তে স্থায়ীভাবে সমস্ত অচিহ্নযুক্ত ফাইল মুছে ফেলে
এমমানুয়েল

1
এটি git clean -xdnএকটি শুকনো রান যা মুছবে না। পরেরটি হবে।
জনজাজ

17
-1: এটি একটি অত্যন্ত বিভ্রান্তিমূলক উত্তর - মূল পোস্টারটি সংগ্রহস্থল থেকে সরিয়ে নিতে চেয়েছিল, ফাইলগুলি সম্পূর্ণ অপসারণ না করে। আমি আমার আইডিই দ্বারা প্রয়োজনীয় গতিশীল ফাইলগুলির লোড মুছার এই খুব কাছাকাছি ছিলাম তবে রেপোতে থাকা দরকার ছিল না।
শুভারম্ভ

4

আমি .gitignore স্টেটমেন্ট এর সাথে আউটপুট কেটে নিয়ে খুব সহজ সমাধান করেছি:

cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash

ব্যাখ্যা:

  1. .gitignore ফাইলটি মুদ্রণ করুন
  2. মুদ্রণ থেকে সমস্ত মন্তব্য মুছে ফেলুন
  3. সমস্ত খালি লাইন মুছুন
  4. লাইনের শুরুতে 'গিট আরএম-আর' যুক্ত করুন
  5. প্রতিটি লাইন চালানো।


0

লিনাক্সে আপনি এই কমান্ডটি ব্যবহার করতে পারেন:

উদাহরণস্বরূপ আমি "* .py ~" মুছতে চাই যাতে আমার কমান্ডটি ==> হওয়া উচিত

find . -name "*.py~" -exec rm -f {} \;


-3

গিটটি ফাইলগুলিকে .gitignore এ যুক্ত করার পরে .gitignore প্যাটার্নটিকে উপেক্ষা করবে।

সংগ্রহস্থলে ইতিমধ্যে বিদ্যমান ফাইলগুলি এখনও থাকবে।

git rm files_ignored; git commit -m 'rm no use files'উপেক্ষা করা ফাইল মুছতে ব্যবহার করুন ।


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