"গিট ডিফার" থেকে ফাইল বাদ দিতে চান


228

আমি db/irrelevant.phpগিট ডিফ থেকে একটি ফাইল ( ) বাদ দেওয়ার চেষ্টা করছি । আমি একটি ফাইল নির্বাণ চেষ্টা করেছি dbসাব নামক .gitattributesলাইন দিয়ে irrelevant.php -diff এবং আমি একটি ফাইল নামক তৈরি চেষ্টা করেছি .git/info/attributesধারণকারী db/irrelevant.php

সমস্ত ক্ষেত্রে, db/irrelevant.phpফাইলটি গিফ বাইনারি প্যাচ হিসাবে আলাদা করে অন্তর্ভুক্ত করা হয়। আমি যা চাই তা হ'ল সেই ফাইলের পরিবর্তনগুলি ডিফ কমান্ড দ্বারা উপেক্ষা করা উচিত। আমি কি ভুল করছি?

উত্তর:


324

ওএমজি, ড্রাইভার এবং অদ্ভুত কোন লস ফাইলটি বাদ দিতে? গিট 1.9 যেহেতু আপনি যা কিছু করতে পারেন:

git diff -- . ':(exclude)db/irrelevant.php' ':(exclude)db/irrelevant2.php'

আহ, কমনীয়তা! উদ্ধৃত উত্তর এবং বিশদ জন্য এই উত্তরটি @ টোরেকের দেখুন


3
দ্রষ্টব্য: আপনি যদি একটি নির্দিষ্ট ফাইলের নাম বাদ দিতে চান তবে আপনাকে .gitignoreফাইলের বাক্য গঠন থেকে পৃথক, নক্ষত্রের সাথে উপসর্গ করতে হবে। যেমন :!*shrinkwrap.yamlপরিবর্তে :!shrinkwrap.yaml
ভান ওয়াট

7
আরও ফাইল বাদ দিন, উদাহরণস্বরূপ, আমার কাছে * .min.css এবং * .min.js ফাইলগুলি গিট ডিফারেন্স থেকে বাঁচতে রয়েছে। সুতরাং, আমি কমান্ডটি ব্যবহার করবgit diff -- . ':(exclude)*.min.js' ':(exclude)*.min.css'
মহেশ্বরগমারে

4
উইন্ডোজ বাক্য গঠন : git diff -- . ":(exclude)db/irrelevant.php"(একক উদ্ধৃতির পরিবর্তে ডাবল কোট)
cnlevy

4
ধন্যবাদ! এই জাতীয় একটি সিনট্যাক্স .. আমাকে প্রতিবার এটি সন্ধান করতে হবে।
ড্যানিয়েল ওয়াল্ট্রিপ

1
@ ক্লিভ্য বা কোনও উদ্ধৃতি নেই! git diff -- . :(exclude)db/irrelevant.php
ম্যাথিয়াস

62

আপনি কোনও অপ কমান্ড না দিয়ে একটি কাস্টম ডিফ ড্রাইভার স্থাপন করতে পারেন এবং এগুলিকে এড়ানো উচিত যা এড়ানো উচিত।

এই কমান্ডের সাহায্যে একটি সংগ্রহস্থল সংক্রান্ত নির্দিষ্ট ডিফ ড্রাইভার তৈরি করুন

git config diff.nodiff.command /bin/true

বা আপনার সমস্ত repos জন্য --global

(যদি /bin/trueম্যাকোজে বিদ্যমান না থাকে, বিকল্পগুলি ব্যবহার করা হবে /usr/bin/trueবা echo)।

তারপর, ঐ ফাইল আপনাকে উপেক্ষা চান নতুন পরিবর্তন চালক ধার্য আপনার .git/info/attributesফাইল।

irrelevant.php    diff=nodiff

যদি এই রাজ্যটি অন্য বিকাশকারীদের সাথে ভাগ করে নেওয়া হয় তবে আপনি .gitattributesপরিবর্তে ব্যবহার করতে পারেন .git/info/attributesএবং git configআপনার সমবয়সীদের (ডকুমেন্টেশন ফাইল বা কোনও কিছুর মাধ্যমে) কমান্ডটি ভাগ করে নিতে পারেন ।


2
এটি হ'ল আমি যা খুঁজছিলাম - কর্নেলট্র্যাপ.আর. / মাইলারচিভ / গীত / ২০০৮ / ১০ / ১/ / ১71১১১২৫৪ এ বর্ণিত হিসাবে আমি সম্পাদনা করেছি g / .gitconfig যোগ করে: [diff "nodiff"] `কমান্ড = / বিন / ট্রু` এবং আমি তখন একটি ফাইল তৈরি করেছি .git / তথ্য / বৈশিষ্ট্য যার মধ্যে আমি যুক্ত করেছি: irrelevant.php diff=nodiff
মাইকেল

