গিট ডিফ থেকে কোনও ডিরেক্টরি বাদ দিন


179

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

git diff previous_release..current_release app/

এটি অ্যাপ ডিরেক্টরিতে সমস্ত পরিবর্তনের জন্য একটি ভিন্নতা তৈরি করবে, তবে উদাহরণস্বরূপ, lib / ডিরেক্টরিতে নয়। কেউ কীভাবে এই কাজটি সম্পাদন করতে জানে? ধন্যবাদ!

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


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

এটি আশ্চর্যের বিষয় যে আমাদের কাছে এখনও সেপ্টেম্বর 2016 এ করার জন্য কোনও নেটিভ গিট সুইচ নেই
মাইকেল জেড

উত্তর:


138

ধরে নেওয়া যাক আপনি ব্যাশ ব্যবহার করেছেন এবং আপনি বর্ধিত গ্লোববিং সক্ষম করেছেন ( shopt -s extglob), আপনি শেল দিক থেকে এটি পরিচালনা করতে পারেন:

git diff previous_release current_release !(spec)

অন্যান্য সমস্ত জিনিসের তালিকাগুলি আপনাকে সংরক্ষণ করে।

বা, শেল-অজিনস্টিক:

git diff previous_release current_release --name-only | grep -v '^spec/' \
    | xargs git diff previous_release current_release --

যুক্তিটি পুনরায় টাইপ করে নিজের বাঁচাতে আপনি এটি ওয়ান-লাইন শেল স্ক্রিপ্টে মুড়িয়ে রাখতে পারেন।


1
দ্রষ্টব্য globbing লুকানো ফাইল মিলছে না, তাই আপনি যদি অনুরাগী হন, আপনি ট্যাক উপর চাইতে পারেন .!(.|)ম্যাচের সবকিছু করার জন্য একটি দিয়ে শুরু .ব্যতীত .এবং ..
ক্যাস্যাবেল

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

2
@ গ্রাহাম: আমি বিশ্বাস করি যে --আমি সবে যুক্ত করেছি এটি ঠিক করা উচিত।
ক্যাস্যাবেল

1
দুর্দান্ত উত্তর। আমি কেবল নামগুলি প্রদর্শন করতে চেয়েছিলাম (প্রকৃত পার্থক্য নয়) তাই আমাকে --name-onlyখুব শেষেও যুক্ত করতে হয়েছিল।
আগস্ট

1
এটির সাথে খেলার কাছাকাছি পর শুধু যোগ করতে চাই যে আপনি যদি একটি ফাইলের নাম পরিবর্তন, এটি একটি ত্রুটির নিক্ষেপ করা হবে কিন্তু সব আপনাকে যা করতে হবে যোগ -- path/of/new/fileএবং এটি এটি খুজে বের করব :)
আগস্ট

318

এই উত্তরের ভিত্তিতে আপনি ব্যবহার করতে পারেন:

git diff previous_release..current_release -- . ':!spec'

এটি একটি নতুন গিট বৈশিষ্ট্য যা নির্দিষ্ট পাথগুলি বাদ দিয়ে মঞ্জুরি দেয়। এটি বিভিন্ন শেল অনেলিনারের চেয়ে নির্ভরযোগ্য হওয়া উচিত।

আমি এটি এখানে পোস্ট করছি কারণ এই প্রশ্নটি এখনও "গিট ডিফার্স পথ বাদ" এর জন্য # 1 হিট।


4
এই উত্তরটি ভালবাসি। যদি বিকল্পগুলি যুক্ত করা হয় তবে ডাবল ড্যাশের আগে এটি করুন। উদাহরণস্বরূপ: git diff previous_release current_release --name-status -- . ':!spec'
liamvictor

আমি বুঝতে পারি নি যে আমি শাখার নামগুলি ব্যবহার করতে পারি current_releaseএবং previous_release- যখন আমি এটি বের করেছিলাম তখন আমাকে হাসিয়ে তোলে।
সত্যিকারের 78

2
আমার জন্য কি কাজ করেছে git diff --stat dev -- . ':!/Mopy/Docs/*'। আমার এবং বৈচিত্রগুলির জন্য কী কাজ করে নাgit diff dev --stat -- . ':!('Mopy/Docs/Wrye Bash General Readme.html'|'Mopy/Docs/Wrye Bash Advanced Readme.html')'
Mr_and_Mrs_D

সত্যিই সহায়ক। git diff --check -- . ':!config/database.yml'
ডাটাবেস.আইএমএল

17
এর মতো একাধিক আইটেমগুলিও বাদ দিতে পারে:git diff previous_release current_release -- . ':!file_a' ':!file_b'
সিউডনোইস

36

