স্থানীয়ভাবে কিছু ফাইল উপেক্ষা করার জন্য আমি গিটটি কীভাবে কনফিগার করব?


1349

আমি কি সবার জন্য গ্লোবাল গিট কনফিগারেশনকে দূষিত না করে স্থানীয়ভাবে ফাইলগুলি উপেক্ষা করতে পারি? আমার কাছে আনট্যাক করা ফাইল রয়েছে যা আমার গিটের স্থিতিতে স্প্যাম তবে আমি আমার স্থানীয় শাখায় থাকা প্রতিটি ছোট্ট এলোমেলো ফাইলের জন্য গিট কনফিগারেশন পরিবর্তন করতে চাই না।

উত্তর:


1859

থেকে প্রাসঙ্গিক গীত ডকুমেন্টেশন :

যে প্যাটার্নগুলি একটি নির্দিষ্ট সংগ্রহস্থলের সাথে সুনির্দিষ্ট তবে সেগুলি অন্যান্য সম্পর্কিত সংগ্রহস্থলের সাথে ভাগ করার প্রয়োজন নেই (উদাহরণস্বরূপ, সহায়ক ফাইলগুলি যা সংগ্রহস্থলের অভ্যন্তরে থাকে তবে একটি ব্যবহারকারীর কর্মপ্রবাহের সাথে সুনির্দিষ্ট হয়) $GIT_DIR/info/excludeফাইলটিতে প্রবেশ করা উচিত ।

.git/info/excludeফাইলটি কোন হিসাবে একই বিন্যাস রয়েছে .gitignoreফাইল। আরেকটি বিকল্প হ'ল core.excludesFileবিশ্বব্যাপী নিদর্শনগুলি ধারণ করে এমন একটি ফাইলের নাম সেট করা।

দ্রষ্টব্য, আপনি যদি ইতিমধ্যে স্টেস্টেড পরিবর্তন না করে থাকেন তবে আপনার উপেক্ষা-নিদর্শনগুলি সম্পাদনা করার পরে আপনাকে অবশ্যই নিম্নলিখিত চালনা করতে হবে:

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

দ্রষ্টব্য$GIT_DIR : এটি গিট ম্যানুয়াল জুড়ে কেবল গিট সংগ্রহস্থলের পথ নির্দেশ করার জন্য ব্যবহৃত একটি স্বরলিপি । যদি পরিবেশের পরিবর্তনশীলটি সেট করা থাকে, তবে এটি আপনি যে কোনও রেপোতে অবস্থানের স্থানটি ওভাররাইড করে যা সম্ভবত আপনি চান তা নয়।


সম্পাদনা করুন : অন্য উপায়টি হ'ল:

git update-index --skip-worktree <file-list>

এটিকে বিপরীত করুন:

git update-index --no-skip-worktree <file-list>

204
একটি দ্রষ্টব্য হিসাবে, git update-index --assume-unchanged [<file>...]বাদ দেওয়া ফাইলটি যোগ করার পরে চালানো নিশ্চিত করুন। ততক্ষণ পর্যন্ত পরিবর্তনগুলি নেওয়া হবে না।
টোলম্যান্জ

30
গিট ১.7.৯.৫ ব্যবহার করে পরিবর্তনগুলি কার্যকর করতে আমার 'গিট আপডেট-ইনডেক্স ...' চালানোর দরকার পড়েনি।
জেফ্রি মার্টিনেজ

39
আপনি যদি ইতিমধ্যে ফাইলটিতে পরিবর্তন করে থাকেন এবং এখন চান তবে এটি উপেক্ষা করা উচিত কেবলমাত্র গিট আপডেট-ইনডেক্স ব্যবহার করতে হবে। আপনি যদি পরিবর্তনটি পরিবর্তন করার আগে বাদে পরিবর্তন করেন তবে এটি প্রয়োজনীয় নয়।
ব্র্যাডি এমারসন

