গিট আমার নির্দিষ্ট ফাইলটিকে কেন উপেক্ষা করবে না?


190

আমি নিম্নলিখিত লাইনটি যুক্ত করেছি .gitignore:

sites/default/settings.php

তবে আমি টাইপ করার সময় git statusএটি ফাইলটি অচিহ্নিত ফাইল হিসাবে দেখায়।

সমস্যা কি? অন্যান্য সমস্ত নিদর্শনগুলি ভালভাবে কাজ করে।



আমারও একই সমস্যা ছিল, তারপরে আমি আবিষ্কার করেছিলাম যে আমি নিজের .gitignore ফাইলটিকে অন্য ড্রাইভে সংরক্ষণ করেছি: মুখের তালু:
হেনরি চ্যান

আপনার স্টোরগুলিতে রাখা এবং এতে পরিবর্তনগুলি উপেক্ষা করা খুব খারাপ ধারণা।
ইয়েভেগেনি আফানসিয়েভ

উত্তর:


364

নিশ্চিত করুন যে আপনার করুন .gitignoreকাজ ডিরেক্টরি root- র মধ্যে, এবং যে ডিরেক্টরি রান git statusএবং কপি অবস্থা আউটপুট থেকে ফাইল পাথ এবং এটি পেস্ট .gitignore

যদি এটি কাজ না করে, তবে সম্ভবত আপনার ফাইলটি ইতিমধ্যে গিট দ্বারা ট্র্যাক হয়েছে। আপনি আউটপুট মাধ্যমে এটি নিশ্চিত করতে পারেন git status। যদি ফাইলটি "অবরুদ্ধ ফাইলগুলি" বিভাগে তালিকাভুক্ত না করা হয় , তবে এটি ইতিমধ্যে গিট দ্বারা ট্র্যাক করা হয়েছে এবং এটি .gitignoreফাইল থেকে নিয়মটিকে উপেক্ষা করবে ।

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

আসলে ফাইলটি উপেক্ষা করার জন্য, আপনাকে এটিটি আনআর্যাক করতে হবে এবং এটি সংগ্রহস্থল থেকে সরিয়ে ফেলতে হবে। আপনি এটি ব্যবহার করে করতে পারেন git rm --cached sites/default/settings.php। এটি শারীরিকভাবে ফাইলটি মোছা না করেই সংগ্রহস্থল থেকে ফাইলটি সরিয়ে দেয় (এটিই --cachedহয়)। এই পরিবর্তনটি প্রতিশ্রুতি দেওয়ার পরে ফাইলটি সংগ্রহস্থল থেকে সরিয়ে ফেলা হবে এবং এড়ানো এটিকে সঠিকভাবে কাজ করা উচিত।


'ওয়ার্কিং ডিরেক্টরিের মূল' বলতে কী বোঝ? ডিরেক্টরিটি যেখানে '.git' সংগ্রহস্থলটি পাওয়া যায়?
জোনাথন লেফলার

ওয়ার্কিং ডিরেক্টরি হ'ল ডিরেক্টরিটি .gitডিরেক্টরিটি অবস্থিত এবং যা নিজেই সংগ্রহস্থলের মূল। আপনি যখন কোনও সংগ্রহস্থলটিকে ক্লোন করেন /xy/তখন /xy/তার মতো অভ্যন্তরীণ আপনার কার্যকরী ডিরেক্টরি /xy/.git/
অকর্মা

3
এছাড়াও কখনো কখনো একটি এটি করতে হবে git add .পরে git rm --cachedসঠিকভাবে সূচক পুনর্নির্মাণের।
কুপার

গিট স্ট্যাটাসে এটি পরীক্ষা করার ধারণাটি ছিল উজ্জ্বল। আমি এটিকে গ্রিপসে গিট স্টেজিংয়ে যাচাই করেছিলাম এবং পথটি ভুল ছিল। ধন্যবাদ!
ওয়াল্লা

