ফাইল এক্সটেনশনের উপর ভিত্তি করে গিট ডিফ ফিল্টার কিভাবে করবেন?


152

git diffফাইল এক্সটেনশনের একটি নির্দিষ্ট সেটকে সীমাবদ্ধ করার বিকল্প নেই ?

উত্তর:


227

হ্যাঁ, আপনি যদি নিশ্চিত হন যে গিটটি আপনার শেলের চেয়ে গ্লোব প্রসারিত করে তবে এটি যে কোনও স্তরের সাথে মিলবে তাই এর মতো (উদ্ধৃতিগুলি গুরুত্বপূর্ণ) ভাল কাজ করা উচিত।

git diff -- '*.c' '*.h'

1
ঠিক আছে, আমার গিট সংস্করণটি খুব পুরানো ছিল। 1.7.8 এর সাথে বিজ্ঞাপন হিসাবে কাজ করে। চমৎকার।
মাদুর

3
মাইন ব্রেস প্রসারণ নিয়ে কাজ করেছিল, একটি লাgit diff -- *.{c,h,etc}
ম্যাট ফ্লেচার

9
ডাবল ড্যাশ গুরুত্বপূর্ণ যেমন। git diff master HEAD -- "*filename.txt"git diff master HEAD --name-only
36

একক উদ্ধৃতি ( '') এছাড়াও গুরুত্বপূর্ণ! git diff -- src/*.jsহওয়া উচিতgit diff -- 'src/*.js'
নিকোথাইম

1
গিট সংগ্রহস্থলের মূল ডিরেক্টরিতেও এটি করতে হবে।
জন জিয়াং

10

পুনরাবৃত্তভাবে ফাইলগুলি অন্তর্ভুক্ত করতে (বর্তমান দির সহ) এটি আমার জন্য কাজ করেছে:

git diff -- '***.py'

1
আমার জন্য এটি সর্বোত্তম সমাধান। আপনি কিছু ফাইল / ডিরেক্টরি বাদ দিতে পারেন। উদাহরণস্বরূপ:git diff -- '***.py' ':!.Trashes'
বার্টোস্জ

ট্রিপল নক্ষত্রগুলি কী করে (একক নক্ষত্রের তুলনায়)?
জান্ন পপিংপা

আইআইআরসি ডাবল নক্ষত্রমুখে অর্থ (সম্ভবত) নেস্টেড ডিরেক্টরি (এমনকি খালি) এবং একক নক্ষত্র এবং .py মানে ফাইলের নাম। সুতরাং এটি বর্তমান বা যে কোনও নেস্টেড ডিরেক্টরিতে একটি * .py ফাইল হওয়া উচিত।
বোহুমির জামেকনিক

8

হয় আপনার শেলের গ্লোবস্টার ব্যবহার করুন (যা পুনরাবৃত্তি অনুসন্ধান করে) 1 , 2 :

shopt -s globstar 
git diff -- *.py **/*.py

বা সন্ধান ব্যবহার করুন:

find -name '*.py' -print0 | xargs -0 git diff --

এ দুটিই বিশেষ-নাম এবং সাদা স্থানের প্রমাণ। যদিও আপনি .py এক্সটেনশনযুক্ত ডিরেক্টরিগুলির জন্য ফিল্টার করতে চাইতে পারেন :)


