ফাইল উপেক্ষা (তবে মুছুন না) গিটিগনোর ব্যবহার করে


98

আমার গিট রেপোতে আমার একটি টিএমপি ডিরেক্টরি রয়েছে যা আমি এখনও থাকতে চাই, তবে উপেক্ষা করা হবে। আমি এটিকে যুক্ত করেছিলাম .gitignore, তবে git statusএখনও আমাকে সেই ডিরেক্টরিতে থাকা ফাইলগুলির পরিবর্তনগুলি সম্পর্কে বলে। আমি চেষ্টা করেছি git rm -r --cached, কিন্তু এটি এটি দূরবর্তী রেপো থেকে সরিয়ে দেয়। আমি কীভাবে এই ডিরেক্টরিতে পরিবর্তনগুলি ট্র্যাকিং বন্ধ করতে পারি, তবে তারপরেও এটি বিদ্যমান থাকতে দেয়? 1 টি ফাইলের জন্যও আমার এটি করা দরকার, তবে এতে পরিবর্তনগুলি সেগুলিকে আইএনএস করার git statusপরেও প্রদর্শিত হবে .gitignore। আমার কি করা উচিৎ?


4
আপনার .gitignore ফাইলটি দেখতে ঠিক কেমন দেখাচ্ছে দয়া করে লিখুন?
কেডিহাইরি

উত্তর:


184

পরিবর্তে .gitignore, আপনি নিম্নলিখিত কমান্ড চালিয়ে স্থানীয় গিট সংগ্রহস্থল আপডেট করতে পারেন:

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

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


22
আমার গিটার প্রতি ভালবাসা সবেমাত্র দ্বিগুণ হয়ে গেছে।
মার্ক ফক্স

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এর সাথে লিঙ্ক দেওয়ার জন্য ধন্যবাদ।
গওয়েম

4
এটিকে দূরবর্তী রেপোতে ঠেলার কোনও উপায় আছে কি?
ব্রায়ান অরটিজ

4
হুম আমি তার পরিবর্তে কোনও ফাইল চিহ্নিত করব "এটি কোনও গিট ফাইল নয়, এটি কখনও
গিটের

11
আপনি এটি দিয়ে ফিরে যেতে পারেন git update-index --no-assume-unchanged <file>। আপনি যদি তাদের তালিকা করতে চান git ls-files -v | grep '^h'
সংঘিউন লি

12

ফাইলগুলিকে উপস্থিত থাকার অনুমতি দেওয়ার সময় করা পরিবর্তনগুলি উপেক্ষা করা এর সঠিক উদ্দেশ্য .gitignore। সুতরাং ফাইলগুলি (বা ডিরেক্টরিগুলি) যুক্ত করা .gitignoreকেবলমাত্র আপনাকেই করতে হবে।

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

একে অপরের সংগ্রহস্থলের উপর অপসারণ রোধ করতে আপনি করতে পারেন:

  • (স্পষ্টত) কোথাও ফাইলগুলি ব্যাকআপ করুন, পরিবর্তনগুলি টানুন এবং ফাইলগুলি পুনরুদ্ধার করুন,
  • অথবা আপনার পরিবর্তনগুলি টানানোর আগেgit rm --cached ফাইলগুলিও প্রতিশ্রুতিবদ্ধ করুন । গিট ইতিমধ্যে অপ্রত্যাশিত ফাইলগুলিকে স্পর্শ না করে দুটি অপসারণকে সুন্দরভাবে মার্জ করবে।

6
এটি সত্য হতে হবে না ("ট্র্যাকিং বন্ধ করুন = ফাইল সরান")। আপনি এখনও একটি ফাইলকে একটি রেপো ট্র্যাক করা এবং ব্যবহার দেখতে না কোন পরিবর্তন তৈরী হতে পারে git update-index --assume-unchanged <file>। : কটাক্ষপাত blog.pagebakers.nl/2009/01/29/...
ducin

এটি আমার সমস্যার সমাধান করেছে কারণ আমাকে গিটের মধ্যে git rm --cached <filename> -r পুশ রেপোসিটারি থেকে ফাইলটি সরিয়ে ফেলতে হবে এবং এই ধাক্কার পরে পুনরায় রেজিস্ট্রিতে পরিবর্তন করা হবে যাতে ফাইলটি সরানো হয়
ভিনিসিয়াস কার্ডোসো

7

