কোন গিটিগনোর নিয়মটি আমার ফাইলটিকে উপেক্ষা করছে তা ব্যাখ্যা করুন


310

কিছু ফাইল কেন গিট দ্বারা উপেক্ষা করা হচ্ছে তা দেখার কোনও উপায় আছে (অর্থাত কোনও .gitignoreফাইলের কোন নিয়ম ফাইলটিকে উপেক্ষা করছে)?

শত শত ফোল্ডার এবং দশ সহস্র .gitignoreফাইল সহ আমার এই (বা আরও জটিল পরিস্থিতি আছে) কল্পনা করুন :

/
-.gitignore
-folder/
    -.gitignore
    -subfolder/
              -.gitignore
              -file.txt

যদি আমি git add folder/subfolder/file.txtগিট চালনা করি তবে এটিকে উপেক্ষা করার অভিযোগ উঠতে পারে:

The following paths are ignored by one of your .gitignore files:
folder/subfolder/file.txt
Use -f if you really want to add them.

সম্ভাব্য সকলের মধ্যে .gitignoreএই ফাইলটিকে উপেক্ষা করার নিয়ম রয়েছে এবং এটিও নিয়মটি দেখানোর কোনও উপায় আছে কি ? ভালো লেগেছে:

The following paths are ignored by your folder/.gitignore file (line 12: *.txt)
folder/subfolder/file.txt
Use -f if you really want to add them.

বা শুধু:

$ git why-is-ignored folder/subfolder/file.txt
folder/.gitignore:12:*.txt

4
দ্রষ্টব্য: git check-ignoreশীঘ্রই (git1.8.5 / 1.9) এর একটি --no-indexবিকল্প থাকবে। দেখুন নিচের আমার উত্তর
VonC

দ্রষ্টব্য: GIT_TRACE_EXCLUDE=1 git statusশীঘ্রই .gitignoreনিয়মগুলি ডিবাগ করার একটি অতিরিক্ত উপায় হবে । দেখুন নীচের আমার সম্পাদিত উত্তর
VonC

সম্পর্কিত ব্লগ পোস্ট: danielcompton.net/2016/04/21/…
krlMLr

উত্তর:


643
git check-ignore -v filename

দেখুন man পৃষ্ঠা আরো বিস্তারিত জানার জন্য।

আসল উত্তর অনুসরণ:

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

আপডেট: বাহ, এটি আমার প্রত্যাশার চেয়ে অনেক বেশি শক্ত ছিল। এর নাড়িভুঁড়ি gitএর হ্যান্ডলিং বাদ দিন বেশ রহস্যপূর্ণ হয়। যাই হোক, এখানে একটি প্রায় করে সমাপ্ত সিরিজে যা আজকের মূল প্রজেক্টের ক্ষেত্রে প্রযোজ্য masterশাখা। পরীক্ষার স্যুটটি 99% সম্পূর্ণ, তবে আমি --stdinএখনও বিকল্পটি পরিচালনা করা শেষ করি নি। আশা করি আমি এই সপ্তাহান্তে পরিচালনা করব, এবং তারপরে আমার প্যাচগুলি গিট মেলিং তালিকায় জমা দেব।

ইতিমধ্যে, আমি যে কেউ এটি করতে সক্ষম তার কাছ থেকে অবশ্যই পরীক্ষার স্বাগত জানাব - কেবল আমার gitকাঁটাচামড়া থেকে ক্লোন করুন , check-ignoreশাখাটি পরীক্ষা করে দেখুন এবং এটিকে স্বাভাবিক হিসাবে সংকলন করুন।

আপডেট 2: এটি সম্পন্ন হয়েছে! উপরে বর্ণিত হিসাবে সর্বশেষতম সংস্করণটি গিথুবে রয়েছে এবং আমি পিয়ার পর্যালোচনার জন্য প্যাচ সিরিজটি গিট মেলিং তালিকায় জমা দিয়েছি । আসুন দেখি তারা কী ভাবছে ...

