গিটকে ট্র্যাক করা একটি ফাইল কিন্তু এখন .gitignore এ থাকা সম্পর্কে "ভুলে যেতে" কীভাবে করবেন?


5388

একটি ফাইল রয়েছে যা দ্বারা ট্র্যাক করা হয়েছিল git, কিন্তু এখন ফাইলটি .gitignoreতালিকায় রয়েছে।

যাইহোক, ফাইলটি git statusসম্পাদনার পরে প্রদর্শিত হতে থাকে। আপনি কীভাবে gitএটি সম্পূর্ণরূপে ভুলে যেতে বাধ্য করবেন?


16
git clean -Xঅনুরূপ শোনাচ্ছে, তবে এটি এই পরিস্থিতিতে প্রয়োগ হয় না (যখন ফাইলগুলি এখনও গিট দ্বারা ট্র্যাক করা থাকে)। ভুল পথ অনুসরণ না করার জন্য যে কেউ সমাধান খুঁজছেন তাদের জন্য আমি এটি লিখছি।
ইম্জ - ইভান জ্যাকারিয়াশেভ

35
এর একমাত্র আসল উত্তর নীচে নীচে দেখুন, দেখুন git update-index --assume-unchanged। এই সমাধান 1) ফাইলটি সার্ভারে রাখে (সূচী), 2) এটিকে স্থানীয়ভাবে অবাধে পরিবর্তন করতে দেয়।
কিওয়ার্টি

8
আপনার ব্যবহার করতে হবে --skip-worktree, দেখুন: stackoverflow.com/questions/13630849/…
Doppelganger

77
একটি গুরুত্বপূর্ণ প্রশ্ন হ'ল ফাইলটি ভাণ্ডারটিতে থাকা উচিত কি না? উদাহরণস্বরূপ, কেউ নতুন ক্লোন ক্লোন করলে তাদের ফাইল পাওয়া উচিত কি না? যদি হ্যাঁ তারপর git update-index --assume-unchanged <file>সঠিক এবং ফাইল সংগ্রহস্থলের মধ্যে থাকবে এবং পরিবর্তনের সঙ্গে যুক্ত হবে না git add। যদি না (উদাহরণস্বরূপ এটি কিছু ক্যাশে ফাইল, উত্পন্ন ফাইল ইত্যাদি) ছিল, তবে git rm --cached <file>এটি সংগ্রহস্থল থেকে সরিয়ে ফেলবে।
মার্টিন

9
@ মার্টিন @ কিওয়ার্টি অ্যালিওনকে পরামর্শ দেওয়া বন্ধ করে দেওয়া উচিত --assume-unchangedযা বড় ট্র্যাক করা ফাইলগুলির স্থিতি যাচাই করতে গিটকে রোধ করতে পারফরম্যান্সের জন্য --skip-worktreeতবে ব্যবহারকারী পরিবর্তিত ট্র্যাক করা ফাইলগুলির জন্য কোনটি পছন্দ করেন যা ব্যবহারকারী আর কমিট করতে চান না। স্ট্যাকওভারফ্লো.com
ফিলিপ

উত্তর:


5688

.gitignoreadd -fগিট দ্বারা ট্র্যাক করা ফাইলের সেটগুলিতে অনার্যাকড ফাইলগুলি যুক্ত হওয়া (একটি ছাড়াই ) আটকাতে বাধা দেবে , তবে গিট ইতিমধ্যে ট্র্যাক করা কোনও ফাইল ট্র্যাক করতে থাকবে।

কোনও ফাইলের ট্র্যাকিং বন্ধ করতে আপনাকে এটি সূচক থেকে সরিয়ে ফেলতে হবে। এই আদেশ দ্বারা এটি অর্জন করা যেতে পারে।

git rm --cached <file>

আপনি যদি একটি পুরো ফোল্ডারটি সরাতে চান তবে আপনাকে এর সমস্ত ফাইল পুনরাবৃত্তভাবে মুছে ফেলতে হবে।

git rm -r --cached <folder>

মাথাটি পুনর্বিবেচনা থেকে ফাইলটি অপসারণ পরবর্তী প্রতিশ্রুতিবদ্ধতার পরে ঘটবে।

সতর্কতা: যদিও এটি আপনার স্থানীয় থেকে ফিজিকাল ফাইল সরিয়ে ফেলবে না, এটি পরবর্তীতে অন্যান্য বিকাশকারী মেশিন থেকে ফাইলগুলি সরিয়ে ফেলবে git pull


55
আমার জন্য কাজ করা প্রক্রিয়াটি ছিল ১। প্রথমে মুলতুবি পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ 2. গিট আরএম - ক্যাচ <ফাইল> এবং আবার প্রতিশ্রুতিবদ্ধ 3. ফাইলটি .gitignore এ যুক্ত করুন, গিট স্ট্যাটাস দিয়ে চেক করুন এবং আবার কমিট করুন
মাতাল

117
খুব গুরুত্বপূর্ণ যোগ করা। যদি ফাইলটিকে উপেক্ষা করা হয় তবে তা সংশোধন করা হবে (তবে তা সত্ত্বেও এটি প্রতিশ্রুতিবদ্ধ হওয়া উচিত নয়), সংশোধন ও সম্পাদন করার পরে git add .এটি সূচীতে যুক্ত হবে। এবং পরবর্তী প্রতিশ্রুতি এটি সংরক্ষণাগারে প্রতিশ্রুতিবদ্ধ হবে। এই মৃত্যুদণ্ড কার্যকর করতে না পারার জন্য মাতাল আরও একটি আদেশ বলেছিল:git update-index --assume-unchanged <path&filename>
দাও

32
আকিরায়ামামোটোর পদ্ধতিও আমার পক্ষে ভালভাবে কাজ করেছে। আমার ক্ষেত্রে আমি আউটপুটটি চাপা দিয়েছি যেহেতু আমার সংগ্রহস্থলটিতে কয়েক হাজার ফাইল রয়েছে:git rm -r -q --cached .
অ্যারন ব্লেনকুশ