13
এটি যখন .gitignore এর মতো কমিট করার সময় ফাইলটিকে পরিবর্তিত হিসাবে উপস্থিত হতে বাধা দেয়, উপেক্ষা করা ফাইলের বিপরীতে, আপনি গিট রিসেট --হার্ড চালনা করলে ফাইল (গুলি) পুনরায় সংস্করণে পুনরায় সেট করা হবে।
ব্র্যাডি এমারসন

19
প্রতি স্ট্যাকওভারফ্লো. com / skip-worktreeজিজ্ঞাসা / ২৩০৯73686868/২ এবং স্ট্যাকওভারফ্লো. com / প্রশ্নগুলি / ১৩630৪৮৮৯/২ , সম্ভবত পছন্দ করা হবে assume-unchanged
ডানশুমওয়ে

436

আপডেট : git update-index --skip-worktree [<file>...]পরিবর্তে ব্যবহার বিবেচনা করুন , ধন্যবাদ @ উদ্যানশুমওয়ে! দুটি বিকল্পের পার্থক্য সম্পর্কে বোরিলিডের ব্যাখ্যা দেখুন ।


পুরানো উত্তর:

আপনার যদি ট্র্যাক করা ফাইলগুলিতে স্থানীয় পরিবর্তনগুলি উপেক্ষা করার দরকার হয় (ফাইলগুলি কনফিগার করতে স্থানীয় পরিবর্তন সহ আমাদের কাছে রয়েছে), ব্যবহার করুন git update-index --assume-unchanged [<file>...]


8
কেবল লক্ষ্য করার জন্য, আমি একটি ফাইল $ GIT_DIR / তথ্য / বাদে (উদাহরণস্বরূপ, my-file.php) এ যুক্ত করেছি এবং তারপরে git update-index --assume-unchanged my-file.phpএড়ানো শুরু করার জন্য চালাতে হয়েছিল। ভকভগক!
টোলম্যান্জ

78
এটি পূর্বাবস্থায় git update-index --no-assume-unchanged my-file.php
রায়

18
শুধু স্পষ্টতার জন্য: ধরে নেওয়া-অপরিবর্তিত ট্র্যাক করা ফাইলের জন্য (রেপোতে বিদ্যমান) ... ওপি ইউএনট্র্যাকড ফাইলগুলির জন্য জিজ্ঞাসা করছিল, সেই ক্ষেত্রে আপনি যা .git/info/excludeচান (প্রায়শই ভাগ করা এবং ট্র্যাক করা .gitignore দূষিত করা এড়াতে)
ডায়োডজি

7
স্ট্যাকওভারফ্লো / প্রশ্নগুলি অনুসারে / ২৩০৯736868//২ অনুযায়ী এটি অনিরাপদ হিসাবে বিবেচিত এবং আপনি যদি সাবধান না হন তবে আপনার ফাইলগুলি এখনও প্রতিশ্রুতিবদ্ধ হতে পারে। এটি এই সমস্যার কোনও বদ্ধমূল সমাধান হিসাবে নয়, পারফরম্যান্স এইড হিসাবে উদ্দিষ্ট।
ড্যানশুমওয়ে

3
আমি --assume-unchangedআপনার আপডেট পড়ার আগে ছুটে এসেছি । আমি ফেরানো হয়েছে --no-assume-unchangedএবং তারপর করেনি --skip-worktreeস্পষ্ট করুন ... আমি কি?
নিকোলাস মিয়ারি

162

আপনার .gitconfig ফাইলের [عرف] বিভাগে নিম্নলিখিত লাইনগুলি যুক্ত করুন

ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"

এখন আপনি git ignore my_fileস্থানীয় ফাইলের পরিবর্তনগুলি উপেক্ষা করতে এবং পরিবর্তনগুলি উপেক্ষা করার জন্য ব্যবহার করতে পারেন git unignore my_filegit ignoredউপেক্ষা করা ফাইলগুলি তালিকাভুক্ত করে।

এই উত্তরটি http://gitready.com/interedia/2009/02/18/temporarily-ignoring-files.html থেকে উদ্ভাসিত হয়েছিল