আপডেট 3: আরও কয়েক মাস হ্যাকিং / প্যাচ রিভিউ / আলোচনা / প্রতীক্ষার পরে, আমি বলতে পেরে আনন্দিত যে এই বৈশিষ্ট্যটি এখন গিটের masterশাখায় পৌঁছেছে , এবং পরবর্তী প্রকাশে উপলব্ধ হবে (1.8.2, প্রত্যাশিত 8 ম মার্চ 2013)। check-ignoreম্যানুয়াল পৃষ্ঠা এখানে । ভাই, এটাই আমার প্রত্যাশার চেয়ে বেশি কাজ ছিল!

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


2
আমি 1.8.2 ব্যবহার করছি এবং git check-ignoreকিছুই করি না।
জাকদানস

3
@ ইয়োরফ্রেন্ডজাক কোনও সন্দেহের ছায়া ছাড়াই git check-ignoreউপস্থিত এবং 1.8.2 তে কাজ করছেন in যদি আচরণটি আপনি প্রত্যাশা মতো না হন তবে আমি আপনাকে পরামর্শ দিচ্ছি (পুনরায়) ম্যানুয়াল পৃষ্ঠাটি পড়ুন এবং যদি তা এখনও না হয় তবে দয়া করে গিট মেলিং তালিকায় একটি সঠিক বাগ রিপোর্ট জমা দিন। এটি কিছু না বলে কেবল বলা খুব কার্যকর নয়। আমি তোমাদের সম্ভবত একটি অ-উপেক্ষিত ফাইলে এটি চালানোর এবং ভুল কিছু আউটপুট আশা করছি (যদিও আমি সম্ভবত সমর্থনের জন্য যোগ হবে আশা --show-unmatchedকরতে --verboseআউটপুট মোড ভবিষ্যতে)।
অ্যাডাম স্পায়ার্স

1
@ অ্যাডামস্পিয়ার্স আপনি ঠিক বলেছেন আমার উল্লেখ করা উচিত ছিল যে আমি যখন কমান্ডটি কার্যকর করি তখন কিছুই মুদ্রিত হয় না। কোনও ত্রুটি বার্তা, কোনও সাফল্যের বার্তা, কোনও তথ্য নেই। ঠিক পরেরটি, ফাঁকা প্রম্পট প্রদর্শিত হচ্ছে। সুতরাং আমি কি ধরে নিতে পারি যে কিছু পরিস্থিতিতে "কোনও আউটপুট" প্রত্যাশিত আচরণ প্রত্যাশিত নয়?
জাকদানস

1
@ অ্যাডামস্পিয়ার্স এর জন্য আপনাকে অনেক ধন্যবাদ! 3 দিনের তদন্তের পরে আপনি .gitignore_global এ বিশ্বব্যাপী উপেক্ষা করা ফাইলের কারণে আপনি কেবলমাত্র ব্রেকিং বিল্ডের কারণ অনুসন্ধান করতে আমাকে সহায়তা করেছেন! আমি জানি না যে এটি একটি জিনিস ছিল!
বেনবিটিজি

3
এটি প্রতিদিন নয় যে কেউ একজন স্ট্যাক ওভারফ্লো বিকাশকারী বিকাশকারী বৈশিষ্ট্যটি বাস্তবায়নের জন্য এতগুলি পরিবর্তন করে দেখে। বাহ এবং শ্রদ্ধা।
ব্যবহারকারী 3613932

18

গিট ২.৮ (মার্চ ২০১)) আপডেট করুন:

GIT_TRACE_EXCLUDE=1 git status

দেখুন " যাচাই করতে একটি উপায় .gitignoreফাইল "

এটি git check-ignore -vনীচে বর্ণিত পরিপূরক ।


আসল উত্তর: সেপ্টেম্বর 2013 (গিট 1.8.2, তারপরে 1.8.5+):

git check-ignore1.8.5 / 1.9 গিটে আবার উন্নতি হয়েছে (Q4 2013) :

" git check-ignore" " git add" এবং " git status" হিসাবে একই নিয়ম অনুসরণ করে যে উপেক্ষা / বাদ দেওয়ার পদ্ধতিটি ইতিমধ্যে ট্র্যাক করা পাথগুলিতে কার্যকর হয় না।
" --no-index" বিকল্পের সাহায্যে, এটি নির্ধারণ করতে ব্যবহার করা যেতে পারে যে কোন পথগুলি উপেক্ষা করা উচিত ছিল তা ভুল করে সূচীতে যুক্ত করা হয়েছে