1 আমি git diff -- {.,**}/*.pyসাধারণত করতে পছন্দ করি

2 যখন গ্লোবস্টার সক্ষম থাকে তখন git diff -- **/*.pyইতিমধ্যে অন্তর্ভুক্ত থাকে ./*.py। বাশের ম্যানপেজে: 'যদি একটি / এর পরে অনুসরণ করা হয় তবে দুটি সংলগ্ন * গুলি কেবল ডিরেক্টরি এবং উপ-ডিরেক্টরিগুলির সাথে মিলবে।'


4

সাধারণ ফাইল নিদর্শনগুলির জন্য, এটি কাজ করে বলে মনে হচ্ছে:

$ git ls-files -zm '*.txt' | xargs --null git diff

হোয়াইটস্পেস নিরাপদ, এবং আপনার একাধিক এক্সটেনশনও থাকতে পারে:

$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff

3

বর্ধনের জন্য কমান্ড লাইন আর্গুমেন্ট।

git diff *.py

বিকল্প, আপনি নল করতে পারেন findমধ্যে git diff:

find . -name '*.py' -type f | git diff --

উত্তরটি আরও কিছুটা পাঠযোগ্য করে তুলুন। git diff *.pyচিৎকার শিরোনামগুলি দিয়ে এবং ছাড়াই আপনি যথেষ্ট হতে পারতেন
21

1
'শোর শিরোনাম' শেল স্ক্রিপ্টে # টি মন্তব্য ছিল।
হিউডব্রাউন

এটিই আমার জন্য একমাত্র সমাধান, উইন্ডোজ কমান্ড প্রম্পটে উদ্ধৃতিগুলি (ইত্যাদি) কাজ করে না not
এড বেইয়েটস

1

গিট সংস্করণ ২.১৮.০-তে পরীক্ষিত হিসাবে, ফাইল এক্সটেনশানটি ডাবল উদ্ধৃতি দিয়ে উদ্ধৃত করা উচিত। আপনি যদি টানার পরে আপনার স্থানীয় সংগ্রহস্থল এবং দূরবর্তী একের মধ্যে শেষ পার্থক্যগুলি সন্ধান করতে চান তবে আপনি ব্যবহার করতে পারেন:

git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"

উদাহরণ স্বরূপ:

git diff master@{1} origin/master --name-only "*.cs"

1
এটির জন্য যখন আমি সরবরাহ করেছি - এক্সটেনশনের আগে, এর আগেgit diff master@{1} origin/master --name-only -- "*.cs"
333

0

উপরের উত্তরগুলির মধ্যে কোনওটি git bashউইন্ডোতে আমার জন্য কাজ করছে বলে মনে হয় না । আমি নিশ্চিত নই যে এটি কোনও সংস্করণ জিনিস (আমি 1.8.4 ব্যবহার করছি) বা উইন্ডোজ / ব্যাশ জিনিস; এছাড়াও, আমার ক্ষেত্রে, আমি দুটি শাখার মধ্যে পৃথক করতে চেয়েছিলাম যেখানে প্রতিটি শাখার অতিরিক্ত শাখাগুলি অন্য শাখায় উপস্থিত ছিল না (সুতরাং 'খুঁজে বের করুন' ভিত্তিকগুলি অপসারণযোগ্য)।

যাইহোক এটি আমার পক্ষে কাজ করেছে (উদাহরণস্বরূপ, পাইথন ফাইলগুলির মধ্যে একটি পৃথক সন্ধান):

git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`

এই stackoverflow.com/a/8554987/4233229 কাজ, কিন্তু এক Windows এর জন্য একক পরিবর্তে ডবল কোট ব্যবহার করা হয়েছে
lcnittl

0

git diff শুধুমাত্র স্টেস্ট না করা ফাইলগুলিতে পার্থক্য দেখাবে।

আমি এই প্রশ্নটি খুঁজে পেয়েছি কারণ আমি .infoফাইলগুলি বাদ দিতে চেয়েছিলাম git diff। আমি এটি দিয়ে স্টেজ করে এটি অর্জন করেছি git add *.info, যা ফাইলগুলির বামকে হ্রাস করে।


0

আমি এটি দিয়ে আহত:

commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --

এটি নির্দিষ্ট প্রতিশ্রুতিবদ্ধতার জন্য ভিন্নতা দেখায় কেবলমাত্র যদি ফাইলনামে 'পরীক্ষা' শব্দটি থাকে (কেস সংবেদনশীল) এবং .sqlআপনার ক্ষেত্রে প্রয়োজনীয় হিসাবে পাইপলাইনটি সংশোধন করে না শেষ হয় with

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