85
এটি git pullযদিও ফাইলটি মুছে ফেলবে ।
পেট্র পেলার

22
গিট আরএম - ক্যাচড <ফাইল> কেবল সঞ্চিতি থেকে ফাইল সরিয়ে ফেলুন, গিট আপডেট-ইনডেক্স - এসিউম-অপরিবর্তিত <ফাইল> আনস্টেজড পরিবর্তনগুলিতে ফাইল দেখানো হয়নি এবং নতুন পরিবর্তন আনতে পারে না। তবে আমি জিআইটি জাস্ট ইগনোর ফাইল ফাইলে প্লিজ করতে চাই
ইগর

2608

নীচের কমান্ডের সিরিজটি গিট সূচক (কার্যনির্বাহী ডিরেক্টরি বা স্থানীয় রেপো থেকে নয়) থেকে সমস্ত আইটেম সরিয়ে ফেলবে এবং গিট উপেক্ষা করার বিষয়ে সম্মান জানিয়ে গিট সূচক আপডেট করে। পুনশ্চ. সূচক = ক্যাশে

প্রথম:

git rm -r --cached . 
git add .

তারপর:

git commit -am "Remove ignored files"

বা এক-লাইনার:

git rm -r --cached . && git add . && git commit -am "Remove ignored files"

196
এই উত্তর এবং গৃহীত উত্তরগুলির মধ্যে পার্থক্যটি হাইলাইট করার জন্য: এই আদেশগুলি ব্যবহার করে আপনার আসলে ক্ষতিগ্রস্থ ফাইলগুলি জানতে হবে না। (প্রচুর এলোমেলো ফাইল সহ একটি অস্থায়ী দির কল্পনা করুন যা সূচকে সরিয়ে দেওয়া উচিত)।
লুডউইগ

53
গৃহীত উত্তর হিসাবে একই। ফাইলগুলি মুছে ফেলা হবে git pull
পেট্র পেলার

73
এটি একটি স্ট্যান্ডার্ড গিট কমান্ড হিসাবে ভাল লাগবে। কিছু একটা git rmignored
বেরিক

12
@ গুডিং-আর এর অর্থ "পুনরাবৃত্ত"
মার্ক

14
এই সঙ্গে আপনাকে জুড়তে শেষ হতে পারে অন্যান্য বেহুদা ফাইল বর্তমানে নয় .gitignoregit statusএই আদেশের পরে আপনার কতটা শব্দ আছে তার উপর নির্ভর করে কোনটি খুঁজে পাওয়া মুশকিল । এমন একটি কমান্ড যা কেবল নতুন উপেক্ষা করা ফাইলগুলি সরিয়ে দেয় সেগুলি আরও ভাল। সেজন্য আমি থসফটকের উত্তরটি
কুর্জেডমেটাল

1122

গিট আপডেট-ইনডেক্স আমার জন্য কাজ করে:

git update-index --assume-unchanged <file>

দ্রষ্টব্য: এই সমাধানটি প্রকৃতপক্ষে স্বতন্ত্র কারণ .gitignoreযেহেতু গিটিগনোর কেবল অচিহ্নযুক্ত ফাইলের জন্য।

সম্পাদনা: যেহেতু এই উত্তরটি পোস্ট করা হয়েছিল, একটি নতুন বিকল্প তৈরি করা হয়েছে এবং এটি অগ্রাধিকার দেওয়া উচিত। আপনার ব্যবহার করা উচিত --skip-worktreeযা পরিবর্তিত ট্র্যাকড ফাইলগুলির জন্য যা ব্যবহারকারী আর প্রতিশ্রুতিবদ্ধ করতে চায় না এবং --assume-unchangedবড় ট্র্যাক হওয়া ফাইলগুলির স্থিতি পরীক্ষা করতে গিটকে প্রতিরোধ করতে পারফরম্যান্সের জন্য রাখে। আরও তথ্যের জন্য https://stackoverflow.com/a/13631525/717372 দেখুন ...

git update-index --skip-worktree <file>

173
এই IS বাস্তব উত্তর। আশ্চর্যজনক আসলে, খুব সাধারণ, দূষিত হয় না git statusএবং আসলে খুব স্বজ্ঞাত হয় না । ধন্যবাদ।
পাবলো ওলমোস ডি আগুইলেরা সি।

4
আমি যথেষ্ট ভাল rm [...] .সমাধানের জন্য গিয়েছিলাম , কমপক্ষে আমি কীভাবে এটি কাজ করে তা আঁকতে পারি। আমি update-index& কী করার জন্য কোনও দুর্দান্ত ডকুমেন্টেশন পাইনি --assume-unchanged। এটি কীভাবে অন্যটির সাথে কীভাবে তুলনা করতে পারে, তাতে আমি যে সমস্ত ফাইল উপেক্ষা করা হত তা মুছে ফেলতে চাই? (বা ব্যাখ্যাটি পরিষ্কার করার জন্য একটি লিঙ্ক?)
ব্র্যাডি ট্রেনার

25
git update-index --assume-unchanged <path> …গিটের কারণে নির্বিশেষে নির্দিষ্ট পথে (গুলি) এর পরিবর্তনগুলি উপেক্ষা করা হবে .gitignore। আপনি যদি কোনও রিমোট থেকে টানেন এবং সেই দূরবর্তীটিতে এই পথে পরিবর্তন এসেছে, গিট একটি সংঘাতের সাথে একীভূত করতে ব্যর্থ হবে এবং আপনাকে ম্যানুয়ালি মার্জ করতে হবে। git rm --cached <path> …গিটটি সেই পথটি অনুসরণ করা বন্ধ করে দেবে। আপনি যদি পথটি যুক্ত না করেন তবে .gitignoreভবিষ্যতে আপনি পথটি দেখতে পাবেন git status। প্রথম বিকল্পটিতে গিট কমিটের ইতিহাসে কম শব্দ রয়েছে এবং ভবিষ্যতে "উপেক্ষা করা" ফাইলটিতে বিতরণ করার অনুমতি দেয়।
ম্যানিকিডি