1
"! git ls-file -v | grep" ^ [[: নিম্ন:]] "" - উইন্ডোজ সেন্টিমিডিতে এটি কীভাবে করা যায় তা আপনি জানেন কি?
হাওহামারু

3
একটি সত্যিকারের শেল ইনস্টল করুন (উদাহরণস্বরূপ বাবুন বাশ বা zsh সরবরাহ করে); আমি আপনার অনুভূতিগুলি জানি, তবে আমি সম্প্রতি উইন্ডোজ থেকে লিনাক্সে স্যুইচ করেছি এবং আমি আবার কখনও সিএমডি ব্যবহার করতে চাই না।
জেরুস

@ হাওমারু, আপনি সর্বদা ডাব্লুএসএল (লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেম) ব্যবহার করতে পারেন।
এ জেড

110

আপনার কাছে বেশ কয়েকটি বিকল্প রয়েছে:

  • .gitignoreআপনার কার্যকারী ডিয়ারে একটি নোংরা (বা বিনা অনুমতিযুক্ত ) ফাইলটি ছেড়ে দিন (বা টপগিট বা এই জাতীয় কোনও প্যাচ সরঞ্জাম ব্যবহার করে এটি স্বয়ংক্রিয়ভাবে প্রয়োগ করুন )।
  • $GIT_DIR/info/excludeযদি এটি একটি গাছের সাথে নির্দিষ্ট থাকে তবে আপনার ফাইলে বাদ দেওয়া উচিত ।
  • আপনার চালান git config --global core.excludesfile ~/.gitignoreএবং নিদর্শন যোগ করুন ~/.gitignore। আপনি যদি সমস্ত গাছ জুড়ে নির্দিষ্ট নিদর্শনগুলি উপেক্ষা করতে চান তবে এই বিকল্পটি প্রযোজ্য । আমি উদাহরণস্বরূপ .pycএবং .pyoফাইলগুলির জন্য এটি ব্যবহার করি ।

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


10
আমি মনে করি আপনার git config --globalবিশ্বব্যাপী বিকল্পটি সেট করা দরকার ।
জোশ লি

7
আসলে, কেবলমাত্র .gitignore .gitignore;) এ যুক্ত করুন!
ডোমিনিক জর্জ

68

আমি মনে করি আপনি খুঁজছেন:

git update-index --skip-worktree FILENAME

যা স্থানীয়ভাবে করা পরিবর্তনগুলি উপেক্ষা করে

এই সমাধান সম্পর্কে আরও ব্যাখ্যা এখানে http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/

ব্যবহার পূর্বাবস্থায়:

git update-index --no-skip-worktree FILENAME

9
তার মাঝে একটি প্রাসঙ্গিক আলোচনা --skip-worktreeএবং --assume-unchangedএই তাই প্রশ্ন
Merwer

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

1
এটিকে কীভাবে পূর্বাবস্থায় ফেলা যায়?
ব্যবহারকারী 1735921

3
পূর্বাবস্থায় ফেরাতে দয়া করে ব্যবহার করুনgit update-index --no-skip-worktree <file>
ব্যবহারকারীর 1735921

49

এই প্রক্রিয়াটিকে আরও সহজ করতে আপনি কিছু গিট এলিয়াস ইনস্টল করতে পারেন । এটি [alias]আপনার .gitconfigফাইলের নোড সম্পাদনা করে ।

git config --global alias.ignore 'update-index --skip-worktree'
git config --global alias.unignore 'update-index --no-skip-worktree'
git config --global alias.ignored '!git ls-files -v | grep "^S"'