যদি আপনি গিট ডিফ থেকে বাদ দেওয়ার জন্য একাধিক পাথ নির্দিষ্ট করতে চান তবে আপনি কেবল শেষের দিকে অতিরিক্ত বর্জন পরামিতি যুক্ত করুন, যেমন পরিসংখ্যান থেকে বিক্রেতা এবং বিন ডিরেক্টরিতে সমস্ত কিছু বাদ দিন : -

git diff --stat previous_release..current_release -- . ':!vendor' ':!bin'

33

আপনি lib ডিরেক্টরিতে কোনও ফাইলের জন্য পৃথক বৈশিষ্ট্যটি চেষ্টা ও আনসেট করতে পারেন।
.gitattributes:

lib/* -diff

racl101 যোগ মন্তব্য :

কেবলমাত্র এটিতে যুক্ত করার জন্য, আপনারা যারা git diffনির্দিষ্ট ধরণের ফাইলগুলির আউটপুট সীমাবদ্ধ করতে চান , একটি নির্দিষ্ট ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলির মধ্যে যেমন জাভাস্ক্রিপ্ট .jsযেমন আপনার ফাইলগুলির ওয়েবপ্যাকের বান্ডিলিং দ্বারা উত্পাদিত হয়েছে , উদাহরণস্বরূপ, আপনি এটি যুক্ত করতে পারেন থেকে .gitattributes:

dist/js/**/*.js -diff

তারপরে আপনি আপনার গিট ডিফার্ট আউটপুটে সমস্ত শব্দ শুনতে পাচ্ছেন না এবং এটি কেবল এটি দেখায়: Binary files ... differযা আরও সহায়ক।


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

2
@ মিস্টার: আপনি এই .gitattributesফাইলটিকে কেবল এই ধরণের 'রিলিজ' ডিফের জন্য তৈরি একটি বিশেষ শাখায় সেট করতে পারেন ;) সেই বিশেষ শাখাকে উপরে রেখে পুনরায় current_releaseবাসস্থানটি থেকে আলাদা করতে পারেন।
ভোনসি

এটি শাখাগুলি জুড়ে মুছে ফেলা ফাইলগুলির জন্যও কাজ করবে বলে মনে হয় না। যে ফাইলগুলি সরানো হয়েছিল সেগুলি এখনও সম্পূর্ণ ভিন্নতা দেখায়।
গ্রাহাম ক্রিস্টেনসেন

আমার জন্য কাজ করে না। _পথ কি বিশেষ? _site/* -diff
মারিয়াস

@ মারিয়াসআন্দেরিয়ানা না, '_' বিশেষ নয়। Folder ফোল্ডারের কোনও ফাইলের জন্য কোন গিটট্রিবিউট বিধি প্রয়োগ করে তা পরীক্ষা করতে পারেন: git-scm.com/docs/git-check-attr
VonC

22

গিট ডিফ এখন একটি কাস্টম বর্জন বিন্যাস গ্রহণ করে: git diff -- ':(exclude)lib/*'

আপনার যদি প্রচুর পুনরাবৃত্তি ফোল্ডার নাম ('/ অ্যাপ', '/ lib', ইত্যাদি) থাকে তবে সাবধান হন কারণ এটি বর্তমান কার্যকারী ডিরেক্টরি এবং গিট রুট ডিরেক্টরি সম্পর্কিত ফাইলগুলি বাদ দেবে।


1
আপনি কি একটি বিন্দু মিস করছেন, এটি বরং হওয়া উচিত নয় git diff -- . ':(exclude)lib/*'?
নিকোলাস ডার্মিন

1
@ নিকোলাসডার্মিন না, যদিও আপনি যা লিখেছেন তা সমান। পথের "অন্তর্ভুক্ত" অংশটিও isচ্ছিক। এজন্য git diffপ্রয়োজনের পরিবর্তে আপনি কেবল আপনার বর্তমান পাথের সাথে সম্পর্কিত সমস্ত কিছুর জন্য করতে পারেনgit diff -- .
ম্যাক্সপিড্যাফার্টি

দ্রষ্টব্য: উইন্ডোজ মেশিনে, ডাবল উদ্ধৃতিগুলি ব্যবহার করুন, যেমনgit diff -- ":(exclude)lib/*"
cnlevy

কেন নেই তা জানেন না তবে আমার পক্ষে এটি কেবল ডট দিয়েই কাজ করে যা @ নিকোলাসডার্মিনের পরামর্শ অনুসারে। আমি win10 তে সিএমডার ব্যবহার করি।
অলিভভিভি

3

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

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

git diff -- ":(exclude)thingToExclude"

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

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

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

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

কিছু সিনট্যাকটিকাল চিনি প্রয়োগ করা হয়েছে

git diff -- ":!/\$1/"

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

যেমন .bash_profileবা.zshrc

gde() {
    : '
        git diff exclude files or folders
        usage:
        gde fileOrFolderNameToExclude
    '
    git diff -- ":!/\$1/"
}

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