26
এটি কীভাবে গৃহীত উত্তর নয় তা নিয়ে আমি বেশ বিভ্রান্ত। এখানে গৃহীত উত্তর পরিষ্কারভাবে জিজ্ঞাসিত প্রশ্নের উত্তর দিচ্ছে না। এই উত্তরটি সংগ্রহস্থল থেকে থাকা ফাইলের পরিবর্তনগুলিকে উপেক্ষা করে।
ডেভ কুপার 22

11
প্রদত্ত কমান্ডটি ঠিক কী ব্যাখ্যা করে যদি উদাহরণস্বরূপ এটি অন্যান্য প্রস্তাবিত সমাধানগুলি থেকে কীভাবে আলাদা হয় তবে এই উত্তরটি আরও বেশি কার্যকর হবে।
LarsH

283
git ls-files --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

এটি উপেক্ষা করা ফাইলগুলির তালিকা নেয় এবং সেগুলি সূচি থেকে সরিয়ে দেয়, তারপরে পরিবর্তনগুলি সংঘবদ্ধ করে।


7
আপনার যদি এগুলি কার্যকারী ডিরেক্টরি থেকেও সরিয়ে ফেলতে হয় তবে কেবল চালান git ls-files --ignored --exclude-standard | xargs git rm । আমি বিশ্বাস করি এই উত্তরটি সবচেয়ে ভাল! কারণ এটি খুব স্পষ্ট, ইউনিক্স-ওয়ে, এবং অন্যটি, আরও জটিল কমান্ডের পার্শ্ব প্রতিক্রিয়াগুলি রচনা না করে, সরাসরি পদ্ধতিতে চেয়েছিল কাজটি করে।
ইম্জ - ইভান জাখারিয়াচেভ

6
দুর্দান্ত উত্তর; তবে, মাঝামাঝি জায়গাগুলির সাথে পাথ থাকলে কমান্ডটি ব্যর্থ হবে, উদাহরণস্বরূপ: "মাই ডিয়ার / মাই_গাইনার্ড_ফিল.টেক্সট"
ডেভিড হার্নান্দেজ

8
গিট এলএস-ফাইল - স্বাক্ষরিত - নিবন্ধ-মানক | সেড 's /.*/ "&"/' | xargs git rm --cached
ডেভিড হার্নান্দেজ

3
git rmls-filesকোন কিছুর সাথে মিল না থাকলে অভিযোগ করবে । কোনও ফাইল মিলে না গেলে চলবে না xargs -r git rm ...তা বলার জন্য ব্যবহার করুন । xargsgit rm
ওল্ফগ্যাং

10
Separa 0 বিভাজক হিসাবে ব্যবহার করা আরও ভাল হবে:git ls-files --ignored --exclude-standard -z|xargs -0 git rm --cached
নিলস-ও-মাদুর

83

আমি এই কমান্ডটি সর্বদা এই অন্যাক্র্যাকড ফাইলগুলি সরাতে ব্যবহার করি। এক-লাইন, ইউনিক্স-শৈলী, পরিষ্কার আউটপুট:

git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

এটি আপনার সমস্ত উপেক্ষা করা ফাইল তালিকাভুক্ত করে, অভ্যন্তরীণ ফাঁক দিয়ে পাথ পরিচালনা করার পরিবর্তে প্রতিটি আউটপুট লাইনকে একটি উদ্ধৃত লাইনের সাথে প্রতিস্থাপন করে git rm -r --cachedএবং সূচক থেকে পাথ / ফাইল / ডায়ারগুলি সরাতে সমস্ত কিছু পাস করে।


3
দুর্দান্ত সমাধান! পুরোপুরি কাজ এবং আরো সঠিক মনে করেন যে সব ফাইল তারপর সরানোর তাদের যোগ ফিরে।
জন Catmull

5
আমিও এই "পরিষ্কার" পেয়েছি। এটি সুস্পষ্ট হতে পারে, তবে কেবল প্রথম অংশটি চালানো git ls-files --ignored --exclude-standard, নিজেই আপনাকে প্রথমে বুঝতে / যাচাই করতে দেয় যে আপনার নতুন কোন ফাইলগুলি .gitignoreবাদ দিচ্ছে / সরিয়ে ফেলবে, আপনি এগিয়ে যাওয়ার আগে এবং ফাইনালটি কার্যকর করার আগে git rm
জনব্রেভ

সচেতন হন, ফাইলের নামগুলিতে কিছু "দুষ্ট" অক্ষর যেমন ব্যর্থ হন \n। আমি এটির জন্য আমার সমাধান পোস্ট করেছি।
জনব্রেভ

3
আরেকটি সতর্কবাণী: টানতে, এর ফলে ফাইলটি অন্যের কার্যকারী ডিরেক্টরিতে মুছে ফেলা হবে, তাই না?
LarsH

চেষ্টা করেছেন, কিন্তু আমার পক্ষে কাজ করেননি: sed: 1: "s/.*/": unterminated substitute in regular expressionফাঁকাগুলি সহ একটি রেপিতে একটি ফিল্টার-শাখার কমান্ডে। (যদিও ফিল্টার-শাখার বাইরে কাজ করার কথা মনে হচ্ছে)। আমি ব্যবহৃত git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cachedথেকে @ JonBrave এর উত্তর পরিবর্তে।
গোফোলজি

70

এটিকে সরিয়ে দিন, প্রতিশ্রুতিবদ্ধ করুন, আবার এটিকে আবার সরিয়ে দিন This এটি সম্পাদন করার জন্য সম্ভবত 'গিটটিয়ার' উপায় রয়েছে।


2
যদি আপনি পূর্বে উপেক্ষা করা হয়নি এমন একটি গুচ্ছ ফাইলকে উপেক্ষা করতে চান তবে এটি দুর্দান্ত কাজ করেছে। যদিও আপনি বলেছেন যেমন, এর জন্য সম্ভবত আরও ভাল উপায় আছে।
ওসকার পারসন

