গৃহীত উত্তরটি কোনও ফাইল সম্পর্কে গিটকে "ভুলে" দেয় না ... "(icallyতিহাসিকভাবে)। এটি কেবল বর্তমান / ভবিষ্যতে গিটকে ফাইল উপেক্ষা করে তোলে ।
এই পদ্ধতিটি গিটকে উপেক্ষা করা ফাইলগুলি ( অতীতের / বর্তমান / ভবিষ্যত) সম্পূর্ণরূপে ভুলে যায় তবে কার্যকারী ডিরেক্টরি থেকে কোনও কিছুই মুছবে না (এমনকি রিমোট থেকে পুনরায় টেনে তোলা হলেও)।
এই পদ্ধতি ব্যবহার করা আবশ্যক /.git/info/exclude
(পছন্দসই) বা একটি পূর্ব বিদ্যমান .gitignore
মধ্যে সব করে আছে ফাইল উপেক্ষা করা থেকে / বিস্মৃত। 1
গিট প্রয়োগের সমস্ত পদ্ধতি কার্যকরভাবে ইতিহাসের পুনর্লিখনের পরে আচরণকে অগ্রাহ্য করে এবং এই জাতীয় প্রক্রিয়াটির পরে টানা যেতে পারে এমন কোনও পাবলিক / শেয়ার্ড / সহযোগিতামূলক রেপগুলির জন্য উল্লেখযোগ্য পদক্ষেপ রয়েছে। 2
সাধারণ পরামর্শ: একটি পরিষ্কার রেপো দিয়ে শুরু করুন - প্রতিশ্রুতিবদ্ধ সমস্ত কিছুই, ডিরেক্টরি ডিরেক্টরি বা সূচীতে কোনও কিছুই মুলতুবি নেই এবং ব্যাকআপ করুন !
এছাড়াও, মন্তব্য / পুনর্বিবেচনা ইতিহাস এর এই উত্তর ( এবং পুনর্বিবেচনা ইতিহাস এর এই প্রশ্নের ) জ্ঞানগর্ভ / দরকারী হতে পারে।
#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"
#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached
#Commit to prevent working directory data loss!
#this commit will be automatically deleted by the --prune-empty flag in the following command
#this command must be run on each branch
git commit -m "ignored index"
#Apply standard git ignore behavior RETROACTIVELY to all commits from all branches (--all)
#This step WILL delete ignored files from working directory UNLESS they have been dereferenced from the index by the commit above
#This step will also delete any "empty" commits. If deliberate "empty" commits should be kept, remove --prune-empty and instead run git reset HEAD^ immediately after this command
git filter-branch --tree-filter 'git ls-files -z --ignored --exclude-standard | xargs -0 git rm -f --ignore-unmatch' --prune-empty --tag-name-filter cat -- --all
#List all still-existing files that are now ignored properly
#if this command returns nothing, it's time to restore from backup and start over
#this command must be run on each branch
git ls-files --other --ignored --exclude-standard
অবশেষে, এই গিটহাব গাইডের বাকী অংশটি অনুসরণ করুন (step ধাপে শুরু করুন) যার মধ্যে নীচের আদেশগুলি সম্পর্কে গুরুত্বপূর্ণ সতর্কতা / তথ্য অন্তর্ভুক্ত রয়েছে ।
git push origin --force --all
git push origin --force --tags
git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
এখন থেকে সংশোধিত দূরবর্তী রেপো থেকে আসা অন্যান্য ডেভসগুলির একটি ব্যাকআপ নেওয়া উচিত এবং তারপরে:
#fetch modified remote
git fetch --all
#"Pull" changes WITHOUT deleting newly-ignored files from working directory
#This will overwrite local tracked files with remote - ensure any local modifications are backed-up/stashed
git reset FETCH_HEAD
পাদটিকা
1 কারণ /.git/info/exclude
উপরের নির্দেশাবলী ব্যবহার করে সমস্ত historicalতিহাসিক প্রতিশ্রুতিগুলির ক্ষেত্রে প্রয়োগ করা যেতে পারে, সম্ভবত commitতিহাসিক প্রতিশ্রুতি (গুলি) এর মধ্যে একটি .gitignore
ফাইল প্রাপ্তির বিশদ এই উত্তরটির বাইরে নয়। আমি মূল প্রতিশ্রুতিবদ্ধ হতে একটি যথাযথ চেয়েছিলেন , এটি আমার প্রথম কাজ ছিল। অন্যরা যত্ন পারে না যেহেতু নির্বিশেষে একই জিনিস সাধন করতে পারেন যেখানে বিদ্যমান ইতিহাস কমিট, এবং পরিষ্কারভাবে পুনরায় লেখা ইতিহাস হয় খুব যখন সচেতন অভিমানী বিষয়, এমনকি গার্গল ।.gitignore
/.git/info/exclude
.gitignore
এফডাব্লুআইডাব্লু, সম্ভাব্য পদ্ধতিগুলি অন্তর্ভুক্ত থাকতে পারে git rebase
বা একটি git filter-branch
যা এই প্রতিশ্রুতিতে উত্তরগুলির মতো প্রতিটি প্রতিশ্রুতিতে একটি বাহ্যিক অনুলিপি করে.gitignore
2 স্ট্যান্ডেলোন git rm --cached
কমান্ডের ফলাফল সম্পাদন করে সত্য-সত্যের পরে গিট উপেক্ষা করা আচরণ প্রয়োগের ফলে ভবিষ্যতে বল-চাপানো রিমোট থেকে নতুনভাবে উপেক্ষা করা ফাইল মুছতে পারে । --prune-empty
নিম্নলিখিত পতাকা git filter-branch
কমান্ড স্বয়ংক্রিয়ভাবে সরানোর পূর্ববর্তী "সব উপেক্ষিত ফাইল মুছে দিন" সূচক শুধুমাত্র কমিট করে আপনি এই সমস্যার এড়াতে। গীতের ইতিহাস পুনরায় লেখালেখি হ্যাশগুলিকেও পরিবর্তন করে যা ভবিষ্যতে জনসাধারণ / ভাগ / ভাগ করা সহযোগীদের কাছ থেকে বিপর্যয় ডেকে আনবে । বুঝতে দয়া করে গার্গল সম্পূর্ণরূপে এই ধরনের একটি রেপো থেকে এই কাজ করার আগে। এই গিটহাব গাইডটি নিম্নলিখিতটি নির্দিষ্ট করে:
আপনার সহযোগীদের বলুন রি-বেসের ফলে , না একত্রীকরণ, কোন শাখা তারা আপনার পুরানো (দূষিত) সংগ্রহস্থলের ইতিহাসের বন্ধ সৃষ্টি করেছেন। একত্রীকরণের প্রতিশ্রুতিবদ্ধ হ'ল এমন কিছু বা সমস্ত কলঙ্কিত ইতিহাসের পুনঃপ্রবর্তন করতে পারে যা আপনি খালি পরিষ্কার করার সমস্যায় পড়েছিলেন।
দূরবর্তী রেপোকে প্রভাবিত করে না এমন বিকল্প সমাধানগুলি git update-index --assume-unchanged </path/file>
বা এর git update-index --skip-worktree <file>
উদাহরণ এখানে পাওয়া যাবে ।
git clean -X
অনুরূপ শোনাচ্ছে, তবে এটি এই পরিস্থিতিতে প্রয়োগ হয় না (যখন ফাইলগুলি এখনও গিট দ্বারা ট্র্যাক করা থাকে)। ভুল পথ অনুসরণ না করার জন্য যে কেউ সমাধান খুঁজছেন তাদের জন্য আমি এটি লিখছি।