আপনার জন্য এই ইনস্টল করা শর্টকাটগুলি নিম্নরূপ:

  • git ignore config.xml
    • গিট ভান করবে যে এতে কোনও পরিবর্তন দেখা যায় না config.xml- আপনাকে দুর্ঘটনাক্রমে এই পরিবর্তনগুলি করা থেকে বিরত করা।
  • git unignore config.xml
    • গিটটি আপনার পরিবর্তনগুলি স্বীকার করে পুনরায় শুরু করবে config.xml- আপনাকে আবারও সেই পরিবর্তনগুলি সম্পাদনের অনুমতি দেয় allowing
  • git ignored
    • গিট সমস্ত ফাইলগুলিকে তালিকাবদ্ধ করবে যা আপনি উপরে বর্ণিত পদ্ধতিতে "উপেক্ষা করছেন"।

আমি ফটম্যানের উত্তর উল্লেখ করে এগুলি তৈরি করেছি - যা --assume-unchangedএকই সংস্করণ উপস্থাপন করে ।

আমি যে সংস্করণটি উপস্থাপন করেছি তা --skip-worktreeস্থানীয় পরিবর্তনগুলি উপেক্ষা করার জন্য ব্যবহার করে । পার্থক্যটির পুরো ব্যাখ্যা দেওয়ার জন্য বোরিলিডের উত্তর দেখুন , তবে মূলত --skip-worktreeউদ্দেশ্য হ'ল ডেভেলপাররা তাদের পরিবর্তনগুলি সংঘটিত হওয়ার ঝুঁকি ছাড়াই ফাইল পরিবর্তন করে

এখানে git ignoredউপস্থাপিত কমান্ড ট্যাগটি git ls-files -vদিয়ে শুরু হওয়া কেবলমাত্র এন্ট্রিগুলি দেখানোর জন্য তালিকাটি ফিল্টারটি ব্যবহার করে এবং ফিল্টার করে SSট্যাগ একটি ফাইল যার অবস্থা হল "worktree এড়িয়ে যান" উল্লেখ করে। দেখানো ফাইল স্ট্যাটাসগুলির সম্পূর্ণ তালিকার জন্য git ls-files: -tঅপশনটির জন্য ডকুমেন্টেশন দেখুনgit ls-files


1
এটি অননাকৃত ফাইলগুলির জন্য কাজ করে না: <(ওএসএক্সে 2.13.5 গিট)
টেরা অ্যাশলে

হয় '!' ভিতরে থাকার কথা '!git ls-files -v | grep "^S"'? কমান্ডটি সেখানে এটি নিয়ে আমার পক্ষে কাজ করে না .. এবং এটি মুছে ফেলার সাথে ঠিকঠাক কাজ করে বলে মনে হচ্ছে।
Tiris

গিট অ্যালফের বিস্ময়কর চিহ্নটি গিটকে গিট সাবকম্যান্ডের পরিবর্তে একটি বাহ্যিক কমান্ড চালাতে বলে । আমি এটি রেখেছিলাম কারণ আমার শেল পাইপলাইন দরকার, তাই বাইরে থেকে আমার গিটটি চাওয়া দরকার। আমি শুধু বিস্ময়বোধক চিহ্ন (আপনার সুপারিশ অনুযায়ী) সরানোর চেষ্টা করেছি, কিন্তু যে আছে না আমার জন্য হবে। আমি পেতে । এইবার বুঝতে পারছি; বিস্ময়বোধক চিহ্ন ছাড়াই: গিট আপনার কমান্ডের প্রাপ্যতা দেয় । Expansion of alias 'ignored' failed; 'git' is not a git commandgit git ls-files …
Birchlabs

ব্যাখ্যার জন্য ধন্যবাদ. আমি গিট ওরফেটির সাথে পরিচিত নই এবং ওরফে তৈরির আগে পরীক্ষার জন্য খোলের মধ্যে ছুটছিলাম।
টিরিস

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

42

আপনি কেবল নিজের বাড়ির ডিরেক্টরিতে একটি .gitignore ফাইল যুক্ত করতে পারেন, $HOME/.gitignoreবা ~/.gitignore। তারপরে গিটকে এই ফাইলটি কমান্ডটি ব্যবহার করতে বলুন:

git config --global core.excludesfile ~/.gitignore

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