আমি ঠিক তাই করেছি। ফাইলগুলি কেবল গিটের বাইরে কোনও ফোল্ডারে সরান, তারপরে "গিট অ্যাড।", "গিট কমিট" করুন do (এটি ফাইলগুলি সরিয়ে নিয়েছে) তারপরে গিটিগনোর যুক্ত করুন, ফাইলগুলি / ফোল্ডারগুলি উল্লেখ করে গিটিগনোর ফাইলটি গিটে যোগ করার জন্য আবার প্রতিশ্রুতি দিন, তারপরে ফোল্ডারে অনুলিপি করুন / সরান, এবং সেগুলি উপেক্ষা করা উচিত। নোট: এটি প্রদর্শিত হবে যে ফাইলগুলি জিআইটি থেকে মুছে ফেলা হয়েছে, তাই সম্ভবত এটি অন্য চেকআউট / টানগুলি থেকে সরিয়ে ফেলবে, উপরের সমাধানগুলিতে উল্লিখিত হয়েছে, তবে যেহেতু আপনি প্রাথমিকভাবে সেগুলির অনুলিপি তৈরি করছেন, এটি আইএমএইচও যতটা ইস্যু করে না। কেবলমাত্র দলের বাকি সদস্যদের জানান ...
ডেল

এটি ভুল প্রতিশ্রুতিযুক্ত ফোল্ডারগুলি থেকে মুক্তি পাওয়ার সহজতম উপায়।
মার্টারল্ক

1
একমাত্র উপায় বলে মনে হচ্ছে, আমি দেখতে পাচ্ছি। এটি গিটের মধ্যে একটি বিশাল বাগ ('ফিচার' নয়) যে আপনি .gitignore এ কোনও ফাইল / ফোল্ডার যুক্ত করার সাথে সাথেই - ফাইলটি সর্বদা - সর্বদা - সে জায়গা থেকে উপেক্ষা করে না।
জোসেফকে

আমি তাদের যুক্ত করার পরে এটি কাজ করেছিল এবং তারপরে ঘটনাটি তাদের .gitignore
hanzolo

66

যদি আপনি git rmএকটি ট্র্যাক করা ফাইল না করতে পারেন কারণ অন্য ব্যক্তির এটির প্রয়োজন হতে পারে (সতর্কতা, এমনকি যদি আপনি git rm --cached , অন্য কেউ এই পরিবর্তনটি পান তবে তাদের ফাইলগুলি তাদের সিস্টেমে মুছে ফেলা হবে)। এগুলি প্রায়শই কনফিগার ফাইল ওভাররাইড, প্রমাণীকরণের শংসাপত্রাদি ইত্যাদির কারণে করা হয় people দয়া করে লোকেদের সমস্যার সমাধানের জন্য https://gist.github.com/1423106 দেখুন ।

সংক্ষেপ:

  • আপনার অ্যাপ্লিকেশনটিকে একটি উপেক্ষা করা ফাইল কনফিগারেশন-ওভারাইড.ini সন্ধান করুন এবং এটি প্রতিশ্রুতিবদ্ধ ফাইল কনফিগারেশনইভারের উপরে ব্যবহার করুন (অথবা পর্যায়ক্রমে, ~ / .config / myapp.ini, বা Y MYCONFIGFILE অনুসন্ধান করুন)
  • ফাইল কনফিগারেশন-নমুনা.আই.আই.আই.ਟੀ. ফাইল করুন এবং ফাইল কনফিগারেশন উপেক্ষা করুন, স্ক্রিপ্ট আছে বা প্রয়োজন মতো ফাইলটিকে অনুরূপ অনুলিপি করুন।
  • আপনার জন্য পরিবর্তনগুলি প্রয়োগ করতে এবং মুছে ফেলার জন্য গিটাট্রিবিটস ক্লিন / স্মুড ম্যাজিক ব্যবহার করার চেষ্টা করুন, উদাহরণস্বরূপ বিকল্প শাখা থেকে চেকআউট হিসাবে কনফিগারেশন ফাইলটি ধাক্কা দিয়ে হেড থেকে চেকআউট হিসাবে কনফিগারেশন ফাইলটি পরিষ্কার করুন। এটি কৃপণ স্টাফ, আমি নবজাতকের জন্য এটির প্রস্তাব দিই না।
  • কনফিগারেশন ফাইলটিকে এমন একটি মোতায়েন করা শাখায় রাখুন যা কখনই মাস্টার হিসাবে মার্জ হয় না। যখন আপনি স্থাপন / সংকলন / পরীক্ষা করতে চান আপনি সেই শাখায় মার্জ করে সেই ফাইলটি পান। এটি মানবিক সংযোজন নীতি এবং অতিরিক্ত গিট মডিউলগুলি ব্যতীত মূলত ধূলা / পরিষ্কার উপায়।
  • পুনরুদ্ধারবিরোধী: অনুমান-অপরিবর্তিত ব্যবহার করবেন না, এটি কেবল অশ্রুতে শেষ হবে (কারণ গিট মিথ্যা বললে খারাপ জিনিস ঘটতে পারে, যেমন আপনার পরিবর্তন চিরতরে হারিয়ে যায়)।

7
গিট ফাইলটি সরাবে না, যদি এটি মুছে ফেলার সময় ময়লা ছিল were এবং যদি এটি নোংরা না হয় তবে ফাইলটি পুনরুদ্ধার করা তত সহজ হবে git checkout <oldref> -- <filename>- তবে এটি চেক আউট এবং উপেক্ষা করা হবে।
14

আপনার শেষ নোট (সম্পর্কে --assume-unchanged) সম্পর্কিত: হয় এটি কার্গো কাল্ট এবং বরখাস্ত করা উচিত, বা আপনি কেন ব্যাখ্যা করতে পারেন (যার বিষয়ে আমি নিশ্চিত) এবং এটি কার্যকর হয়ে ওঠে।
রোমেনভ্যালারি

57

এটি ব্যবহার করুন যখন:

1. আপনি প্রচুর ফাইল আনট্র্যাক করতে চান, বা

২. আপনি আপনার গিটিগনোর ফাইল আপডেট করেছেন