দেখুন 8231fa6 কমিট থেকে https://github.com/flashydave :

check-ignoreবর্তমানে .gitignoreনিয়মগুলি কীভাবে অনিবন্ধিত পথগুলিকে আচরণ করবে তা দেখায় । ট্র্যাক করা পথগুলি কার্যকর আউটপুট তৈরি করে না।
এই পথটি প্রথমে সূচক থেকে অপসারণ না করা হলে কেন অপ্রত্যাশিতভাবে কোনও পাথ ট্র্যাক হয়ে যায় তার ডিবাগিং প্রতিরোধ করে git rm --cached <path>

বিকল্পটি --no-indexকমান্ডকে সূচকে থাকা পথটির জন্য চেকটি বাইপাস করতে বলে এবং তাই ট্র্যাকযুক্ত পাথগুলিকে খুব বেশি চেক করার অনুমতি দেয়।

যদিও এই আচরণের বৈশিষ্ট্যগুলি থেকে বিচ্যুত হয় git addএবং git statusএর ব্যবহারের ক্ষেত্রে কোনও ব্যবহারকারীর বিভ্রান্তির সম্ভাবনা নেই।

সঠিক আচরণ নিশ্চিত করতে মানক উপেক্ষা করার বিরুদ্ধে এই বিকল্পটি পরীক্ষা করতে টেস্ট স্ক্রিপ্টগুলি সংযোজন করা হয়।


--no-index::

চেকগুলি হাতে নেওয়ার সময় সূচকের দিকে তাকান না।
এটি ব্যবহার করা যেতে পারে:

  • উদাহরণস্বরূপ কোনও পাথ কেন ট্র্যাক হয়ে গেল git add .এবং এটি ব্যবহারকারীর দ্বারা প্রত্যাশিত বিধি দ্বারা উপেক্ষা করা হয়নি তা ডিবাগ করতে
  • পূর্বে যুক্ত হওয়া পথের সাথে মিল রেখে অবহেলা সহ নিদর্শনগুলি বিকাশ করার সময় git add -f

4

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

test-add.sh STOP_DIR FILENAME

যেখানে STOP_DIRগীত প্রকল্পের শীর্ষ স্তরের ডিরেক্টরির নেই এবং FILENAMEসমস্যা ফাইল নাম (একটি পথ ছাড়া) হয়। এটি স্তরক্রমের প্রতিটি স্তরে একই নামের একটি ফাঁকা ফাইল তৈরি করে (এটি উপস্থিত না থাকলে) এবং git add -nএটি যুক্ত করা যায় কিনা তা দেখার চেষ্টা করে (এটি নিজের পরে পরিষ্কার হয়ে যায়)। এটি এরকম কিছু তৈরি করে:

FAILED:    /dir/1/2/3
SUCCEEDED: /dir/1/2

এই পান্ডুলিপি:

#!/usr/bin/env bash
TOP=$1
FILE=$2
DIR=`pwd`
while : ; do
  TMPFILE=1
  F=$DIR/$FILE
  if [ ! -f $F ]; then
    touch $F
    TMPFILE=0
  fi
  git add -n $F >/dev/null 2>&1
  if [ $? = 0 ]; then
    echo "SUCCEEDED: $DIR"
  else
    echo "FAILED:    $DIR"
  fi
  if [ $TMPFILE = 0 ]; then
    rm $F
  fi
  DIR=${DIR%/*}
  if [ "$DIR" \< "$TOP" ]; then
    break
  fi
done 

1

git check-ignore -v filename(ধন্যবাদ বিটিডাব্লু) ব্যবহারের মূল উত্তরটি যুক্ত করতে আমি দেখতে পেলাম যে আমার .gitignore ফাইলটি সমস্ত কিছু অবরুদ্ধ করছে কারণ একটি ওয়াইল্ডকার্ডের পরে একটি নতুন লাইন ছিল তাই আমার কাছে ছিল:

* .sublime-project

উদাহরণ হিসাবে। আমি সবেমাত্র নিউলাইনটি সরিয়েছি, এবং ভয়েলা! এটা স্থির ছিল।

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