/আপনার .gitignoreফাইলের ডিরেক্টরি নামের শেষে একটি রাখুন

tmp/

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

git rm -rf ./tmp/
git commit -m "untrack tmp dir"
mkdir tmp
echo tmp/ >> .gitignore
git add .gitignore ; git commit -m "add tmp/ to ignore list"

ডিরেক্টরিতে নতুন ফাইলগুলি ট্র্যাক করা হবে না।

--cachedবিকল্পটি কেবল git rmসূচকে কাজ করে (আরও কম-বেশি পরিবর্তন মুলতুবি থাকে)। কার্যকারী গাছ বা যা ট্র্যাক করা হয়েছে বা কী হয়েছে তার স্থিতির উপর এর কোনও প্রভাব নেই।


আমার ওটা আছে. উভয় the/dir/এবংthe/dir/*
21312312

আরে ম্যাট, আমি যদি বিভিন্ন ফোল্ডারে আমার / মিডিয়া জাতীয় কিছু উপেক্ষা করতে চাই যা উপেক্ষা করতে চাই, তবে তা কি সম্ভব? সুতরাং / 1 / মিডিয়া, / 2 / মিডিয়া, 99 পথ পছন্দ করে?
নিক

3

.gitignore এর ট্র্যাক করা ফাইলগুলিতে কোনও প্রভাব নেই।

আপনি যা চান তা হ'ল টিএমপি / ডিরেক্টরিতে থাকা ফাইলগুলিতে অনুমান-অপরিবর্তিত বিট সেট করা। এটি করার জন্য এখানে একটি ভাল ব্যাখ্যা রয়েছে: গিট: কেবল স্থানীয় রেপোতে একটি ফাইল আনট্র্যাক করুন এবং এটি দূরবর্তী রেপোতে রাখুন

এছাড়াও, ডিরেক্টরিতে সমস্ত ফাইল - গিট আপডেট-ইনডেক্স - ডিরেক্টরিতে অপরিবর্তিত - গ্যাস আপডেট-ইনডেক্স -অপরিবর্তিত সেট করার জন্য ওয়ান-লাইনার ।


1

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

আমি যা বুঝতে পারি তা থেকে গিট এটি করতে পারে না। আপনি হয় একটি ফাইল ট্র্যাক করতে পারেন, না। আপনি যদি কোনও ফাইল ট্র্যাক করেন তবে এটি দূরবর্তী রেপোতে উপস্থিত রয়েছে এবং আপনি যখন এতে পরিবর্তন করেন তখন পরিবর্তন হয়। আপনি যদি কোনও ফাইল ট্র্যাক না করেন তবে এটি দূরবর্তী রেপোতে বিদ্যমান নেই।

যেহেতু আপনি গিটের সাথে যা চান ঠিক তা করা সম্ভব নয়, আপনার যথাযথ পরিস্থিতির উপর নির্ভর করে সম্ভাব্য অন্যান্য সমাধান রয়েছে। উদাহরণস্বরূপ, index.phpআপনি স্থানীয়ভাবে এটিকে পরিবর্তন করলে কেন আপনি দূরবর্তীটিতে পরিবর্তন করতে চান না ? ফাইলটিতে কি ব্যবহারকারী-নির্দিষ্ট সেটিংস রয়েছে? যদি এটি হয় তবে আপনি এটি করতে পারেন:

cp index.php index_template.php
git rm --cached index.php

আপনি এখনই ইডেক্স_টেম্পলেট.এফপিটি সম্পাদনা করুন আপনি এটি রিমোট রেপোতে প্রদর্শিত হতে চান। আপনার সংগ্রহস্থল ব্যবহার করে লোকদের বলার জন্য আপনার README তে কিছু যুক্ত করুন যে তারা একবার এটি ক্লোন করে নিলে তাদের অবশ্যই index_template.php অনুলিপি করতে হবে এবং তাদের প্রয়োজন অনুসারে এটি সম্পাদনা করতে হবে।

git add index_template.php
git add README
git commit -m 'added template index.php file'
git push

যখন কেউ আপনার রেপো ক্লোন করে, তাদের অবশ্যই তাদের নিজস্ব তৈরি করতে হবে index.php। আপনি তাদের জন্য এটি সহজ করে দিয়েছেন: কেবল কম্পিউটার-নির্দিষ্ট সেটিংসের সাথে অনুলিপি index_template.phpকরুন index.phpএবং এটি সংশোধন করুন।

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