গিটের ডিরেক্টরিতে থাকা ফাইলগুলিকে আমি কীভাবে উপেক্ষা করব?


544

.gitignoreকোনও ডিরেক্টরিতে ফাইল উপেক্ষা করার জন্য ফাইলের সঠিক বাক্য গঠন কী ?

এটি হবে

config/databases.yml
cache/*
log/*
data/sql/*
lib/filter/base/*
lib/form/base/*
lib/model/map/*
lib/model/om/*

অথবা

/config/databases.yml
/cache/*
/log/*
/data/sql/*
/lib/filter/base/*
/lib/form/base/*
/lib/model/map/*
/lib/model/om/*

?


5
না .gitignoreফাইল ও ডিরেক্টরিগুলি এটি উপেক্ষা করে পার্থক্য? উদাহরণস্বরূপ, dataবনাম data/বিভিন্ন জিনিস মানে?
চার্লি পার্কার

6
@ চর্লিপার্কার হ্যাঁ-ইশ: dataফাইল ডিরেক্টরিগুলির সাথে মেলে যা উপাসনা করবে , data/কেবল মেলে এমন ডিরেক্টরিগুলি উপেক্ষা করবে।
jox

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

@ অ্যাডাম ঠিক আছে আপনাকে .gitignore আপডেট করতে হবে তারপরে ফাইলটি আনস্টেজ / গিট rm - ক্যাচ করা হয়েছে।
ক্রিস ম্যাককনাইট 30'19

উত্তর:


374

প্যাটার্ন ফর্ম্যাট

  • একটি ফাঁকা লাইন কোনও ফাইলের সাথে মেলে না, সুতরাং এটি পঠনযোগ্যতার জন্য পৃথক হিসাবে কাজ করতে পারে।

  • শুরু হওয়া একটি লাইন #একটি মন্তব্য হিসাবে কাজ করে।

  • একটি !alচ্ছিক উপসর্গ যা প্যাটার্নটিকে উপেক্ষা করে; আগের প্যাটার্ন দ্বারা বাদ দেওয়া কোনও মিলে যাওয়া ফাইল আবার অন্তর্ভুক্ত হবে। যদি কোনও অবহেলিত প্যাটার্ন মেলে তবে এটি নিম্ন অগ্রাধিকারের নিদর্শন উত্সগুলিকে ওভাররাইড করবে।

  • যদি প্যাটার্নটি স্ল্যাশ দিয়ে শেষ হয় তবে এটি নীচের বর্ণনার উদ্দেশ্যে সরিয়ে ফেলা হবে তবে এটি কেবল একটি ডিরেক্টরিতে একটি মিল খুঁজে পাবে। অন্য কথায়, এটি foo/একটি ডিরেক্টরি fooএবং এর নীচের পাথগুলির সাথে মিলবে , তবে কোনও নিয়মিত ফাইল বা প্রতীকী লিঙ্কের সাথে মেলে না foo(প্যাথস্পেক কীভাবে গিটে সাধারণভাবে কাজ করে তার সাথে এটি সামঞ্জস্যপূর্ণ)।

  • যদি প্যাটার্নটিতে একটি স্ল্যাশ না থাকে তবে /গিট এটিকে শেল গ্লোব প্যাটার্ন হিসাবে বিবেচনা করে এবং .gitignoreফাইলের অবস্থানের সাথে সম্পর্কিত নামের সাথে ম্যাচের জন্য পরীক্ষা করে (কোনও .gitignoreফাইল থেকে না থাকলে ওয়ার্ক ট্রিের শীর্ষ স্তরের তুলনায় )।

  • অন্যথায়, গিটটি প্যাটার্নটিকে পতাকার fnmatch(3)সাহায্যে উপযুক্ত শেল গ্লোব হিসাবে বিবেচনা করে: প্যাটার্ননে কোনও FNM_PATHNAMEওয়াইল্ডকার্ডের সাথে মেলে না /। উদাহরণস্বরূপ, Documentation/*.htmlমিলে যায় Documentation/git.htmlকিন্তু Documentation/ppc/ppc.htmlবা tools/perf/Documentation/perf.html

  • একটি শীর্ষস্থানীয় স্ল্যাশ পথের নামের শুরুতে মেলে। উদাহরণস্বরূপ, /*.cম্যাচগুলি cat-file.cকিন্তু নয় mozilla-sha1/sha1.c

আপনি এখানে আরও জানতে পারেন

git help gitignore
অথবা
man gitignore


2
আমি কীভাবে শীর্ষ স্তরে একটি .gitignore ফাইল রাখতে পারি এবং এর নীচে যে কোনও ফোল্ডারের জন্য এটি কাজ করতে পারি? ধন্যবাদ.
রায়য়

104
-1 টিএল; ডিআর এবং সবেমাত্র প্রশ্নের উত্তর দেয়। এটি ডিরেক্টরি সম্পর্কে, ফাইল নয়, তাই সাহসী বিভাগটি কিছু মানসিক জিমন্যাস্টিক সহ কেবলমাত্র অ্যাপ্রোপস। @ জেফ্রোমি আরও সরাসরি ছিলেন।
বব স্টেইন

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

1
এটি আসলে গিট ডকুমেন্টেশন থেকে একটি অনুলিপি-পেস্ট
এমকন্ট

1
নিশ্চিত নন (মূলত) কোনও manপৃষ্ঠা বা অফিসিয়াল ডক্ট কপি-পেস্ট করা এসও এর জন্য সেরা ফর্ম্যাট ...
jdk1.0

183

এটা প্রাক্তন হবে। ফোল্ডারের কাঠামোর পরিবর্তে এক্সটেনশানগুলি দিয়ে যান।

যেমন আমার উদাহরণ সি # বিকাশ ফাইল উপেক্ষা করুন:

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

হালনাগাদ

আমি ভেবেছিলাম আমি নীচের মন্তব্যগুলি থেকে একটি আপডেট সরবরাহ করব। যদিও ওপির প্রশ্নের সরাসরি উত্তর না দিলেও .gitignoreসিনট্যাক্সের আরও উদাহরণের জন্য নিম্নলিখিতটি দেখুন ।

সম্প্রদায় উইকি (ক্রমাগত আপডেট করা হচ্ছে):

ভিজ্যুয়াল স্টুডিও প্রকল্প এবং সমাধানগুলির জন্য .gitignore

নির্দিষ্ট ভাষার ব্যবহার সহ আরও উদাহরণ এখানে পাওয়া যাবে (ক্রিস ম্যাককাইটের মন্তব্যের জন্য ধন্যবাদ):

https://github.com/github/gitignore


5
@Stallman, যে range। সুতরাং এটি *.Objপাশাপাশি মেলে *.obj
নরবার্ট

131

যে পাথগুলিতে স্ল্যাশ রয়েছে সেগুলি .gitignore ফাইল সম্বলিত ডিরেক্টরিটির সাথে সম্পর্কিত হতে নেওয়া হয় - সাধারণত আপনার সংগ্রহস্থলের শীর্ষ স্তরের, যদিও আপনি সেগুলি সাব-ডিরেক্টরিতে রেখে দিতে পারেন।

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

আপনার ওয়াইল্ডকার্ডগুলিও নিরর্থক। আপনি যদি একটি সম্পূর্ণ ডিরেক্টরি উপেক্ষা করতে চান তবে কেবল নাম দিন:

lib/model/om

ওয়াইল্ডকার্ডগুলি আপনার ব্যবহারের একমাত্র কারণ হ'ল যদি আপনি পরবর্তীতে ডিরেক্টরিতে কোনও কিছু উপেক্ষা করতে চান:

lib/model/om/*      # ignore everything in the directory
!lib/model/om/foo   # except foo

5
এই প্রশ্নের জন্য গৃহীত উত্তরের চেয়ে আরও ভাল ব্যাখ্যা
21 নভেম্বর 31 এয়ার্লাজ

78

একটি শীর্ষস্থানীয় স্ল্যাশ ইঙ্গিত করে যে উপেক্ষা করা এন্ট্রি শুধুমাত্র সেই ডিরেক্টরিতে সম্মতিতে বৈধ হতে পারে যেখানে .gitignore ফাইলটি থাকে। *.oএই ডিরেক্টরিতে এবং সমস্ত সাবডিয়ারগুলির সমস্ত .o ফাইলকে নির্দিষ্ট করে তা নির্দিষ্ট করে দিলে /*.oতারা কেবল সেই ডিয়ারগুলিতে উপেক্ষা করবে এবং আবার /foo/*.oকেবল তাদের /foo/*.o এ উপেক্ষা করবে।


34

আপনি যদি শীর্ষ স্তরে একটি .gitignore ফাইল রাখতে চান এবং এটি নীচের যে কোনও ফোল্ডারের জন্য এটি ব্যবহার করতে চান /**/

