নতুন .gitignore ফাইলের সাথে পুনরায় সিঙ্ক গিট রেপো


191

গিটিগনোর ফাইল আপডেট করার পরে কি গিট রিপোজিটরিটি "রিফ্রেশ" করা সম্ভব?

আমি আমার গিটিগনরে সবেমাত্র আরও অবহেলা (?) যুক্ত করেছি এবং নতুন ফাইলের সাথে মিলে থাকা রেপোতে ইতিমধ্যে জিনিসগুলি সরিয়ে ফেলতে চাই।



হতে পারে, সেই সমাধানটি কি নতুন গিটিংগোরের সাথে মিলে ইতিমধ্যে কমিট করা ফাইলগুলি মুছে ফেলবে?
খ্রিস্টান ওয়াটেনগার্ড

99
"অবহেলা" শব্দটি আবিষ্কার করার জন্য +1।
আসমুন্ড এলদুয়েস্ট


1
@ ইউজার 7070০: আজ আমি শিখেছি!
আসমুন্ড এলদুয়েস্ট

উত্তর:


370

" .Gitignore ফাইল উপেক্ষা না করে " উল্লিখিত সমাধানটি কিছুটা চরম, তবে কাজ করা উচিত:

# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"

( আপনার পরিবর্তনগুলি রাখতে চান প্রথম কমিট করতে ভুলবেন না কোন ঘটনা এড়াতে, jball037 মন্তব্য নিচে । বিকল্প আপনার ফাইলগুলি আপনার ডিস্ক যদিও উপর অক্ষত রাখা হবে।)
--cached

ব্লগ পোস্টে "আরও আগে থেকেই ট্র্যাক করা ফাইলগুলি উপেক্ষা করুন " গিটটিতে আপনার আরও আরও সূক্ষ্ম সমাধান রয়েছে :

git rm --cached `git ls-files -i --exclude-standard`

বাসিম তার সম্পাদনায় পরামর্শ দেয় :

তাদের পথে স্থান সহ ফাইল

আপনি যদি কোনও ত্রুটির বার্তা পেয়ে fatal: path spec '...' did not match any filesথাকেন তবে তাদের পথে ফাঁকা স্থানগুলি থাকতে পারে।

আপনি বিকল্প সহ অন্যান্য সমস্ত ফাইল মুছতে পারেন --ignore-unmatch:

git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`

তবে তুলনাহীন ফাইলগুলি আপনার সংগ্রহস্থলের মধ্যে থেকে যাবে এবং ডাবল উদ্ধৃতি দিয়ে তাদের পথটি স্পষ্টভাবে মুছে ফেলতে হবে:

git rm --cached "<path.to.remaining.file>"

আমি খুঁজে পেয়েছি যে গিট অ্যাড স্টেপ অপ্রয়োজনীয়, যখন আমি গিট আরএম - ক্যাশেডের পরে গিট স্ট্যাটাসটি চালাচ্ছি, সরানো ফাইলগুলি ইতিমধ্যে স্টেজিং এরিয়ায় রয়েছে এবং আপনি কেবল এগিয়ে গিয়ে সেগুলি প্রতিশ্রুতিবদ্ধ করতে পারেন।
অধ্যায় '

3
আমি কেবল এটি চালিয়েছি, আমার সমস্ত আপত্তিহীন পরিবর্তনগুলি হারিয়েছি এবং প্রায় আমার চাকরি থেকে পদত্যাগের ঘোষণা দিয়েছি। এই থ্রেডে গৃহীত উত্তর আমার জীবন সংরক্ষিত: stackoverflow.com/questions/2125710/how-to-revert-a-git-rm-r
jball037

2
@ ভনসি দুঃখিত, এটি বাচ্চা বা লাঠি বোঝানো হয়নি :) তবে হ্যাঁ, আমি - ক্যাশেড ব্যবহার করেছি এবং আমার ফাইলগুলি যাচাই করার সময় আমার সমস্ত অনিবার্য পরিবর্তনগুলি হারিয়ে গেছে। এক মুহুর্তের জন্য আতঙ্কিত হলেও "গিট রিসেট হেড" আমার ফাইলগুলি পুনরুদ্ধার করেছে (তবে এবার আমি .gitignore এ উল্লিখিত ফাইলগুলি ছাড়াই আপনার সমাধান এখনও কার্যকর হয়েছে!)
jball037

3
@ jball037 ভাল। আমি সতর্কতা যুক্ত করেছি এবং সেই অনুসারে উত্তরটি সম্পাদনা করেছি।
ভোনসি

1
যদি আমি এই কাজটি করার আগে কেবল একটি লাইনটি আরও পড়ি তবে "" আপনার যে পরিবর্তনগুলি রাখতে চান তা প্রথমে নিশ্চিত করে নিন, jball037 হিসাবে কোনও ঘটনা এড়াতে "# এফএমএল
আইডেন স্ট্রিডম

9

আমি ভুল বুঝতে পারি, তবে আপনি কি নতুনভাবে উপেক্ষা করা ফাইলগুলি মুছতে চাইছেন বা আপনি এই ফাইলগুলিতে নতুন পরিবর্তনগুলি উপেক্ষা করতে চান? এই ক্ষেত্রে, জিনিস কাজ করছে।

আপনি যদি পূর্বে প্রদত্ত উপেক্ষা করা ফাইলগুলি মুছতে চান তবে ব্যবহার করুন

git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'

এখানে একক-উদ্ধৃতি দিয়ে কি?
ইগোরগানাপলস্কি

এটি একটি দুর্দান্ত উত্তর
হোলেন

আমি .gitignore আপডেট করার পরে ফাইলগুলি অপসারণ করার জন্য এটি খুব সাধারণ কারণ তবে এটির জন্য বেশ কয়েকটি ছোটখাটো আপডেট দরকার: it it git ls-files -i –exclude-standard git rm –cated git কমিট -m 'ক্লিন আপ ``
অ্যারোন

1

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে ফাইলের নাম ফাঁক থাকলে গ্র্যাচাসের সমাধান কাজ করে না। স্পেস সহ নাম ফাইল করার জন্য ভনসির সমাধান হ'ল এগুলি ব্যবহার করে সরিয়ে না দেওয়া --ignore-unmatch, তারপরে ম্যানুয়ালি মুছে ফেলুন, তবে অনেক কিছু থাকলে এটি ভাল কাজ করবে না।

এখানে এমন একটি সমাধান রয়েছে যা সমস্ত ফাইল ক্যাপচার করতে ব্যাশ অ্যারে ব্যবহার করে।

# Build bash array of the file names
while read -r file; do 
    rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)

git rm –-cached "${rmlist[@]}"

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