ইতিমধ্যে চেক-ইন ডিরেক্টরিগুলির বিষয়বস্তু উপেক্ষা করছেন?


227

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

এখন আমি কেবল (উত্স) শ্রেণিবদ্ধ ফাইল কাঠামোটি গিট দ্বারা ট্র্যাক করা এবং (লক্ষ্য) সমতল ডিরেক্টরি (এক স্তূপের সমস্ত ফাইল সহ) উপেক্ষা করা উচিত।

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

আমি লক্ষ্য ডিরেক্টরিটি কীভাবে ভুলে যাব?


ডিরেক্টরিটির নাম কী এবং আপনি কী রেখেছেন .gitignore
মিমি মিমি

1
নামটি ডিআরনামআইরিলেভ্যালেন্ট এবং .gitignore এ আমি "DirNameIrrelevant", "DirNameIrrelevant /" এবং "DirNameIrrelevant / *" লাগানোর চেষ্টা করেছি
ফেলিক্সিজ

উত্তর:


524

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

git rm -r --cached <your directory>

-rবিকল্প আপনার ডিরেক্টরির অধীনে সমস্ত ফাইল অপসারণের কারণ।

--cachedবিকল্প শুধুমাত্র Git এর সূচীতে না আপনার কাজের কপি থেকে অপসারণ করা ফাইল কারণ। ডিফল্টরূপে git rm <file>মুছে ফেলা হবে <file>


আহ, ধন্যবাদ খুব দরকারী, যদিও আমি দেখতে পাচ্ছি না কেন এটি প্রয়োজনীয় হওয়া উচিত (কেন। গিটিগনোরের মধ্যে দির যোগ করার পক্ষে এটি পর্যাপ্ত নয়?)। আপনি কি আমাকে বলতে পারবেন - ক্যাচড কী?
ফেলিক্সিজ

নিশ্চিত করুন। দুটি বিকল্পের বর্ণনা দিতে আমি আমার উত্তরটি সংশোধন করেছি।
গর্ডন উইলসন

কেন এটি প্রয়োজনীয়, আমি কেবল অনুমান করতে পারি। আমি অনুমান করতে পারি যে আপনার প্রকল্পের গুরুত্বপূর্ণ অংশগুলি ভুলভাবে অনড় করে ফেলার ঝুঁকি হ্রাস করার জন্য স্রষ্টাগুলি ফাইলগুলি সরিয়ে ফেলতে চেয়েছিলেন তা স্পষ্ট হওয়া উচিত। আমি কল্পনাও করি প্রযুক্তিগত কারণগুলিও।
গর্ডন উইলসন

15
গিটিগনোরটি যাচাই করা হয়নি ফাইলগুলি গিটটি কী সম্পর্কে সচেতন হবে তা নির্ধারণ করতে; ইতোমধ্যে ট্র্যাক করা ফাইলগুলির এটির কোনও ফল নেই। যদি ব্যবহারকারী অন্যথায় উপেক্ষা করা ফাইলগুলি ট্র্যাক করতে চায় তবে গিট তাদের অনুমতি দেয়। এটি হয় ব্যবহার করে করা যেতে পারে add -fবা আপনার পরিস্থিতি হতে পারে। গর্ডন যেমন বলেছিলেন, এটি আপনাকে দুর্ঘটনাক্রমে অনেকগুলি ফাইল মুছে ফেলা থেকে বিরত রাখে - সংগ্রহশালা হ'ল গিটিগনোর নয়, মাস্টার তালিকা। এটি আপনাকে ম্যানুয়ালি কয়েকটি জিনিস ট্র্যাক করতে দেয় যা অন্যথায় কোনও ওয়াইল্ডকার্ড বিধি দ্বারা উপেক্ষা করা হবে, এমন কিছু যা আমি দরকারী বলে মনে করি।
ক্যাস্যাবেল

-rবিকল্প "আপনার ডিরেক্টরির অধীনে সমস্ত ফাইল অপসারণের কারণ" নয় বরং subdirs মাধ্যমে recurse করতে।
মিঃই

78

আপনার যদি একটি ট্র্যাক ফাইল থাকা দরকার (চেক ইন করা) তবে কোনও ফাইল আপনার স্থানীয় সংগ্রহস্থল এবং দূরবর্তী সংগ্রহস্থলে রাখার সময় এটির আরও পরিবর্তনগুলি ট্র্যাক করতে না চান তবে এটি দিয়ে করা যেতে পারে:

git update-index --assume-unchanged path/to/file.txt

এরপরে এই ফাইলে কোনও পরিবর্তন আর দেখা যাবে না git status


1
ওপি হয়ত কোনও ডিরেক্টরি জিজ্ঞাসা করতে পারে, ঠিক এটিই আমি খুঁজছিলাম - ফাইলটিতে চেক করা এককটিতে আরও পরিবর্তনগুলি উপেক্ষা করে; ধন্যবাদ!
sdaau

1
কোনও ডিরেক্টরি উপেক্ষা করার জন্য পুরোপুরি 'গিট আপডেট-ইনডেক্স --assume- অপরিবর্তিত dirName / *' ব্যবহার করুন। সিনট্যাক্সটি খুঁজতে আমার কিছুটা সময় লেগেছিল, এখানে '*' দরকার
জে-ডিজল

1
কিভাবে এই বিপরীত হবে?
রাইস

3
এটির বিপরীতে @ রাইস:git update-index --no-assume-unchanged dirname/**/*
জবজব

3

blah/গিটকে যুক্ত করা সাব-ডিরেক্টরিতে , নিম্নলিখিত দুটিই নতুন ফাইলগুলিকে উপেক্ষা করার জন্য কাজ করছে বলে মনে হচ্ছে blah/। .Gitignore এ যুক্ত হয়েছে:

blah 
blah/*

1

আপনার গিট সংগ্রহস্থল পরিষ্কার করার জন্য টিএল; ডিআর আপনার সমস্ত উপেক্ষা করা আইটেমগুলি সত্যই উপেক্ষা করা হয়েছে তা নিশ্চিত করতে :

git rm -r --cached .
git add .
git commit -m "Clean up ignored files"

দ্রষ্টব্য: আপনাকে কোনও ডিরেক্টরি নির্দিষ্ট করার দরকার নেই, এভাবে আপনি পুরো দূরবর্তী রেপো পরিষ্কার করছেন ।

আরো যেতে পড়া এই


0

নিশ্চিত না যে এটি আমাকে খারাপ ব্যক্তি হিসাবে গণ্য করেছে বা করে তোলে তবে এখানে এটি চলে যায়।

  1. আমি *Generated*রুট .gitignore ফাইলটিতে যুক্ত করেছি
  2. আমি যে ফাইলগুলি জেনারেটেডফাইলে রাখতে চাই তা জমা দিয়েছি W CheckedIn
  3. এটি করার জন্য একটি পাওয়ারশেল স্ক্রিপ্ট কল করতে আমি পোস্ট চেকআউটটিতে একটি গিট হুক করেছি:

dir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}

আমি নিজের সম্পর্কে কিছুটা খারাপ বোধ করি ... তবে এটি বাস্তবে কাজ করে।


-2

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

কমপক্ষে, এই পরিস্থিতিতে আমার পক্ষে এটি কাজ করেছিল। কেউ কি ঘটছে সে সম্পর্কে আরও অন্তর্দৃষ্টি দিতে পারলে এখনও দুর্দান্ত হবে।


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

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