সম্পূর্ণ প্রসঙ্গে গিট ডিফারেন্ট কীভাবে পাবেন?


114

ক্রুশিবলে পর্যালোচনার জন্য উপযুক্ত প্যাচ কীভাবে তৈরি করবেন?

git diff branch master --no-prefix > patch

এটি প্রসঙ্গের 3 টি লাইন উত্পন্ন করে। সুতরাং আমি নিম্নলিখিতটি করি

git diff --unified=2000 branch master --no-prefix > patch

আশা করি সমস্ত ফাইলের 2000 টিরও কম লাইন থাকবে। সর্বাধিক লাইন উল্লেখ না করে প্যাচের জন্য ফাইলটিতে সমস্ত লাইন অন্তর্ভুক্ত করার জন্য গিটকে বলার উপায় আছে কি?


3
আমি -U <অনন্ত> বিকল্পটি পুরো ফাইল দেখানোর জন্য পোস্ট করা একটি পৃথক প্রশ্ন যেমন stackoverflow.com/questions/28727424/...
আলেক্সান্দ্র Levchuk

উত্তর:


54

আমি জানি এটি পুরানো, তবে আমি হার্ড-কোডেড সমাধানগুলিও অপছন্দ করি, তাই আমি এটি পরীক্ষা করেছি:

git diff -U$(wc -l MYFILE)

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


1
<প্রয়োজন হয় না. git diff -U$(wc -l MYFILE) MYFILE
বালকি

2
ধন্যবাদ @ বালকী, আমি আপনার পরামর্শটি চেষ্টা করেছি এবং লক্ষ্য করেছি যে <pre> $ (ডাব্লুসিএল - মাইফাইল) </ b> ফাইলের নাম অনুসারে লাইন গণিতে প্রসারিত হয়, সুতরাং ফাইলের দ্বিতীয় ব্যবহারটিও বাদ দেওয়া যেতে পারে। আমি এই প্রতিফলিত করতে আমার উত্তর আপডেট করছি।
এজরা

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

@ অলফ, এটি সত্য, সবচেয়ে ভাল উপায় হ'ল দৈর্ঘ্য সর্বাধিক করা, যেহেতু সত্যই বড় সংখ্যায় এখনও বিপরীত সমস্যা রয়েছে। এই সমাধানটি ধরে নিয়েছে যে ডিস্কে বর্তমান ফাইল আকারের চেয়ে বড় কোনও মিলে যায় না।
এজরা

3
git diff -U$(wc -l MYFILE | awk '{print $1}') MYFILEএকটি আরও ভাল উত্তর যা সঠিকভাবে wcকেবল সাদা অংশ ছাড়াই লাইন সংখ্যা পেয়ে আউটপুটকে সঠিকভাবে পার্স করে , দুটি আর্গুমেন্ট তৈরি করতে সাবস্কেলের অকেজো আউটপুটকে নির্ভর করে না, এবং ম্যাকোএস / বিএসডি-তে কাজ করে।
19:38

94

এটি বেশ সুন্দরভাবে কাজ করছে বলে মনে হচ্ছে:

git diff --no-prefix -U1000

সতর্কতা সহ:

-Uপতাকা প্রসঙ্গের লাইন নির্দিষ্ট করে। আপনার পরিবর্তনগুলির মধ্যে যদি 1000 টিরও বেশি লাইন থাকে তবে আপনার এটি বাড়ানোর দরকার হতে পারে।


16
-Uবিকল্পটি সুপারিশ হিসাবে একই --unified=প্রশ্নকর্তা দ্বারা ব্যবহৃত বিকল্প। পার্থক্যটি হ'ল আপনি 2000 এর চেয়ে কম প্রসঙ্গের রেখাগুলি নির্দিষ্ট করেছেন, প্রশ্নকর্তা 2000 এর চেয়ে কম। কেন?
এলএস

4
@ এলএস: হ্যাঁ, আমি এখন বুঝতে পারি, কিন্তু কয়েক বছর আগে এটি উপেক্ষা করেছি। তবুও, প্রশ্নের মধ্যে যা চলছে তা কিছুটা স্পষ্ট এবং এখানে অবতীর্ণ ব্যক্তিকে সাহায্য করবে বলে মনে হয়।
সি 24 ডাব্লু