1
আমি নেস্ট ফোল্ডারগুলি খুব চেক ইন করে থাকায় আমাকে আর -আর (পুনরাবৃত্ত) পতাকা যুক্ত করতে হবে। আমার ক্ষেত্রে আমি আমার গিট ফোল্ডারের মূলটিতে চলে এসেছি তারপর git rm --cached -r .vs / কমান্ডটি চালিয়েছি যেখানে বনাম শীর্ষস্থানীয় ফোল্ডারটি ছিল যা আমি ট্র্যাকিং থেকে অপসারণ করতে চাইছিলাম।
ডেভোলজি লিমিটেড

105

আমি এটি চালাচ্ছি, এটি একটি পুরানো প্রশ্ন, তবে আমি চাই যে ফাইলটি ট্র্যাক করা হোক তবে এটি নির্দিষ্ট কাজকর্মের অনুলিপিগুলিতে ট্র্যাক না করে আপনি চালাতে পারেন এমনটি করতে

git update-index --assume-unchanged sites/default/settings.php

5
এটাই আসলে আমি উত্তরটি খুঁজছিলাম। অন্যান্য সমস্ত উত্তর ধরে নেওয়া যায় যে ফাইলটি গিট অ্যাডের সাথে যুক্ত হয়েছিল, যা সবসময় হয় না। অ্যাকুইয়া ক্লাউডের সাথে .gitignore ফাইলটি সেটিংস.এফপি উপেক্ষা করবে (উদাহরণস্বরূপ) তবে ফাইলটি প্রথম কমিটের সাথে অন্তর্ভুক্ত করা হয়েছে। ফাইলটি সন্ধান না করা, কেবল এটি সংগ্রহস্থল থেকে মুছে ফেলা হয়, তাই এটি লাইভ সাইট থেকে মুছে ফেলা হয় ...
প্যাট্রিক এস

আমাকেও সাহায্য করেছেন - ধন্যবাদ! ভোট দিয়েছেন। আমি সন্দেহ করি যদিও এটি কেবল স্থানীয় গিট রেপোতে প্রযোজ্য এবং একবারে দূরবর্তী স্থানে ধাক্কা দিয়ে অন্য দেবগণের দ্বারা ক্লোন করা অবিরত থাকবে না?
ইভান

1
হ্যাঁ, এটি কেবল স্থানীয়।
মেসকালিটো

40

.gitignore কেবলমাত্র সেই ফাইলগুলিকেই উপেক্ষা করবে যা আপনি ইতিমধ্যে আপনার ভাণ্ডারে যোগ করেন নি।

আপনি যদি এটি করেন git add .এবং ফাইলটি সূচীতে যুক্ত হয়ে যায়, .gitignore আপনাকে সাহায্য করবে না। আপনি এটি করতে হবে git rm sites/default/settings.phpএটা মুছে ফেলার জন্য, এবং তারপর এটি উপেক্ষা করা হবে।


ধন্যবাদ.but তবে আমি কীভাবে ফাইলটিকে কেবল সূচক থেকে সরান এবং কার্যক্ষম ডিরেক্টরি থেকে নয়?
নিক। এইচ

1
git rmএটি করা উচিত, তবে এটি আপনাকে -f বিকল্পটি ব্যবহার করতে বলছে যা এটি ওয়ার্কিং ডিরেক্টরি থেকে মুছে ফেলবে। আমি ফাইলটির একটি অনুলিপি তৈরি করা, না করে git rm -fএবং অনুলিপিটি পুনরুদ্ধার করা ছাড়া অন্যটি বের করতে পারি নি ।
jonescb

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

16

দয়া করে এই আদেশটি ব্যবহার করুন

git rm -rf --cached .
git add .

কখনও কখনও .gitignore ফাইলগুলি সঠিক হওয়া সত্ত্বেও কাজ করে না। গিট ফাইলগুলি উপেক্ষা করার কারণ হ'ল এগুলি সংগ্রহস্থলে যুক্ত করা হয়নি। আপনি যদি এমন কোনও ফাইল যুক্ত করেন যা আপনি আগে উপেক্ষা করতে চান তবে এটি গিট দ্বারা ট্র্যাক করা হবে এবং কোনও স্কিপিং মেলানো নিয়ম এড়িয়ে যাবে। গিট এটি করে কারণ ফাইলটি ইতিমধ্যে ভাণ্ডারের অংশ।