যেমন *.mapকোনও /src/main/ফোল্ডারে সমস্ত ফাইল উপেক্ষা করতে এবং সাব-ফোল্ডারগুলি ব্যবহার করে:

/src/main/**/*.map

আমার এটি করা দরকার ছিল। আপনার দু'জনের দরকার কেন তা নিশ্চিত নন **। একটি আমার জন্য যথেষ্ট ছিল।
নোভোকেইন

8
** সাব ডাইরেক্টরিগুলিতে ফাইলগুলিও মেলে
পেটরসিন

তথ্য @petrsyn জন্য ধন্যবাদ
Novocaine

30

প্রশ্নের দুটি উদাহরণই আসলে খুব খারাপ উদাহরণ যা ডেটা ক্ষতি হতে পারে!

আমার পরামর্শ: /*আপনার কোনও ভাল কারণ না থাকলে .gitignore ফাইলের ডিরেক্টরিগুলিতে কখনই সংযোজন করবেন না!

জেফ্রমি যা লিখেছিলেন তার একটি ভাল কারণ হ'ল: "যদি আপনি পরবর্তীতে ডিরেক্টরিতে কোনও কিছু উপেক্ষা করতে চান"

অন্যথায় এটি করা না হওয়ার কারণটি হ'ল /*ডিরেক্টরিতে সংযোজন একদিকে যেমন কাজ করে এটি সঠিকভাবে ডিরেক্টরিতে সমস্ত বিষয়বস্তু উপেক্ষা করে তবে অন্যদিকে এর একটি বিপজ্জনক পার্শ্ব প্রতিক্রিয়া রয়েছে:

আপনি নির্বাহ git stash -u(সাময়িকভাবে ট্র্যাক এবং untracked লুকোবার জায়গা ফাইলগুলিতে) অথবা git clean -df(untracked মুছতে কিন্তু উপেক্ষিত ফাইল রাখার) আপনার সংগ্রহস্থলের মধ্যে, সমস্ত ডিরেক্টরি যে যোগ দিয়ে উপেক্ষা করা হয় /*করা হবে অপরিবর্তনীয়ভাবে মোছা !

কিছু পটভূমি

আমাকে এই কঠিন উপায়ে শিখতে হয়েছিল। আমার দলের কেউ /*আমাদের .gitignore এর কিছু ডিরেক্টরিতে সংযোজন করছিলেন। আমার বেশিরভাগ সময় উপলক্ষ্য হয়েছিল যেখানে নির্দিষ্ট ডিরেক্টরি হঠাৎ অদৃশ্য হয়ে যায়। আমাদের অ্যাপ্লিকেশন দ্বারা প্রয়োজনীয় স্থানীয় ডেটা গিগাবাইট সহ ডিরেক্টরি। কেউ এটি ব্যাখ্যা করতে পারেনি এবং আমি সবসময় সমস্ত ডেটা পুনরায় ডাউনলোড করতে টুপি করি। কিছুক্ষণ পরে আমি একটি ধারণা পেয়েছিলাম যে এটির সাথে এটি করতে পারে git stash। একদিন আমি আমার স্থানীয় রেপো পরিষ্কার করতে চেয়েছিলাম (ফাইলগুলি উপেক্ষা করার সময়) এবং আমি ব্যবহার করছি git clean -dfএবং আবার আমার ডেটা চলে গেছে। এবার আমি যথেষ্ট ছিলাম এবং বিষয়টি তদন্ত করেছি। আমি অবশেষে বুঝতে পারি যে কারণটি যুক্ত হয়েছে /*

আমি অনুমান করি যে এটি কোনওভাবে এই ব্যাখ্যা দ্বারা ব্যাখ্যা করা যেতে পারে যে directory/*ডিরেক্টরিটির সমস্ত বিষয়বস্তু উপেক্ষা করে তবে ডিরেক্টরিটি নিজেই নয়। সুতরাং জিনিসগুলি মুছে ফেলা হবে না এটিকে ট্র্যাক হিসাবে বিবেচনা করা হয় না বা উপেক্ষা করা হয় না। যদিও git statusএবং git status --ignoredএটিতে কিছুটা আলাদা ছবি দিন।

কিভাবে পুনরুত্পাদন

আচরণটি পুনরুত্পাদন করার উপায় এখানে। আমি বর্তমানে গিট ২.৮.৪ ব্যবহার করছি।

এতে localdata/একটি ডামি ফাইলের সাথে ডাকা একটি ডিরেক্টরি important.datএকটি স্থানীয় গিট রিপোজিটরিতে তৈরি /localdata/*করা হবে এবং .gitignoreফাইলটি রেখে বিষয়বস্তু উপেক্ষা করা হবে। উল্লিখিত দুটি গিট কমান্ডগুলির মধ্যে একটি এখন কার্যকর করা হলে ডিরেক্টরিটি (অপ্রত্যাশিতভাবে) হারিয়ে যাবে।

mkdir test
cd test
git init
echo "/localdata/*" >.gitignore
git add .gitignore
git commit -m "Add .gitignore."
mkdir localdata
echo "Important data" >localdata/important.dat
touch untracked-file

আপনি যদি git status --ignoredএখানে কিছু করেন তবে আপনি পাবেন:

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

  untracked-file

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

  localdata/

এখন হয় হয়

git stash -u
git stash pop

অথবা

git clean -df

উভয় ক্ষেত্রেই উপেক্ষা করা ডিরেক্টরি localdataচলে যাবে বলে অভিযোগ !

এটিকে কোনও বাগ হিসাবে বিবেচনা করা যায় কিনা তা নিশ্চিত নন তবে আমার ধারণা এটি কমপক্ষে এমন একটি বৈশিষ্ট্য যার কারও প্রয়োজন নেই।

আমি এটি গিট বিকাশের তালিকায় জানাব এবং তারা এ সম্পর্কে কী ভাববে তা দেখতে পাবো।


15

এটি হবে:

config/databases.yml
cache
log
data/sql
lib/filter/base
lib/form/base
lib/model/map
lib/model/om

বা সম্ভবত এমনকি:

config/databases.yml
cache
log
data/sql
lib/*/base
lib/model/map
lib/model/om