এর জন্য ধন্যবাদ, এটি দিয়েও দুর্দান্ত কাজ করে git show!
শাকিল

@ c24w সম্মত, এখনও আমি পর্দায় যা দেখতে চাই তা পেয়ে যায়।
শেফ ফেরাউন

1
--no-prefixবিকল্প "/ A /" এবং "/ খ /" গন্তব্য উপসর্গ ডিফল্ট অনুযায়ী দেখানো পরিত্রাণ পায়। (লিঙ্কযুক্ত পৃষ্ঠা)
ভাগ্যডোনাল্ড

10

দ্রষ্টব্য: git1.8.1rc1 ঘোষণা (8 ই ডিসেম্বর, 2012) এর মধ্যে রয়েছে:

একটি নতুন কনফিগারেশন ভেরিয়েবল " diff.contextপ্যাচ আউটপুটে কনটেক্সট লাইনের ডিফল্ট সংখ্যার জন্য, 3 টি লাইনের হার্ডকোডড ডিফল্টকে ওভাররাইড করতে ব্যবহার করা যেতে পারে।

যাতে এটি এখানে আরও সম্পূর্ণ প্রসঙ্গ তৈরি করতে সহায়তা করে।


7
তবুও এতে 'ফাইলের সমস্ত লাইন' বলার বিকল্প নেই
বালকি

3
আমি সন্দেহ করি যে একটি বৃহত সংখ্যা স্থাপন করা, এটি "সমস্ত লাইনগুলি" অনুকরণ করে
ভনসি

7
"আমি সন্দেহ করি যে একটি বিশাল সংখ্যক সংখ্যক সংস্থান স্থাপন করা" সমস্ত রেখাগুলি "" অনুকরণ করবে ... যখন না ঘটে এবং তখন জিনিসগুলি ভেঙে যায় except সমস্তই অসীমের সমার্থক, এবং খুব বড় সংখ্যায় কেবল এটি - একটি সংখ্যা, অনন্ত নয়।
ট্রেনটন

4

অনুপ্রেরণা পেয়েছি এবং তাই আমি একটি গিট ওরফে যুক্ত করেছি।

$ cat ~/.gitconfig | fgrep diff
        df = "!git diff -U$(wc -l \"$1\" | cut -d ' ' -f 1) \"$1\""
$ git df <file>

হালনাগাদ:

সন্ধান পাওয়া "গিট ডিএফ" কখনও কখনও কাজ করে না, গিট ওরফে সম্পাদন করার সময় ডিরেক্টরি পরিবর্তনের কারণে। ( গিট এলিয়াসগুলি ভুল ডিরেক্টরিতে পরিচালনা করে দেখুন )। সুতরাং এটি আপডেট করা সংস্করণ:

$ cat ~/.gitconfig | fgrep df
        df = "! [ \"$GIT_PREFIX\" != \"\" ] && cd \"$GIT_PREFIX\"; ~/bin/git_df.sh"
$ 
$ cat ~/bin/git_df.sh
#!/bin/bash
for FILE in $@; do
    git diff -U$(wc -l "${FILE}" | cut -d ' ' -f 1) "${FILE}"
done
exit 0


0

পূর্বে গৃহীত সমাধানগুলি নির্দিষ্ট ফাইল / প্রতিশ্রুতি দেখার সময় আমার পক্ষে কাজ করে না ( -Uবিকল্পটি রেভ / পাথ পার্সিংয়ের সাথে বিশৃঙ্খল বলে মনে হয়) তবে --inter-hunk-context=এই ক্ষেত্রে এটি কাজ করে git version 2.24.0:

git diff \
    --no-prefix \
    --inter-hunk-context=2000 \
    master -- \
        path/to/file.py

আপনি যদি ফাইলের আকার না জানেন তবে অবশ্যই এটি wc -lহার্ড-কোডিংয়ের পরিবর্তে এটি খুঁজে পেতে পারেন:

git diff \
    --no-prefix \
    --inter-hunk-context=$(wc -l path/to/file.py) \
    master -- \
        path/to/file.py
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.