12

আমারও একই সমস্যা ছিল। ফাইলগুলি .gitingoreচালিত হওয়ার সময় অ্যাক্র্যাকড ফাইল হিসাবে তালিকাভুক্ত যেখানে নির্ধারিত git status

কারণটি ছিল .gitignoreফাইলটি UTF-16LEএনকোডিংয়ে সংরক্ষণ করা হয়েছিল, এনকোডিংয়ে নয় UTF8

.gitignoreফাইলটির এনকোডিংটি পরিবর্তন করার পরে UTF8এটি আমার পক্ষে কাজ করেছিল।


আমি এই কারণে একটি নুবির মত অনুভব করছি ... এটি উইন্ডো ড্যাং করুন
কোটি এমব্রি

ফাইল এনকোডিংয়ের বিষয়টি কেন গুরুত্বপূর্ণ? সঠিকভাবে পথ পড়ছে না?
চার্জ্ন

2

আমি কি উপেক্ষা করা তা settings.php ফাইল সফলভাবে:

  1. গিট আরএম - ক্যাশেড সাইট / ডিফল্ট / সেটিংস.পিএফ
  2. প্রতিশ্রুতিবদ্ধ (এখানে কাজ করে না)
  3. ম্যানুয়ালি মুছে ফেলা সাইট / ডিফল্ট / সেটিংস.এফপি (এটি কৌশলটি করেছে)
  4. গিট অ্যাড
  5. প্রতিশ্রুতিবদ্ধ (সফলভাবে উপেক্ষা)

আমি মনে করি যদি গিটের প্রতিশ্রুতিবদ্ধ ফাইল থাকে তবে প্রত্যাশিতভাবে কাজ করে না উপেক্ষা করুন। কেবল ফাইলটি মুছুন এবং প্রতিশ্রুতিবদ্ধ। পরে তা উপেক্ষা করা হবে।


2

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

git update-index --skip-worktree path/to/file

আপনি নিশ্চিত করতে পারেন যে ফাইলগুলি তালিকাবদ্ধ করে এসকে দিয়ে স্কিপডের জন্য শুরু হওয়া লাইনগুলি পরীক্ষা করে ফাইলগুলি এড়িয়ে গেছে

git ls-files -v | grep ^S

যদি ভবিষ্যতে আপনি গিটটি স্থানীয়ভাবে ফাইলটি পরিচালনা করতে চান তবে কেবল চালনা করুন:

 git update-index --no-skip-worktree path/to/file

উপরের মেসকালিটোর একটি দুর্দান্ত উত্তর ছিল, যা আমাকে সঠিক ট্র্যাকের দিকে নামিয়েছিল তবে

গিট আপডেট-ইনডেক্স - এসেসিউম-অপরিবর্তিত ফাইল / টু / উপেক্ষা করুন ph

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

যাইহোক, আমি ফাইলগুলির বিষয়বস্তু পরিবর্তন করি, তাই আমার ক্ষেত্রে --স্কিপ-ওয়ার্ক্রিট আরও ভাল বিকল্প।

তোশিহারু নিশিনার ওয়েবসাইটটি স্কিপ-ওয়ার্ক্রিট্রি বনাম অনুমান-অপরিবর্তিতের একটি দুর্দান্ত ব্যাখ্যা প্রদান করেছে: স্থানীয়ভাবে গিটের সাথে পরিচালিত ফাইলগুলি উপেক্ষা করুন


2

আর একটি সম্ভাব্য কারণ - গিট ক্লায়েন্টদের একই সময়ে চলমান কয়েকটি দৃষ্টান্ত । উদাহরণস্বরূপ "গিট শেল" + "গিটহাব ডেস্কটপ" ইত্যাদি