সেই ক্ষেত্রে filterএবং formlib- এ কেবলমাত্র ডিরেক্টরিগুলির একটি baseউপ-ডিরেক্টরি আছে যা উপেক্ষা করা দরকার (এটি আপনি যেমন asterics দিয়ে কী করতে পারেন তার উদাহরণ হিসাবে দেখুন)।


14

প্রথমটি. আপনার .gitignore ফাইল যেখানে রয়েছে সেখান থেকে file ফাইল পাথগুলি আপেক্ষিক।


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

4

আমি একটি জিইউআই এবং সিএলআই ভিত্তিক পরিষেবা বজায় রাখছি যা আপনাকে https://www.gitignore.io.gitignore এ খুব সহজেই টেমপ্লেট তৈরি করতে দেয় ।

আপনি অনুসন্ধান ক্ষেত্রের মধ্যে যে টেম্পলেটগুলি চান তা টাইপ করতে পারেন বা কমান্ড লাইন ওরফে ইনস্টল করে চালাতে পারেন

$ gi swift,osx


0

অ্যান্ড্রয়েড স্টুডিও প্রকল্পের জন্য একটি নমুনা .gitignore ফাইল নীচের মত দেখতে পারে

# built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# generated files
bin/
gen/

# Local configuration file (sdk path, etc)
local.properties


#Eclipse
*.pydevproject
.project
.metadata
bin/**
tmp/**
tmp/**/*
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/
.loadpath
YourProjetcName/.gradle/
YourProjetcName/app/build/
*/YourProjetcName/.gradle/
*/YourProjetcName/app/build/

# External tool builders
.externalToolBuilders/

# Locally stored "Eclipse launch configurations"
*.launch

# CDT-specific
.cproject

# PDT-specific
.buildpath

# Proguard folder generated by Eclipse
proguard/

# Intellij project files
*.iml
*.ipr
*.iws
.idea/
/build
build/
*/build/
*/*/build/
*/*/*/build/
*.bin
*.lock
YourProjetcName/app/build/
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
.gradle/
app/build/
*app/build/

# Local configuration file (sdk path, etc)
local.properties
/YourProjetcName/build/intermediates/lint-cache/api-versions-6-23.1.bin
appcompat_v7_23_1_1.xml
projectFilesBackup
build.gradle
YourProjetcName.iml
YourProjetcName.iml
gradlew
gradlew.bat
local.properties
settings.gradle
.gradle
.idea
android
build
gradle
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.