12
এই উত্তরটি আমার পক্ষে আরও ভালভাবে কাজ করেছে: stackoverflow.com/questions/1016798/…
নীল ফরেস্টার

3
মজার বিষয় এই পদ্ধতির সাথে কাজ করে না git diff --statgit diff ... | diffstatসেক্ষেত্রে , কেউ একটি workaround হিসাবে ব্যবহার করতে পারে ।
ddkilzer

@ মিশেল যে লিঙ্কটি উদাস হয়ে গেছে বলে মনে হচ্ছে, সেখানে অন্য কিছু আছে?
ডিকিবয়

3
কেবলমাত্র একটি সংযোজন: আপনি যদি গিটকে আলাদাভাবে এটি প্রদর্শন করতে বাধ্য করতে চান তবে ব্যবহার করুন--no-ext-diff
ফ্লোরিয়ান ক্লেইন

35

আপনি ডিফের কিছু অংশ বাদ দিতে প্যাচটুইলস প্রোগ্রাম সংগ্রহের ফিল্টারডিফ প্রোগ্রামও ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:

git diff | filterdiff -p 1 -x db/irrelevant.php

4
মনে রাখবেন -p, ম্যানপেজ থেকে (1), "-pn, --strip-match = n হল যখন মিলবে, পথের নামের প্রথম এন উপাদানগুলি উপেক্ষা করুন।" ওপির পথ থেকে অংশটি -p 1সরিয়ে ফেলতে আমাকে ধরতে কিছুটা সময় লেগেছে db। আপনি যদি কেবল কোনও ফাইলের নাম নির্দিষ্ট করতে চান এবং সমস্ত পথ / dir সম্ভাবনা উপেক্ষা করতে চান, আপনি ব্যবহার করতে পারেন -p 99
টাইলার কলিয়ার

32

এই পদ্ধতিটি গৃহীত উত্তরের চেয়ে ছোট।

git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'

বিভিন্ন অন্তর্ভুক্তি / বাদ দেওয়ার সম্ভাব্যতা সম্পর্কে আরও তথ্যের জন্য এই অন্যান্য পোস্টটি পড়ুন


সাবধান থাকুন যে ফিল্টারটি কেবলমাত্র আপনার বর্তমান ডিরেক্টরিতে নীচে থাকা সমস্ত ফাইলের জন্য প্রযোজ্য।
চিয়েল টেন ব্রিনকে

এটি সেরা উত্তর ছিল। : আমি একটি বিট আরো এটা প্রক্রিয়া সহজ করতে সক্ষম হন stackoverflow.com/a/58845608/3886183
dlsso

2
আমি - স্ট্যাট অংশটি সরিয়ে ফেলব, বা কমপক্ষে এটি কী করে তা ব্যাখ্যা করব, যেহেতু অন্যান্য উত্তরের কোনওটিরই অন্তর্ভুক্ত নেই।
মিশ্র 3 ডি

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

17

এই এক-লাইন সমাধানটির জন্য অন্য কোনও ব্যবহার / ডাউনলোডের প্রয়োজন নেই:

git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`

কোথায় file/to/exclude.txtআপনি যে ফাইলটি অবশ্যই অগ্রাহ্য করা হবে চাই নাম।

সম্পাদনা করুন: মুছে ফেলা ফাইলগুলি পৃথক করে ফিক্সিংয়ের জন্য ক্রেডিট কেসনজি


আমি আপনার এক লাইনারকে git diff --stat masterঅনেক সাফল্য ছাড়াই মানিয়ে নেওয়ার চেষ্টা করছি - আপনি কি সহায়তা করতে পারেন?
মিস্টার_আর_আমস_ডি

13

আমার যা করা দরকার ছিল তার জন্য কুর্জেডমেটলের কাছ থেকে সত্যিই ভাল উত্তর , যা দেখার ক্ষমতা ছিল যে ফাইলটি পরিবর্তিত হয়েছে, তবে ভিন্ন ক্ষেত্রে উত্পন্ন করতে পারে না, যা আমার ক্ষেত্রে বিশাল হতে পারে।

তবে আমার এক সহকর্মী এমন পদ্ধতির পরামর্শ দিয়েছেন যা আমার পক্ষে আরও সহজ এবং কাজ করেছিল:

.gitattributesডিরেক্টরিটিতে ফাইল যুক্ত করে যেখানে ফাইলটি উপেক্ষা করা হবে তা git diffনিম্নলিখিত সামগ্রীর সাথে থাকে:

file-not-to-diff.bin -diff

git statusএটি ফাইলটি পরিবর্তিত হলে এখনও "দেখতে" দেয় । git diffফাইলটি পরিবর্তিত হয়েছে "দেখুন" তবে এটি উত্পন্ন করবে না diff

.binউদাহরণস্বরূপ ফাইলটির জন্য সেই এক্সটেনশনটি ইচ্ছাকৃত। আমি বুঝতে পারি যে এটি বাইনারি ফাইলগুলির জন্য গিটের ডিফল্ট আচরণ এবং এর সাথে বিশেষ হ্যান্ডলিংয়ের প্রয়োজন হয় না .gitattributes। তবে আমার ক্ষেত্রে, এই ফাইলগুলি গিট এবং "ফাইল" ইউটিলিটি দ্বারা টেক্সট ফাইল হিসাবে স্বীকৃত হয়েছিল এবং এটি কৌশলটি করেছে।


11

সহজ উত্তর

git diff ':!db/irrelevant.php'

এটি ':!<path to file>'আপনার ডিফ কমান্ডের ঠিক পরে ডিফ কমান্ডটি আপনার পছন্দ মতো জটিল হতে পারে এবং আপনি চাইলে আপনি ওয়াইল্ড কার্ডগুলি ব্যবহার করতে পারেন *.min.jsবা একাধিক বাদ (স্পেস কোটড ব্লককে আলাদা করতে পারেন) যুক্ত করতে পারেন।


5

গিট রুট ডিরেক্টরি সম্পর্কিত

git diff একটি alচ্ছিক বাদ দেওয়া গ্রহণ করে

git diff -- ":(exclude)thingToExclude"

আপনি কিছু ওয়াইল্ড কার্ড যুক্ত করতে চাইতে পারেন

git diff -- ":(exclude)*/thingToExclude/*"

নির্দিষ্ট ফাইল টাইপ লক্ষ্য

git diff -- ":(exclude)*/$1/*.png"

অথবা আপনার ডটফিলের জন্য একটি ছোট স্ক্রিপ্ট ফেলে দিন

যেমন .bash_profileবা.zshrc

gde() {
    # git diff exclude files or folders 
    # usage: 
    # gde fileOrFolderNameToExclude
    git diff -- ":(exclude)*/$1/*"
}

এটি কেবল আমার পক্ষে কাজ করে না, উভয় সিনট্যাক্স সহ, (বাদ) বা! ব্যবহার করে আমার কিছুতেই আলাদা হয় না। আমার গিট 2.21.0 আছে
অলিভভিভি

আপনি স্টেস্ট না করা বা স্টেজযুক্ত ফাইলগুলি আলাদা করতে পারবেন। আপনি যদি গিট যুক্ত করেন তবে তারা মঞ্চস্থ হয়ে উঠবে। তাদের মঞ্চস্থ করা হলে আপনি git diff --stagedআশা করতে পারেন এটি আপনাকে সহায়তা করবে।
জেসনলোনহার্ড

কৃত্রিমভাবে, কোলন কি করছে?
জোনা

2

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

git diff master `git diff --name-only master | grep -v pom.xml`

1

অনুরূপ বেন Roux এর সমাধান, কিন্তু যাহাই হউক না কেন ভাগ করা:

git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print $2}' | xargs git diff

বা, যদি পরিবর্তনগুলি ইতিমধ্যে স্থানীয়ভাবে প্রতিশ্রুতিবদ্ধ হয়:

git diff --name-only origin/master | grep -v $PATTERN_TO_EXCLUDE | xargs git diff origin/master

উদাহরণ:

git status --porcelain | grep -v docs | awk '{print $2}' | xargs git diff origin/master

git diff --name-only origin/master | grep -v docs | xargs git diff origin/master

1

আমি নিম্নলিখিতটি করি:

git add *pattern_to_exclude*
git diff
git reset HEAD .

আমি জানি এটি একটি মার্জিত সমাধান নয় এবং এটি কখনও কখনও ব্যবহার করা যায় না (যেমন আপনার যদি ইতিমধ্যে স্টাফ থাকে) তবে এটি জটিল কমান্ড টাইপ না করে কৌশলটি সম্পাদন করে


0

আপনি যদি কেবলমাত্র পৃথকটি দর্শনীয়ভাবে পরীক্ষা করতে এটি করতে চান তবে একটি ভিজ্যুয়াল ডিফ সরঞ্জাম ( মেল্ডের মতো ) আপনাকে একটি শর্ট কমান্ড দিয়ে তা করতে দেয় যা মনে রাখা সহজ।

প্রথমে একটি ডিফ সরঞ্জাম নির্ধারণ করুন যদি আপনার ইতিমধ্যে না থাকে।

$ git config --global diff.tool = meld

তারপরে, আপনি একটি ডিরেক্টরি পৃথক চালাতে পারেন।

$ git difftool --dir-diff

আপনি মেল্ডে (বা আপনার পছন্দসই সরঞ্জাম) ডিফগুলি ব্রাউজ করতে সক্ষম হবেন। আপনি যে ফাইলটি উপেক্ষা করতে চান তা কেবল খুলুন না।

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