আমার সাথে এটি ঘটেছিল, আমি "গিটহাব ডেস্কটপ" কে মূল ক্লায়েন্ট হিসাবে ব্যবহার করছিলাম এবং এটি কিছু নতুন .gitignore সেটিংস উপেক্ষা করছে: প্রতিশ্রুতি দেওয়ার পরে প্রতিশ্রুতিবদ্ধ:

  1. আপনি কিছু প্রতিশ্রুতিবদ্ধ।
  2. পরবর্তী, প্রতিশ্রুতিবদ্ধ: এটি .gitignore সেটিংস উপেক্ষা করে। কমিটে .gitignore এ উল্লিখিত প্রচুর টেম্প ফাইল রয়েছে।
  3. গিট ক্যাশে সাফ করুন; .gitignore UTF8 কিনা তা পরীক্ষা করুন; ফাইলগুলি সরান -> প্রতিশ্রুতি -> ফাইলগুলি আবার সরান; 1 টি এড়িয়ে চলুন - কিছুই সাহায্য করেনি nothing

কারণ : ভিজ্যুয়াল স্টুডিও কোড সম্পাদক একই খোলার সংগ্রহশালা সহ পটভূমিতে চলছিল। ভিএস কোডে অন্তর্নির্মিত গিট নিয়ন্ত্রণ রয়েছে এবং এটি কিছু বিবাদ সৃষ্টি করে।

সমাধান : একাধিক, লুকানো গিট ক্লায়েন্টদের ডাবল-চেক করুন এবং একবারে কেবলমাত্র একটি গিট ক্লায়েন্ট ব্যবহার করুন, বিশেষত গিট ক্যাশে সাফ করার সময়।


1

.Gitignore এর কোনও এক্সটেনশন না রয়েছে তা নিশ্চিত করুন !! এটি .gitignore.txt হতে পারে না, উইন্ডোতে কেবল ফাইলটির নাম .gitignore। এবং এটি কাজ করবে।


0

আমি এইটি কেবল 1.7.3.1 গিট দিয়ে চেষ্টা করেছি এবং এর মতো একটি কাঠামো দিয়েছি:

repo/.git/
repo/.gitignore
repo/sites/default/settings.php

যেখানে repoএইভাবে উপরে উল্লিখিত "রুট" রয়েছে (আমি এটিকে আপনার কার্যকারী গাছের মূল বলব), এবং .gitignoreকেবল এতে রয়েছে sites/default/settings.php, উপেক্ষা করা আমার পক্ষে কাজ করে (এবং .gitignoreরেপোতে যুক্ত হয়েছে কি না তা বিবেচ্য নয়)। এটি কি আপনার রেপুর বিন্যাসের সাথে মেলে? যদি তা না হয় তবে কী আলাদা?


হ্যাঁ.এটি হুবহু একই রকম।
নিক এইচ।

আমি মনে করি আপনার ভাণ্ডারগুলিতে জিনিস রাখা এবং এতে পরিবর্তনগুলি উপেক্ষা করা খুব খারাপ ধারণা।
ইয়েভেগেনি আফানসিয়েভ

সংকলনের আউটপুট, আইডিই ব্যবহারকারীর সেটিংস, আপনার সরঞ্জামচেন দ্বারা তৈরি অন্যান্য সমস্ত টেম্প ফাইলের মতো জিনিসগুলি বাদে @ ইয়াভেগেনিআফানাসেয়েভ…
ক্রিস এফ ক্যারল

আমি বলতে চাইছি কেবলমাত্র প্রকল্পের ফোল্ডারে বসে থাকা ফাইলগুলি নয়, ভাণ্ডারগুলিতে প্রতিশ্রুতিবদ্ধ keeping আপনার সংগ্রহস্থলটিতে টেম্প ফাইলগুলির প্রয়োজন কেন?
ইয়েভেগেনি আফানসিয়েভ

0

ভবিষ্যতে কারও ক্ষেত্রে একই সমস্যা হ'ল আমি যা করেছি:

আপনি যদি ব্যবহার

*
!/**/
!*.*

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

!*.*

0

আমি উপরের ভিএস কোড টার্মিনালে বেশিরভাগ কমান্ড ব্যবহার করে দেখেছি এবং এর মতো ত্রুটি পেয়েছি:

fatal: pathspec '[dir]/[file]' did not match any files

আমি গিটিহাব ডেস্কটপে প্রকল্পটি খুলেছি এবং সেখান থেকে উপেক্ষা করেছি এবং এটি কার্যকর হয়েছে।

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