আমি বহু বছর ধরে এই পদ্ধতির দুর্দান্ত ফলাফল সহ ব্যবহার করছি।


ধন্যবাদ, @ এরিকচেন আমি এ্যাসওয়ারটি আপডেট করেছি; চেষ্টা করে দেখুন এবং তারপরে git check-ignore <file-name>যাচাই করতে ব্যবহার করুন। LMK যদি এটি আপনার পক্ষে কাজ করে
JESii

এটি কেবলমাত্র আমার জন্য কাজ করেছিল =:git config --global core.excludesfile ~/.gitignore
ই সুন্দিন

আমি .gitignoreহোম ডিরেক্টরিতে একটি ফাইল রেখেছি এবং গিটকে পরিবর্তে সেই ফাইলটি ব্যবহার করতে বললাম, তারপরে আমি স্থানীয়ভাবে ফাইলগুলি মুছে ফেলতে চাই না। যাইহোক, আমি পরিবর্তনগুলি ধাক্কা দেওয়ার পরে, রিমোট রিপোজিটরিও সেই ফাইলগুলি মুছে ফেলে। আমি কি কিছু ভুল করবেন?
zyy

বাহ, @xyz; .gitignoreআপনার স্থানীয় ডিরেক্টরিতে উপস্থিত ফাইলগুলিকে উপেক্ষা করার বিষয়ে। আপনার git rm --cachedযা করা উচিত তা হ'ল যা এগুলিকে রেপো থেকে সরিয়ে দেয় তবে সেগুলি আপনার স্থানীয়তে রেখে দেয়। আপনার পূর্ববর্তী প্রতিশ্রুতিতে ফিরে যেতে সক্ষম হবেন এমন কিছু যা git reset --soft HEAD^পূর্বাবস্থায় ফেরা এবং আপনার ফাইলগুলি পুনরুদ্ধার করার মতো with এটি গিটের সৌন্দর্য: এটি আপনার গিট ইতিহাসে এখনও আছে।
JESii

2

বিশেষত যদি ট্রেড না করা ফাইলগুলি (কয়েকটি) ফোল্ডারে অবস্থিত থাকে তবে বিশেষত যদি অনতিহীন ফাইলগুলিকে অগ্রাহ্য করতে হয়, তবে একটি সহজ সমাধান হ'ল .gitignoreপ্রতিটি আনক্র্যাকড ফোল্ডারে একটি ফাইল যুক্ত করা এবং *একটি নতুন লাইনের পরে থাকা একটি একক লাইনে প্রবেশ করা । এটি যদি খুব সহজেই সরল এবং সোজা সমাধান হয় যদি তালিকৃত ফাইলগুলি কয়েকটি ফোল্ডারে থাকে। আমার জন্য, সমস্ত ফাইল একক চিহ্নবিহীন ফোল্ডার থেকে আসছে vendorএবং উপরের সবেমাত্র কাজ করেছে।


1
গ্রেট! এফওয়াইআই: এটি কেবল গিট কারণ ফোল্ডার নয় কেবল ফাইলগুলি ট্র্যাক করে (এবং আপনাকে প্রতিশ্রুতি দেয়) কারণ এটি কাজ করে।
jmiserez

-2

আপনার রেপো ইতিমধ্যে একটি .gitignore ফাইল নেই, তাহলে একটি সহজ সমাধান একটি .gitignore ফাইল তৈরি করতে হয়, এবং এটি যোগ মধ্যে .gitignoreফাইল তালিকায় উপেক্ষিত হবে।


4
এবং দলটি যদি পরে গিটিগনোর যুক্ত করতে চায় তবে কী হবে? এটি কি কাজ করে? একটি ভয়ঙ্কর ধারণা মত এমন শব্দ এবং এমন কিছু কাজ করে যা এমনকি কাজ করা উচিত নয়।
বিয়ন্সের

এই লোকটির উত্তর আমাকে ক্র্যাক করেছে। কেউ এই কাজ করছে না।
মার্টিন চেম্বারলিন

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