উত্স লিঙ্ক: http://www.codeblocq.com/2016/01/Untrack-files-already-added-to-git-repository-based-on-gitignore/

ধরা যাক আপনি ইতিমধ্যে আপনার গিট সংগ্রহস্থলটিতে কিছু ফাইল যুক্ত / প্রতিশ্রুত করেছেন এবং তারপরে সেগুলি আপনার .gitignore এ যুক্ত করেন; এই ফাইলগুলি এখনও আপনার সংগ্রহস্থল সূচীতে উপস্থিত থাকবে। এই নিবন্ধটি আমরা কীভাবে সেগুলি থেকে মুক্তি পাব তা দেখব।

পদক্ষেপ 1: আপনার সমস্ত পরিবর্তন প্রতিশ্রুতিবদ্ধ

এগিয়ে যাওয়ার আগে, আপনার .gitignore ফাইল সহ আপনার সমস্ত পরিবর্তন প্রতিশ্রুতিবদ্ধ তা নিশ্চিত করুন।

পদক্ষেপ 2: সংগ্রহশালা থেকে সবকিছু সরিয়ে ফেলুন

আপনার রেপো সাফ করতে, ব্যবহার করুন:

git rm -r --cached .
  • rm হ'ল অপসারণ আদেশ
  • -r পুনরাবৃত্তি সরানোর অনুমতি দেবে
  • ক্যাশেড কেবল সূচি থেকে ফাইলগুলি সরিয়ে ফেলবে। আপনার ফাইলগুলি এখনও সেখানে থাকবে।

rmকমান্ড ক্ষমাহীন হতে পারে। যদি আপনি এটি আগে যা করে তা চেষ্টা করতে চান, তবে জিনিসগুলি পরীক্ষার জন্য পতাকা -nবা --dry-runপতাকা যুক্ত করুন ।

পদক্ষেপ 3: পুনরায় সমস্ত কিছু যুক্ত করুন

git add .

পদক্ষেপ 4: প্রতিশ্রুতিবদ্ধ

git commit -m ".gitignore fix"

আপনার ভাণ্ডার পরিষ্কার :)

পরিবর্তনগুলি কার্যকরভাবে দেখতে দেখতে আপনার রিমোটের পরিবর্তনগুলিকে চাপ দিন।


1
এটি কি দূরবর্তী সংগ্রহস্থল থেকে ফাইলগুলি মুছবে না? আমি যদি ফাইলগুলি স্থানীয় রেপো এবং দূরবর্তী রেপো উভয়ই রাখতে চান তবে তাদের সম্পর্কে গিটটি "ভুলে যেতে" পারি?
অবিশায় 28

আফাইক এটি ইতিহাস থেকে ফাইলগুলি মুছবে না কারণ আমরা কোনও ইতিহাস পরিবর্তনকারী কমান্ড ব্যবহার করছি না (আমি ভুল হলে আমাকে সংশোধন করি) এটি কেবল গিট থেকে গিটিগনরে উপেক্ষা করা ফাইলগুলি মুছে ফেলার মাধ্যমে একটি নতুন প্রতিশ্রুতি যুক্ত করে Those ফাইলগুলি সেখানে থাকবে
commতিহাসিক

49

আমি গিট ফিল্টার-শাখা ব্যবহার করে এটি সম্পাদন করেছি । আমি ব্যবহৃত সঠিক আদেশটি ম্যান পৃষ্ঠা থেকে নেওয়া হয়েছিল:

সতর্কতা : এটি আপনার পুরো ইতিহাস থেকে ফাইলটি মুছবে

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

এই কমান্ডটি git rmপ্রতিটি কমিটের পূর্বে সম্পাদন করে পুরো কমিটের ইতিহাস পুনরায় তৈরি করবে এবং সুতরাং নির্দিষ্ট ফাইলটি থেকে মুক্তি পাবে। কমান্ড চলমান হিসাবে এটা আগে এটা ব্যাক আপ করতে ভুলবেন না হবে নষ্ট না হয়।


9
এটি সমস্ত প্রতিশ্রুতিবদ্ধ আইডি পরিবর্তন করবে, এইভাবে আপনার ভাণ্ডারের অনুলির বাইরে শাখাগুলি থেকে মার্জগুলি ভেঙে দেবে।
বিডনলান

19
সতর্কতা: এটি আপনার পুরো ইতিহাস থেকে ফাইলটি মুছবে। সংস্করণ ইতিহাসে অনেক আগে প্রতিশ্রুতিবদ্ধ একটি সম্পূর্ণ অপ্রয়োজনীয় এবং বড় আকারের ফাইল (আউটপুট যা কখনও প্রতিশ্রুতিবদ্ধ হওয়া উচিত ছিল না) সরানোর জন্য আমি এটি খুঁজছিলাম।
zebeiah49

48

আমার জন্য কি কাজ হয়নি

(লিনাক্সের অধীনে), আমি এখানে পোস্টগুলি ব্যবহার করার ls-files --ignored --exclude-standard | xargs git rm -r --cachedপদ্ধতির পরামর্শ দিয়েছিলাম । তবে, (কিছু) মুছে ফেলার ফাইলগুলির নামে একটি এমবেডড নিউলাইন / এলএফ / \nছিল। সমাধানগুলির কোনওটিই নয়:

git ls-files --ignored --exclude-standard | xargs -d"\n" git rm --cached
git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

এই পরিস্থিতিটি মোকাবেলা করুন (ফাইলগুলি সম্পর্কে ত্রুটিগুলি পাওয়া যায় না)।

তাই আমি অফার

git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached
git commit -am "Remove ignored files"

এই ব্যবহার -zআর্গুমেন্ট প্রাপ্ত করতে LS-ফাইল , এবং -0আর্গুমেন্ট প্রাপ্ত করতে xargs পূরণ করার জন্য নিরাপদে / সঠিকভাবে জন্য "কদর্য" ফাইলের নামের মধ্যে অক্ষর।

