ম্যান পেজটি git-diffবরং দীর্ঘ, এবং এমন অনেকগুলি ক্ষেত্রে ব্যাখ্যা করে যা কোনও নবজাতকের পক্ষে প্রয়োজনীয় বলে মনে হয় না। উদাহরণ স্বরূপ:
git diff origin/master
ম্যান পেজটি git-diffবরং দীর্ঘ, এবং এমন অনেকগুলি ক্ষেত্রে ব্যাখ্যা করে যা কোনও নবজাতকের পক্ষে প্রয়োজনীয় বলে মনে হয় না। উদাহরণ স্বরূপ:
git diff origin/master
উত্তর:
উদাহরণস্বরূপ গিট ইতিহাসের চেয়ে পৃথক পৃথক উদাহরণ দেখুন ( git.git সংগ্রহস্থলে 1088261f প্রতিশ্রুতিবদ্ধ ):
diff --git a/builtin-http-fetch.c b/http-fetch.c
similarity index 95%
rename from builtin-http-fetch.c
rename to http-fetch.c
index f3e63d7..e8f44ba 100644
--- a/builtin-http-fetch.c
+++ b/http-fetch.c
@@ -1,8 +1,9 @@
#include "cache.h"
#include "walker.h"
-int cmd_http_fetch(int argc, const char **argv, const char *prefix)
+int main(int argc, const char **argv)
{
+ const char *prefix;
struct walker *walker;
int commits_on_stdin = 0;
int commits;
@@ -18,6 +19,8 @@ int cmd_http_fetch(int argc, const char **argv, const char *prefix)
int get_verbosely = 0;
int get_recover = 0;
+ prefix = setup_git_directory();
+
git_config(git_default_config, NULL);
while (arg < argc && argv[arg][0] == '-') {
এই প্যাচ লাইন একের পর এক বিশ্লেষণ করতে দিন।
প্রথম লাইন
diff --git a / buildin-http-fetch.cb / http-fetch.cফর্মের একটি "গিট ডিফ" শিরোনাম
diff --git a/file1 b/file2। a/এবং b/ফাইলের নামের একই যদি না পুনঃনামকরণ / অনুলিপি (আমাদের ক্ষেত্রে মত) জড়িত আছে। এর --gitঅর্থ হ'ল ডিফ "গিট" ডিফ ফরমেটে রয়েছে।এরপরে এক বা একাধিক প্রসারিত শিরোনাম লাইন রয়েছে। প্রথম তিনটি
সাদৃশ্য সূচক 95% বিল্টিন-http-fetch.c থেকে নতুন নামকরণ করুন http-fetch.c এ নতুন নামকরণ করুনআমাদের বলুন যে ফাইলটির নাম পরিবর্তন করা
builtin-http-fetch.cহয়েছিল http-fetch.cএবং সেই দুটি ফাইল 95% অভিন্ন (যা এই নামটি সনাক্ত করতে ব্যবহৃত হয়েছিল)। সূচি f3e63d7..e8f44ba 100644প্রদত্ত ফাইলের মোড সম্পর্কে বলুন (এর
100644অর্থ এটি সাধারণ ফাইল এবং উদাহরণস্বরূপ সিমলিংক নয়, এবং এটিতে এক্সিকিউটেবল অনুমতি বিট নেই), এবং প্রিমেজের সংক্ষিপ্ত হ্যাশ সম্পর্কে (প্রদত্ত পরিবর্তনের আগে ফাইলের সংস্করণ) এবং পজিটিমেজ (দ্য পরিবর্তনের পরে ফাইলের সংস্করণ)। এই পংক্তিটি git am --3wayযদি প্যাচটি নিজে প্রয়োগ না করা যায় তবে 3-ত্রি মার্জ করার চেষ্টা করার জন্য এটি ব্যবহার করা হয়।এরপরে দ্বি-লাইনের ইউনিফাইড ডিফার শিরোনাম
--- একটি / বিল্টিন-http-fetch.c +++ খ / http-fetch.c
diff -Uফলাফলের সাথে তুলনায় এতে উত্স (পূর্বরূপ) এবং গন্তব্য (প্রতিকৃতি) ফাইলের নাম-পরে ফাইল-পরিবর্তন-সময় বা ফাইল-ফাইল-সংশোধন-সময় নেই have যদি ফাইলটি তৈরি করা হয় তবে উত্সটি হ'ল /dev/null; যদি ফাইলটি মুছে ফেলা হয়েছে, লক্ষ্য /dev/null। diff.mnemonicPrefixস্থানে সত্যতে কনফিগারেশন পরিবর্তনশীল, a/এবং b/এই দুই লাইন হেডারের মধ্যে উপসর্গ আপনি যদি এর পরিবর্তে থাকতে পারে c/, i/, w/এবং o/উপসর্গ যথাক্রমে কি আপনি তুলনা করতে হিসেবে; দেখতে Git-কনফিগ (1)এরপরে আসে পার্থক্যগুলির এক বা একাধিক কুকুর; প্রতিটি কুঁচি ফাইলগুলি পৃথক করে এমন একটি অঞ্চল দেখায়। ইউনিফাইড বিন্যাস কৃপণ শুরু লাইনের সাথে শুরু
@@ -1,8 +1,9 @@অথবা
@@ -18,6 +19,8 @@ ইন্টিমিটার সেন্টিমিডি_এইচটিপি_ফেট্চ (ইন্ট আরজিসি, কনস্ট চর ** আরজিভি, ...এটি ফরম্যাটে রয়েছে
@@ from-file-range to-file-range @@ [header]। থেকে ফাইল-সীমাটি ফর্মটিতে রয়েছে -<start line>,<number of lines>, এবং ফাইল-সীমা রয়েছে +<start line>,<number of lines>। উভয় সূচনা-লাইন এবং সংখ্যা-লাইনগুলি যথাক্রমে প্রাক এবং মূর্তিবিশেষে কান্ডের অবস্থান এবং দৈর্ঘ্য উল্লেখ করে। লাইন সংখ্যাটি যদি না দেখানো হয় তবে এর অর্থ এটি 0 হয়।
Alচ্ছিক শিরোনামটি সি ফাংশনটি দেখায় যেখানে প্রতিটি পরিবর্তন ঘটে থাকে, যদি এটি কোনও সি ফাইল হয় (যেমন -pGNU ডিফের মতো বিকল্প), বা সমতুল্য, যদি থাকে তবে অন্যান্য ধরণের ফাইলের জন্য।
এরপরে ফাইলের পার্থক্য কোথায় রয়েছে তার বিবরণ আসে। উভয় ফাইলে সাধারণ লাইনগুলি একটি স্থানের অক্ষর দিয়ে শুরু হয়। লাইনগুলি যে দুটি ফাইলের মধ্যে প্রকৃতপক্ষে পৃথক হয় বাম মুদ্রণ কলামে নীচের একটি সূচক অক্ষর থাকে:
সুতরাং, উদাহরণস্বরূপ, প্রথম খণ্ড
#include "cache.h"
#include "walker.h"
-int cmd_http_fetch(int argc, const char **argv, const char *prefix)
+int main(int argc, const char **argv)
{
+ const char *prefix;
struct walker *walker;
int commits_on_stdin = 0;
int commits;
এর অর্থ এটি cmd_http_fetchপ্রতিস্থাপন করা হয়েছিল main, এবং সেই const char *prefix;লাইনটি যুক্ত করা হয়েছিল।
অন্য কথায়, পরিবর্তনের আগে, তত্ক্ষণাত্ 'বিল্টিন-http-fetch.c' ফাইলের উপযুক্ত খণ্ডটি এর মতো দেখায়:
#include "cache.h"
#include "walker.h"
int cmd_http_fetch(int argc, const char **argv, const char *prefix)
{
struct walker *walker;
int commits_on_stdin = 0;
int commits;
পরিবর্তনের পরে এখন 'http-fetch.c' ফাইলটির এই টুকরোটি এর পরিবর্তে দেখাচ্ছে:
#include "cache.h"
#include "walker.h"
int main(int argc, const char **argv)
{
const char *prefix;
struct walker *walker;
int commits_on_stdin = 0;
int commits;
হতে পারে
Of ফাইলের শেষে কোনও নিউলাইন নেইলাইন উপস্থিত (এটি উদাহরণে পৃথক নয়)।
হিসাবে Donal ফেলোগণ বলেন এটা বাস্তব জীবনের উদাহরণ, যেখানে আপনি জানেন আপনি কি পরিবর্তিত হয়েছে উপর পড়া diffs অনুশীলন করতে ভাল।
তথ্যসূত্র:
git blame -C -Cকরে; এটি গিট ডিজাইনের সিদ্ধান্ত। গিট ডিফের ফর্ম্যাটটি কেবল ব্যবহারকারীর সাথে মিল (বা ভিন্নতা) সূচকটি দেখায়।
[header]গেলে, ফাংশন শুরুর সাথে নিকটবর্তী পূর্ববর্তীটি হুংকারের আগে। বেশিরভাগ ক্ষেত্রে এই রেখায় ফাংশনটির নাম অন্তর্ভুক্ত থাকে যেখানে অংশের বিভিন্নতা থাকে। এটি diffগিফট্রিবিউট ডিফ ড্রাইভারের সাথে সেট, এবং xfuncnameকনফিগারেশন ভেরিয়েবল সহ ডিফ ড্রাইভার সহ কনফিগারযোগ্য।
@@ -1,2 +3,4 @@ ডিফের অংশ
এই অংশটি বুঝতে আমাকে কিছুটা সময় নিয়েছে, তাই আমি একটি ন্যূনতম উদাহরণ তৈরি করেছি।
ফরম্যাটটি মূলত একই রকম diff -u ইউনিফাইড ডিফারেট।
এই ক্ষেত্রে:
diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')
এখানে আমরা 2, 3, 14 এবং 15 লাইনগুলি সরিয়েছি Out আউটপুট:
@@ -1,6 +1,4 @@
1
-2
-3
4
5
6
@@ -11,6 +9,4 @@
11
12
13
-14
-15
16
@@ -1,6 +1,4 @@ মাধ্যম:
-1,6এর অর্থ হ'ল প্রথম ফাইলটির এই অংশটি 1 লাইন থেকে শুরু হয় এবং মোট 6 টি লাইন দেখায়। সুতরাং এটি লাইন 1 থেকে 6 দেখায়।
1
2
3
4
5
6
-"পুরানো" অর্থ, আমরা সাধারণত এটি হিসাবে প্রার্থনা করি diff -u old new।
+1,4এর অর্থ এই যে দ্বিতীয় ফাইলটির এই অংশটি 1 লাইন থেকে শুরু হয় এবং মোট 4 টি লাইন দেখায়। সুতরাং এটি লাইন 1 থেকে 4 দেখায়।
+ "নতুন" এর অর্থ।
আমাদের 6 টির পরিবর্তে 4 টি লাইন রয়েছে কারণ 2 টি লাইন সরানো হয়েছিল! নতুন হাঙ্কটি ঠিক:
1
4
5
6
@@ -11,6 +9,4 @@ দ্বিতীয় কুনি জন্য অনুরূপ:
পুরানো ফাইলে, আমাদের 6 টি লাইন রয়েছে, পুরানো ফাইলের 11 লাইন থেকে শুরু:
11
12
13
14
15
16
নতুন ফাইলে, আমাদের 4 টি লাইন রয়েছে, নতুন ফাইলের 9 লাইন থেকে শুরু করে:
11
12
13
16
নোটটি 11নতুন ফাইলের 9 তম লাইন হিসাবে উল্লেখ করুন কারণ আমরা ইতিমধ্যে পূর্ববর্তী হুন: 2 এবং 3 তে 2 টি লাইন সরিয়ে ফেলেছি।
হুঙ্ক শিরোনাম
আপনার গিট সংস্করণ এবং কনফিগারেশনের উপর নির্ভর করে আপনি লাইনের পাশে একটি কোড লাইন পেতে পারেন @@, যেমন func1() {:
@@ -4,7 +4,6 @@ func1() {
এটি -pসমতল পতাকা দিয়েও পাওয়া যায় diff।
উদাহরণ: পুরানো ফাইল:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
আমরা যদি লাইনটি সরিয়ে 6ফেলি তবে ভিন্নতা দেখায়:
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
মনে রাখবেন যে func1এটির জন্য সঠিক লাইন নয় : এটি লাইনগুলি এড়িয়ে গেছে 1এবং 2।
এই দুর্দান্ত বৈশিষ্টটি প্রায়শই বলে দেয় যে প্রতিটি কুনি কোন ফাংশন বা শ্রেণীর অন্তর্ভুক্ত, যা ভিন্নতার ব্যাখ্যা দেওয়ার জন্য খুব দরকারী।
শিরোনামটি ঠিক কীভাবে বেছে নেবে তা বেছে নেওয়ার জন্য অ্যালগরিদমটি এখানে আলোচনা করা হয়েছে: গিট ডিফ হঙ্ক শিরোলেখার অংশটি কোথা থেকে এসেছে?
@@ -1,6 +1,4 @@, অনুগ্রহ পড়া না -1যেমন minus oneবা +1যেমন plus oneপরিবর্তে এই পড়া line 1 to 6পুরনো (প্রথম) ফাইল। এখানে দ্রষ্টব্য - implies "old"বিয়োগ নয়। বিটিডাব্লু, স্পষ্টতার জন্য ধন্যবাদ ... হ্যাশ
+1,4এই পিসটি দ্বিতীয় ফাইলের 1 থেকে 4 লাইনের সাথে মিলে যায় "। এর কারণ হ'ল +1,4অ-সংস্থার প্রসঙ্গ লাইনগুলি উল্লেখ করা যেতে পারে। বরং, কি হবে " +1,4" আসলে এর মানে হল যে হয় " আছে 4ফাইল 'সংস্করণ' থেকে লাইন (অর্থাত প্রসঙ্গ লাইন) "। এটা তোলে মানে বুঝতে গুরুত্বপূর্ণ +, -এবং <whitespace>সেই লাইনের শুরুতে যেমন কৃপণ ব্যক্তি ব্যাখ্যার ক্ষেত্রে প্রযোজ্য। আরও চাক্ষুষ উদাহরণ: youtube.com/watch?v=1tqMjJeyKpw
এখানে সহজ উদাহরণ।
diff --git a/file b/file
index 10ff2df..84d4fa2 100644
--- a/file
+++ b/file
@@ -1,5 +1,5 @@
line1
line2
-this line will be deleted
line4
line5
+this line is added
এখানে একটি ব্যাখ্যা (বিশদ এখানে দেখুন )।
--git কোনও আদেশ নয়, এর অর্থ এটি ডিফের একটি গিট সংস্করণ (ইউনিক্স নয়)a/ b/ডিরেক্টরি হয়, তারা বাস্তব নয়। যখন আমরা একই ফাইলটি মোকাবেলা করি তখন এটি কেবল একটি সুবিধা (আমার ক্ষেত্রে a / সূচকে থাকে এবং খ / কার্য ডিরেক্টরিতে থাকে)10ff2df..84d4fa2 এই 2 টি ফাইলের ব্লক আইডি100644 এটি হ'ল "মোড বিটস", এটি নির্দেশ করে যে এটি একটি নিয়মিত ফাইল (কার্যকর নয় এবং প্রতীকী লিঙ্ক নয়)--- a/file +++ b/fileবিয়োগ চিহ্নগুলি একটি / সংস্করণে লাইন দেখায় তবে খ / সংস্করণ থেকে অনুপস্থিত; এবং আরও লক্ষণগুলি / এ বি / এ উপস্থিত লাইনগুলি দেখায় (আমার ক্ষেত্রে --- এর অর্থ মুছে ফেলা লাইন এবং +++ মানে বি / এ যুক্ত লাইন এবং এটি কার্যকারী ডিরেক্টরিতে ফাইল)@@ -1,5 +1,5 @@এটি বোঝার জন্য একটি বড় ফাইলের সাথে কাজ করা ভাল; যদি আপনার বিভিন্ন জায়গায় দুটি পরিবর্তন হয় তবে আপনি দুটি এন্ট্রি পাবেন @@ -1,5 +1,5 @@; ধরুন আপনার কাছে লাইন 1 ... লাইন 100 এবং মোছা লাইন 10 রয়েছে এবং নতুন লাইন 100 যোগ করুন - আপনি পাবেন:@@ -7,7 +7,6 @@ line6 line7 line8 line9 -this line10 to be deleted line11 line12 line13 @@ -98,3 +97,4 @@ line97 line98 line99 line100 +this is new line100
644) অষ্টালে পড়তে হবে (মান: 1, 2, 4 যথাক্রমে এক্স এক্সিউট, লিখুন, এবং পড়ুন অনুমতি) এবং সেই আদেশের সাথে মালিক (ব্যবহারকারী), তারপরে গ্রুপ, তারপরে অন্যান্য অনুমতিগুলির সাথে সম্পর্কিত s সংক্ষেপে 644লিখিত প্রতীকী যদি বোঝা যায় তবে u=rw,og=rতা প্রত্যেকের কাছেই পঠনযোগ্য তবে কেবল মালিকের দ্বারা লিখিত। বাম এনকোডের অন্যান্য অঙ্কগুলি অন্যান্য তথ্য যেমন এটি কোনও সিমলিংক ইত্যাদি etc. যেমন মানগুলি github.com/git/git/blob/… দেখা যায় , এই অবস্থানে প্রথম 1 হ'ল "নিয়মিত ফাইল"।
ডিফল্ট আউটপুট ফর্ম্যাট (যা মূলত এমন প্রোগ্রাম থেকে আসে যা diffআপনি আরও তথ্যের সন্ধান করতে চান এমন হিসাবে পরিচিত) "ইউনিফাইড ডিফ" হিসাবে পরিচিত। এটিতে মূলত 4 টি বিভিন্ন ধরণের লাইন রয়েছে:
+,-এবংআমি আপনাকে পরামর্শ দিচ্ছি যে আপনি এমন কোনও ফাইলের দুটি সংস্করণের মধ্যে পড়ার অনুশীলন করুন যেখানে আপনি ঠিক কী পরিবর্তন করেছেন তা জানেন। এর মতো আপনি যখন যা দেখবেন ঠিক তখনই তা বুঝতে পারবেন।
আমার ম্যাকে:
info diffতারপরে নির্বাচন করুন: Output formats-> Context-> Unified format-> Detailed Unified:
বা অনলাইন মানুষ একই বিভাগে একই পথে অনুসরণ করা gnu- তে পৃথক:
ফাইল: diff.info, নোড: বিস্তারিত ইউনিফাইড, পরবর্তী: উদাহরণ ইউনিফাইড, আপ: ইউনিফাইড বিন্যাস
ইউনিফাইড বিন্যাসের বিশদ বিবরণ ......................................
ইউনিফাইড আউটপুট ফর্ম্যাটটি একটি দুই-লাইনের শিরোনাম দিয়ে শুরু হয়, যা দেখতে এরকম দেখাচ্ছে:
--- FROM-FILE FROM-FILE-MODIFICATION-TIME +++ TO-FILE TO-FILE-MODIFICATION-TIMEসময় স্ট্যাম্পটি with 2002-02-21 23: 30: 39.942229878 -0800 'দেখতে তারিখ, ভগ্নাংশের সেকেন্ড সহ সময় এবং সময় অঞ্চলটি নির্দেশ করে।
আপনি `--label = LABEL 'বিকল্পের সাহায্যে শিরোনামের সামগ্রী পরিবর্তন করতে পারেন; বিকল্প নোট দেখুন:।
এরপরে আসে পার্থক্যগুলির এক বা একাধিক কুকুর; প্রতিটি কুঁচি ফাইলগুলি পৃথক করে এমন একটি অঞ্চল দেখায়। ইউনিফাইড বিন্যাস কৃপণ দেখতে দেখতে:
@@ FROM-FILE-RANGE TO-FILE-RANGE @@ LINE-FROM-EITHER-FILE LINE-FROM-EITHER-FILE...উভয় ফাইলে সাধারণ লাইনগুলি একটি স্থানের অক্ষর দিয়ে শুরু হয়। লাইনগুলি যে দুটি ফাইলের মধ্যে প্রকৃতপক্ষে পৃথক হয় বাম মুদ্রণ কলামে নীচের একটি সূচক অক্ষর থাকে:
এখানে প্রথম ফাইলটিতে একটি লাইন যুক্ত হয়েছিল।
`- 'প্রথম ফাইলটি থেকে এখানে একটি লাইন সরানো হয়েছিল।
আপনার প্রশ্নগুলি থেকে এটি স্পষ্ট নয় যে আপনি কোন মতভেদগুলি বিভ্রান্তিকর দেখতে পান: বাস্তবে ভিন্নতা বা অতিরিক্ত শিরোনামের তথ্য গিট প্রিন্ট। কেবলমাত্র ক্ষেত্রে, এখানে শিরোনামের একটি দ্রুত ওভারভিউ।
প্রথম লাইনটি হ'ল কিছু diff --git a/path/to/file b/path/to/file- এটি স্পষ্টতই আপনাকে বলছে যে পার্থক্যের এই বিভাগটি কোন ফাইলের জন্য। আপনি যদি বুলিয়ান কনফিগার ভেরিয়েবল সেট করে থাকেন diff.mnemonic prefixতবে aএবং এর bপরিবর্তে আরও বর্ণনামূলক অক্ষরে পরিবর্তিত হবে cএবং w(কমিট এবং ওয়ার্ক ট্রি)।
এরপরে, "মোড লাইনগুলি" রয়েছে - লাইনগুলি আপনাকে এমন কোনও পরিবর্তনের বিবরণ দেয় যা ফাইলের বিষয়বস্তু পরিবর্তন করতে জড়িত না। এর মধ্যে নতুন / মুছে ফেলা ফাইল, নতুন নামকরণ / অনুলিপি করা ফাইল এবং অনুমতিগুলির পরিবর্তন অন্তর্ভুক্ত রয়েছে।
অবশেষে, একটি লাইনের মত আছে index 789bd4..0afb621 100644। আপনি সম্ভবত এটি সম্পর্কে কখনই চিন্তা করবেন না তবে এই 6-সংখ্যার হেক্স নম্বরগুলি এই ফাইলটির জন্য পুরানো এবং নতুন ব্লবের সংক্ষেপিত SHA1 হ্যাশগুলি (একটি ব্লাব একটি ফাইলের বিষয়বস্তুর মতো কাঁচা ডেটা সংরক্ষণ করে গিট অবজেক্ট)। এবং অবশ্যই, 100644ফাইলটির মোড - শেষ তিনটি সংখ্যা অবশ্যই স্পষ্টভাবে অনুমতি; প্রথম তিনটি অতিরিক্ত ফাইলের মেটাডেটা তথ্য দেয় ( এটি বর্ণনা করে এমন এসও পোস্ট )।
এর পরে, আপনি স্ট্যান্ডার্ড ইউনিফাইড ডিফার আউটপুটটিতে চলেছেন (ক্লাসিকের মতো diff -U)। এটি কুকুরের মধ্যে বিভক্ত - একটি কুনি হ'ল ফাইলের একটি বিভাগ যা পরিবর্তন এবং তাদের প্রসঙ্গে রয়েছে। প্রতিটি হুঙ্কের আগে জোড়া ---এবং +++লাইনগুলি প্রশ্নযুক্ত ফাইলটিকে বোঝায়, তারপরে প্রকৃত পার্থক্যটি (ডিফল্টরূপে) উভয় প্রান্তের প্রান্তের তিনটি লাইন -এবং +সরানো / যুক্ত রেখাগুলি দেখানো লাইন।
indexলাইনের জন্য ++ । এর সাথে নিশ্চিতgit hash-object ./file