গিট শো লাইন যুক্ত করার, লাইনে পরিবর্তন হওয়া এবং লাইনগুলি সরানোর কোনও উপায় আছে কি?


110

"গিট ডিফ - স্ট্যাট" এবং "গিট লগ - স্ট্যাট" আউটপুট দেখায় যেমন:

$ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07
 app/controllers/application_controller.rb |   34 +++-------------------------
 1 files changed, 4 insertions(+), 30 deletions(-)

তবে সেই প্রতিশ্রুতিতে যা ঘটেছিল তা হ'ল 4 লাইন পরিবর্তন করা হয়েছিল এবং 26 টি লাইন মুছে ফেলা হয়েছে যা 4 টি লাইন যুক্ত করা এবং 30 টি মোছার চেয়ে আলাদা।

ডেল্টা এলওসি পাওয়ার কোনও উপায় আছে (এই ক্ষেত্রে 26)? যুক্ত বা সরানো রেখার মধ্যে পার্থক্য করার বিষয়ে আমি সত্যিই যত্ন নিই না।

উত্তর:


127

তুমি ব্যবহার করতে পার:

git diff --numstat

সংখ্যাগত বিভিন্ন তথ্য পেতে।

অ্যাড এবং রিমুভ জুটি থেকে যতটা পরিবর্তনকে পৃথক করা যায়, --word-diffসাহায্য করতে পারে। আপনি এরকম কিছু চেষ্টা করতে পারেন:

MOD_PATTERN='^.+(\[-|\{\+).*$' \
ADD_PATTERN='^\{\+.*\+\}$' \
REM_PATTERN='^\[-.*-\]$' \
git diff --word-diff --unified=0 | sed -nr \
    -e "s/$MOD_PATTERN/modified/p" \
    -e "s/$ADD_PATTERN/added/p" \
    -e "s/$REM_PATTERN/removed/p" \
    | sort | uniq -c

এটি কিছুটা দীর্ঘায়িত তাই আপনি এটির পরিবর্তে আপনার নিজের স্ক্রিপ্টে পার্স করতে চাইতে পারেন।


2
ধন্যবাদ কোর্নিয়ান কিন্তু নিমস্ট্যাট স্ট্যাট, সংযোজন এবং মুছে ফেলার মতো ঠিক একই তথ্য দেয়।
জুয়ান অ্যালোনসো

এর একটি উদাহরণ ব্যবহার অন্তর্ভুক্ত করার জন্য আমার উত্তর আপডেট করেছে --word-diff। এটি আরও কার্যকর হতে পারে।
কোর্নিয়ান

14
আউটপুট git diff --numstatফাইল দ্বারা বিভক্ত হয়। পার্থক্যের জন্য মোট যুক্ত / অপসারণ দেখতে, আপনি এটিকে অবাস্তবভাবে পাইপ করতে পারেন:git diff --numstat | awk '{ added += $1; removed += $2 } END { print "+" added " -" removed }'
হিউজেস

15
@ হিউজেস একই তথ্য প্রাপ্তির একটি সহজ উপায় হবে git diff --shortstat। আমার অভিজ্ঞতায় এটি আউটপুট সংগ্রহ করার সমতুল্য git diff --numstat
ক্লাউস ট্রেন্ডল


65
  1. আপনি যদি আইডির মাধ্যমে প্রতিশ্রুতি দ্বারা যুক্ত লাইনগুলি যুক্ত / পরিবর্তিত / মুছে ফেলা জানতে চান তবে আপনি commit-idব্যবহার করতে পারেন

    git show commit-id --stat
    

    অথবা

    git diff commit-id-before commit-id --stat
    
  2. আপনি যদি কোনও রেঞ্জের কমিটগুলি দ্বারা যুক্ত / পরিবর্তিত / মুছে ফেলা লাইনগুলি জানতে চান তবে আপনি ব্যবহার করতে পারেন

    git diff commit-id1 commit-id2 --stat
    
  3. আপনি যদি প্রতিটি প্রতিশ্রুতি দ্বারা লাইনগুলি যুক্ত / পরিবর্তিত / মুছে ফেলা জানতে চান তবে আপনি ব্যবহার করতে পারেন

    git log --stat
    

এই সমাধানটি প্রশ্নের উত্তর দেয় না, "গিট - স্ট্যাট" একটি একক পরিবর্তিত রেখাকে "1 সন্নিবেশ এবং 1 মুছে ফেলা" হিসাবে গণনা করে। "1 টি পরিবর্তিত" কীভাবে পাবেন তা প্রশ্ন জিজ্ঞাসা করে।
জুয়ান অ্যালোনসো

6

আপনার সমস্ত ফাইল যদি প্রতিশ্রুতিবদ্ধ হওয়ার জন্য মঞ্চস্থ হয় তবে এইভাবে --numstatযেতে দেখতে :

git diff --numstat HEAD~

4

গিটটি "ইউনিফাইড" ডিফ ব্যবহার করে, যা কেবলমাত্র পৃথক ফর্ম্যাট হিসাবে লাইন যুক্ত এবং মুছে ফেলেছে। একটি ভিন্নতা পেতে আপনাকে বাহ্যিক কিছু করতে হবে যা তথ্য যোগ করতে, মুছতে এবং পরিবর্তন দেখায়।

https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git একটি স্ক্রিপ্টের লিঙ্ক দেয় যা নিয়মিত পুরানো "ডিফ" চালানোর অনুমতি দেয় - এবং সেখান থেকে আপনি একটি "প্রসঙ্গ" ডিফ আউটপুট উত্পন্ন করতে পারেন । প্রসঙ্গের পার্থক্যটি যোগ করা, মুছে ফেলা এবং পরিবর্তিত রেখাগুলি দেখায়, যা আপনার পছন্দসই ডেটা পাওয়ার অনুমতি দেয়।


3

আপনি diffstatপরিবর্তিত লাইনের সংখ্যা দেখানোর জন্য ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:

git diff HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07 | diffstat -C -m

-Cবিকল্প colourised আউটপুট পাওয়ার জন্য নয়; -mবিকল্প পরিবর্তিত লাইনের সংখ্যা দেখানোর জন্য নয়। নমুনা আউটপুট:

 app/controllers/application_controller.rb |   30 -------------------!!!
 1 files changed, 0 insertions(+), 26 deletions(-), 4 modifications(!)

পরিবর্তিত রেখার সংখ্যার জন্য গণনা আনুমানিক, যেমনটি man diffstatবলেছেন:

-ম সংযুক্ত সন্নিবেশ / মোছা প্যাচ ফাইলের প্রতিটি "অংশ" থেকে সংশোধিত রেখার একটি গণনার আনুষাঙ্গিক হিসাবে।

মধ্যে একটা বড়ো ভিন্নতা git diff --statএবং diffstat: diffstatফাইল প্যাচসমূহ / renames (যেমন প্রদর্শন করা হয় না app/{a.rb => b.rb})।

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