ম্যানুয়াল পৃষ্ঠায় গিট-এলএস-ফাইলগুলি (1) এ বলা হয়েছে:

যখন -z বিকল্পটি ব্যবহার করা হয় না, তখন পথের নামগুলিতে TAB, LF, এবং ব্যাকস্ল্যাশ অক্ষর যথাক্রমে \ t, \ n, এবং। হিসাবে উপস্থাপিত হয়।

সুতরাং আমি মনে করি যদি ফাইলের নামের মধ্যে এই অক্ষরগুলির কোনও থাকে তবে আমার সমাধানের প্রয়োজন।


1
আমার জন্য এটি সেরা সমাধান। এটির তুলনায় এটি অনেক ভাল অভিনয় করেছে git add .। এটিতে উপরের কয়েকটি মন্তব্য থেকে সেরা উন্নতিও রয়েছে।
নিলস-ও-মাদুর

আপনি কি git commit -am "Remove ignored files"উত্তর দেওয়ার পরে থসফটস যুক্ত করতে পারেন ? আপনার উত্তরগুলি সম্মিলিতভাবে আমাকে জিনিসগুলি পেয়েছে: j
কান্দো

আমি এর উদ্দেশ্য বুঝতে পারছি না git commit -a। আমার জন্য git rm --cachedঠিক সূচককে প্রভাবিত করে তাই ফাইলগুলির পরে
জিন পল

23
  1. আপনার .gitignoreফাইল আপডেট করুন - উদাহরণস্বরূপ, আপনি যে ফোল্ডারে ট্র্যাক করতে চান না তা যুক্ত করুন .gitignore

  2. git rm -r --cached .- ওয়ান্টেড ও অযাচিত সহ সমস্ত ট্র্যাক করা ফাইল সরান। আপনার কোড ততক্ষণ সুরক্ষিত থাকবে যতক্ষণ আপনি স্থানীয়ভাবে সংরক্ষণ করেছেন।

  3. git add .- ফাইলগুলি বাদ দিয়ে সমস্ত ফাইল আবার যুক্ত করা হবে .gitignore


আমাদেরকে সঠিক দিকে নির্দেশ করার জন্য @ আকিরায়ামামোটোতে টুপি টিপুন।


1
আপনি কীভাবে যেভাবেই আরএম পুনরাবৃত্তভাবে চালানোর জন্য কোনও -আর দরকার হওয়ায় এটি বাস্তবে কাজ করবে না বলে কীভাবে নিম্নচ্যুত হবে :) (কেউ সঠিকভাবে অনুলিপি করেনি)
অরণ মুলহোল্যান্ড

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

16

আমার ধারণা, গিটটি ধারণার কারণে ফাইলটি পুরোপুরি ভুলে যেতে পারে না ( বিভাগ "স্ন্যাপশট, পার্থক্য নয়" )।

এই সমস্যাটি অনুপস্থিত, উদাহরণস্বরূপ, সিভিএস ব্যবহার করার সময়। সিভিএস ফাইল-ভিত্তিক পরিবর্তনের একটি তালিকা হিসাবে তথ্য সংরক্ষণ করে। সিভিএসের জন্য তথ্য ফাইলের একটি সেট এবং সময়ের সাথে সাথে প্রতিটি ফাইলে পরিবর্তিত হয়।

তবে প্রতিবার প্রতিশ্রুতিবদ্ধ বা গিটে আপনার প্রকল্পের অবস্থা বাঁচাতে, এটি মূলত আপনার সমস্ত ফাইলগুলি সেই মুহুর্তের মতো দেখতে একটি চিত্র নেয় এবং সেই স্ন্যাপশটের একটি রেফারেন্স সঞ্চয় করে। সুতরাং, আপনি যদি একবার ফাইল যুক্ত করেন তবে এটি সর্বদা সেই স্ন্যাপশটে উপস্থিত থাকবে।

এই 2 টি নিবন্ধ আমার জন্য সহায়ক ছিল:

গিট অনুমান-অপরিবর্তিত বনাম স্কিপ-ওয়ার্ক্রিট্রি এবং গিটের সাহায্যে ট্র্যাক করা ফাইলগুলির পরিবর্তনগুলি কীভাবে উপেক্ষা করবেন

ফাইলটি ইতিমধ্যে ট্র্যাক করা থাকলে এটিতে আমি নিম্নলিখিত বিষয়গুলি অনুসরণ করছি:

git update-index --skip-worktree <file>

এই মুহুর্ত থেকে এই ফাইলের সমস্ত স্থানীয় পরিবর্তন উপেক্ষা করা হবে এবং রিমোটে যাবে না। যদি ফাইলটি রিমোটে পরিবর্তিত হয় তবে সংঘাত দেখা দেবে, কখন git pull। স্ট্যাশ কাজ করবে না। এটি সমাধানের জন্য, ফাইলের সামগ্রীটি নিরাপদ স্থানে অনুলিপি করুন এবং এই পদক্ষেপগুলি অনুসরণ করুন:

git update-index --no-skip-worktree <file>
git stash
git pull 

ফাইলের সামগ্রীগুলি দূরবর্তী সামগ্রী দ্বারা প্রতিস্থাপন করা হবে। আপনার পরিবর্তনগুলি ফাইল থেকে নিরাপদ স্থান থেকে আটকে দিন এবং আবার সম্পাদন করুন:

git update-index --skip-worktree <file>

প্রকল্পের সাথে কাজ করা প্রত্যেকে যদি পারফর্ম করেন তবে git update-index --skip-worktree <file>সমস্যাগুলি pullঅনুপস্থিত থাকতে হবে। কনফিগারেশন ফাইলগুলির জন্য এই সমাধানটি ঠিক আছে, যখন প্রতিটি বিকাশকারীর নিজস্ব প্রকল্প কনফিগারেশন থাকে।

প্রতিবার ফাইলটি রিমোটে পরিবর্তন করা গেলে এটি করা খুব সুবিধাজনক নয় তবে এটি দূরবর্তী সামগ্রী দ্বারা ওভাররাইট করা থেকে রক্ষা করতে পারে।


16

নিম্নলিখিত পদক্ষেপগুলি ক্রমিকভাবে করুন, আপনি ভাল থাকবেন।

1. ডিরেক্টরি / স্টোরেজ থেকে ভুলভাবে যুক্ত ফাইলগুলি সরান । আপনি "rm -r" (লিনাক্সের জন্য) কমান্ড ব্যবহার করতে পারেন বা ডিরেক্টরিগুলি ব্রাউজ করে এগুলি মুছতে পারেন। বা এগুলিকে আপনার পিসির অন্য কোনও স্থানে নিয়ে যান [[ চলন্ত / অপসারণের জন্য দৌড়ালে আপনার আইডিই বন্ধ করতে হবে ]

gitignoreএখন ফাইল ফাইল এবং ডিরেক্টরি সংরক্ষণ করুন।

৩. এই কমান্ডগুলি ব্যবহার করে গিট ক্যাশে থেকে তাদের সরান (যদি একাধিক ডিরেক্টরি থাকে তবে বার বার এই আদেশটি জারি করে তাদের একে অপরকে সরিয়ে দিন )

git rm -r --cached path-to-those-files

4. এখন একটি প্রতিশ্রুতিবদ্ধ এবং ধাক্কা , এই আদেশগুলি ব্যবহার করুন। এটি গিট রিমোট থেকে এই ফাইলগুলি সরিয়ে দেবে এবং এই ফাইলগুলি ট্র্যাক করতে গিট থামিয়ে দেবে

git add .
git commit -m "removed unnecessary files from git"
git push origin

13

অনুলিপি / পেস্ট উত্তর হয় git rm --cached -r .; git add .; git status

এই কমান্ডটি ইতিমধ্যে গিট সংগ্রহস্থলের প্রতিশ্রুতিবদ্ধ ফাইলগুলিকে অগ্রাহ্য করবে তবে এখন আমরা সেগুলিতে যুক্ত করেছি .gitignore


9

ম্যাট ফিয়ারের উত্তরটি ছিল সবচেয়ে কার্যকর আইএমএইচও। উইন্ডোজগুলিতে কেবলমাত্র তাদের গিট রেপো থেকে ফাইলগুলি অপসারণের জন্য উইন্ডোজগুলিতে কেবল একটি পাওয়ারশেল স্ক্রিপ্ট রয়েছে যা তাদের বর্জন তালিকার সাথে মেলে।

# Get files matching exclusionsfrom .gitignore
# Excluding comments and empty lines
$ignoreFiles =  gc .gitignore | ?{$_ -notmatch  "#"} |  ?{$_ -match  "\S"} | % {
                    $ignore = "*" + $_ + "*"
                    (gci -r -i $ignore).FullName
                }
$ignoreFiles = $ignoreFiles| ?{$_ -match  "\S"}

# Remove each of these file from Git 
$ignoreFiles | % { git rm $_}

git add .

কোন পরিস্থিতিতে এই ফাইলগুলির তালিকাটি পুনরাবৃত্ত - ক্যাশে সমান হবে না?
জন জাব্রোস্কি

8

কোনও নিরাপদ স্থানে ফাইলটি সরান বা অনুলিপি করুন, যাতে আপনি এটি হারাবেন না। তারপরে git rm ফাইলটি এবং কমিট করুন। আপনি যদি পূর্ববর্তী প্রতিশ্রুতিগুলির মধ্যে একটিতে ফিরে যান বা অন্য কোনও শাখা যেখানে এটি সরানো হয়নি সেখানে এখনও ফাইলটি প্রদর্শিত হবে। তবে ভবিষ্যতের সমস্ত কমিটে আপনি আবার ফাইলটি দেখতে পাবেন না। যদি ফাইলটি যদি গিটকে উপেক্ষা করে থাকে তবে আপনি এটিকে ফোল্ডারে ফিরিয়ে আনতে পারবেন এবং গিটটি এটি দেখতে পাবে না।


34
git rm --cachedফাইলটি ডিস্ক থেকে মোছা না করে সূচী থেকে সরিয়ে ফেলবে, সুতরাং এটিকে সরানো / অনুলিপি করার দরকার নেই
বিডনলান

7

git rm --cachedকমান্ডটি ব্যবহার করা মূল প্রশ্নের উত্তর দেয় না:

আপনি কীভাবে git[একটি ফাইল] সম্পর্কে সম্পূর্ণরূপে ভুলে যেতে বাধ্য করেন?

প্রকৃতপক্ষে, এই দ্রবণটি একটি কার্যকর করার সময় রিপোসেটরির প্রতিটি অন্যান্য ক্ষেত্রে ফাইলটি মুছে ফেলার কারণ ঘটায় git pull!

গিটকে কোনও ফাইল ভুলে যেতে বাধ্য করার সঠিক উপায়টি এখানে গিটহাব দ্বারা নথিভুক্ত করা হয়েছে

আমি ডকুমেন্টেশন পড়ার প্রস্তাব দিই, তবে মূলত:

git fetch --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch full/path/to/file' --prune-empty --tag-name-filter cat -- --all
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

কেবলমাত্র full/path/to/fileফাইলের পুরো পথ দিয়ে প্রতিস্থাপন করুন। আপনি নিজের ফাইলটি যুক্ত করেছেন তা নিশ্চিত করুন .gitignore

আপনার গিট ইতিহাস পরিবর্তন করার কারণে আপনার (অস্থায়ীভাবে) আপনার ভান্ডারগুলিতে নন-ফাস্ট-ফরোয়ার্ড ধাক্কা দেওয়ার অনুমতিও দিতে হবে।


5

BFG বিশেষভাবে, গীত Repos বড় ফাইল বা পাসওয়ার্ড মত অবাঞ্ছিত ডেটা সরানোর জন্য জন্য ডিজাইন করা হয়েছে, তাই এটি একটি সহজ পতাকা যে কোনো বৃহৎ ঐতিহাসিক (না-ইন-আপনার বর্তমান কমিট) ফাইল মুছে ফেলা হবে আছে: '--strip-blobs- চেয়ে বড়'

$ java -jar bfg.jar --strip-blobs-bigger-than 100M

আপনি যদি নাম দ্বারা ফাইলগুলি নির্দিষ্ট করতে চান তবে আপনি এটিও করতে পারেন:

$ java -jar bfg.jar --delete-files *.mp4

বিএফজি গিট ফিল্টার-শাখার চেয়ে 10-1000x দ্রুত এবং সাধারণত ব্যবহার করা অনেক সহজ - আরও তথ্যের জন্য সম্পূর্ণ ব্যবহারের নির্দেশাবলী এবং উদাহরণগুলি দেখুন।

সূত্র: https://confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.html


5

আপনি যদি সিএলআই ব্যবহার করতে না চান এবং উইন্ডোজে কাজ করছেন তবে খুব সহজ সমাধানটি হল টরটোইজিট ব্যবহার করা , এটি মেনুতে "মুছুন (স্থানীয় রাখুন)" অ্যাকশন রয়েছে যা সূক্ষ্মভাবে কাজ করে।


5

আমি জোনব্রেভের উত্তরটি পছন্দ করেছি তবে আমার কাছে অগোছালো পর্যাপ্ত কার্যনির্বাহী ডিরেক্টরি রয়েছে যা প্রতিশ্রুতিবদ্ধ - আমাকে কিছুটা ভয় দেয়, তাই আমি যা করেছি তা এখানে:

গিট কনফিগারেশন - গ্লোবাল ওরফে। এক্সক্লুড-এভ্রয়েড '! গিট এলএস-ফাইল -z --ignore - এক্সক্লুড-স্ট্যান্ডার্ড | xargs -0 গিট আরএম -r - ক্যাচড && গিট এলএস-ফাইল -z - স্বাক্ষরিত - নিবন্ধ-মানক | xargs -0 git মঞ্চ && গিট স্টেজ। gitignore && git কমিট -m "নতুন গিটিংগোর এবং সূচি উপেক্ষা করা ফাইলগুলি সরান" "

এটি ভেঙে:

git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached 
git ls-files -z --ignored --exclude-standard | xargs -0 git stage 
git stage .gitignore 
git commit -m "new gitignore and remove ignored files from index"
  • সূচি থেকে উপেক্ষা করা ফাইলগুলি সরান
  • পর্যায় .gitignore এবং আপনি সবে সরিয়ে ফেলা ফাইলগুলি
  • সমর্পণ করা

4

এটি সর্বশেষতম গিট (লেখার সময় v2.17.1) এ আর কোনও সমস্যা নেই

.gitignoreপরিশেষে ট্র্যাক কিন্তু-মোছা উপেক্ষা করে ফাইল। আপনি নিম্নলিখিত স্ক্রিপ্টটি চালিয়ে নিজের জন্য এটি পরীক্ষা করতে পারেন। চূড়ান্ত git statusবিবৃতিতে "প্রতিশ্রুতিবদ্ধ কিছু নয়" প্রতিবেদন করা উচিত।

# Create empty repo
mkdir gitignore-test
cd gitignore-test
git init

# Create a file and commit it
echo "hello" > file
git add file
git commit -m initial

# Add the file to gitignore and commit
echo "file" > .gitignore
git add .gitignore
git commit -m gitignore

# Remove the file and commit
git rm file
git commit -m "removed file"

# Reintroduce the file and check status.
# .gitignore is now respected - status reports "nothing to commit".
echo "hello" > file
git status

আমি আনন্দিত গিট এখন এটি করে। যাইহোক, ওপি .gitignore এ উপস্থিত ফাইলগুলিতে পরিবর্তনগুলি ট্র্যাক না করার বিষয়ে জিজ্ঞাসা করছে, এখনও কোনও স্থিতি দেখাচ্ছে এমন ফাইলগুলি মোছা হয়নি।
mrturtle

2

ইতিমধ্যে প্রতিশ্রুতিবদ্ধ ক্ষেত্রে DS_Store:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

এগুলি দ্বারা উপেক্ষা করুন:

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

অবশেষে, একটি অঙ্গীকার করুন!


2

বিশেষত IDE ভিত্তিক ফাইলগুলির জন্য, আমি এটি ব্যবহার করি:

উদাহরণস্বরূপ slnx.sqlite, আমি কেবল এটি নীচের মত সম্পূর্ণভাবে মুক্তি পেয়েছি:

git rm {PATH_OF_THE_FILE}/slnx.sqlite -f
git commit -m "remove slnx.sqlite"

এই বিষয়টি মনে রাখবেন যে এই ফাইলগুলির মধ্যে কয়েকটি স্থানীয় ব্যবহারকারীর সেটিংস এবং প্রকল্পগুলির পছন্দসমূহ (যেমন আপনার ফাইলগুলি কী খোলা ছিল) সংরক্ষণ করে। সুতরাং প্রতিবার আপনি যখন আপনার আইডিইতে নেভিগেট করেন বা কিছু পরিবর্তন করেন, তখন ফাইলটি পরিবর্তিত হয় এবং সেহেতু এটি পরীক্ষা করে দেখা হয় এবং অনির্ধারিত পরিবর্তন রয়েছে বলে প্রদর্শিত হয়।


2

গৃহীত উত্তরটি কোনও ফাইল সম্পর্কে গিটকে "ভুলে" দেয় না ... "(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>উদাহরণ এখানে পাওয়া যাবে


0

যদি কারও উইন্ডোজে হার্ড সময় হয় এবং আপনি পুরো ফোল্ডারটি উপেক্ষা করতে চান, 'সিডি' 'ফোল্ডারটি' পছন্দ করতে এবং 'গিট ব্যাশ এখানে' করতে চান to

git ls-files -z | xargs -0 git update-index --assume-unchanged

0

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

git rm -r --cached **/*.lock

এটি করার ফলে আমি যেখানে ছিলাম তার মূলের নীচে প্রতিটি ফোল্ডারে গিয়ে।

আশা করি এটি অন্যকে সহায়তা করবে!

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