গিট: স্থানীয় রেপো এবং উত্সের মধ্যে ফাইলের মধ্যে পার্থক্য


186

আমি আমার স্থানীয় রেপো বনাম যা আছে তার মধ্যে একটি ফাইলের মধ্যে পার্থক্যগুলি সন্ধান করতে চাই origin master

আমি জানি যে আছে git diff, তবে আমি কেবল এটি একটি নির্দিষ্ট ফাইল থেকে আলাদা করতে চাই।

সরলতার জন্য বলুন যে ফাইলটির নাম দেওয়া হয়েছে file1.txtএবং এটির একটি স্থানীয় ফাইল পাথ = [local_path]এবং মূলতে এটিতে ফাইলপথ = রয়েছে [remote-path]

আমার যে গিট কমান্ডটি টাইপ করতে হবে তা কী হবে?

সম্পাদনা: আপনার ইনপুটটির জন্য সকলকে ধন্যবাদ এটি অত্যন্ত অন্তর্দৃষ্টিপূর্ণ হয়েছে। যাঁরা Eclipse ব্যবহার করছেন (যা আমি এবং আমি আগে বলেছিলাম) আমি ঠিক খুঁজে পেয়েছি যে আপনি ঠিক ক্লিক করতে পারেন -> সাথে তুলনা করুন -> শাখা, ট্যাগ বা রেফারেন্স -> উপযুক্ত সংস্করণ নির্বাচন করুন এবং আপনি সেখানে যান go


[দূরবর্তী পথ] [স্থানীয়-পথ] থেকে আলাদা?
কোড-শিক্ষানবিস

আমি কেবল আপনার সম্পাদনা লক্ষ্য করেছি। একটি উত্তর হিসাবে এটি নির্দ্বিধায় পোস্ট করুন।
কোড-শিক্ষানবিশ

আপনি কি "উত্স শিক্ষক"?

গ্রহগ্রী উদাহরণস্বরূপ পদ্ধতিটি ভাল
ব্যবহারকারীর 1169587

উত্তর:


248

যদি [remote-path]এবং [local-path]একই হয়, আপনি করতে পারেন

$ git fetch origin master
$ git diff origin/master -- [local-path]

দ্রষ্টব্য 1: উপরের দ্বিতীয় কমান্ডটি স্থানীয়ভাবে সঞ্চিত দূরবর্তী ট্র্যাকিং শাখার সাথে তুলনা করবে। রিমোট সার্ভারের বিষয়বস্তুগুলির সাথে সুসংগত হওয়ার জন্য রিমোট ট্র্যাকিং শাখাকে আপডেট করার জন্য আনতে কমান্ডটি প্রয়োজন। বিকল্পভাবে, আপনি ঠিক করতে পারেন

$ git diff master:<path-or-file-name>

নোট 2: master উপরের উদাহরণগুলিতে কোনও শাখার নাম সহ প্রতিস্থাপন করা যেতে পারে


15
এমনকি যদি বর্তমান ডিরেক্টরিটি হয় তবে স্থানীয় পথটি বাদ দিতে পারে।
টনি ওয়াল

19
আমার মতো যারা চূড়ান্তভাবে git diff master:README.md -- README.md
নুবুকের

23
আসলে, এখানে আরও একটি ভাল উদাহরণ:git diff origin/master -- README.md
JDiMatteo

git fetch masterপরিবর্তে আমি ব্যবহৃত করতে পারি না git fetch .(উত্স / মাস্টারও কাজ করে না) তবে বাকীগুলি ভাল কাজ করেছিল।
ছিনিয়ে নিন

1
@rob আপনিই আমার ভুলটি প্রথম প্রকাশ করেছেন। এটা হওয়া উচিত git fetch **origin**
কোড-শিক্ষানবিশ

114

দূরবর্তী ফাইল থেকে স্থানীয় ফাইলে যেতে পার্থক্যগুলি দেখতে:

git diff remotename/branchname:remote/path/file1.txt local/path/file1.txt

অন্য দিকের পার্থক্যগুলি দেখতে:

git diff HEAD:local/path/file1.txt remotename/branchname:remote/path/file1.txt

মূলত আপনি এই নোটেশনটি ব্যবহার করে যে কোনও দুটি ফাইলকে পৃথক করতে পারেন:

git diff ref1:path/to/file1 ref2:path/to/file2

যথারীতি, ref1এবং ref2শাখার নাম, রিমোটনাম / শাখা নাম, কমিট এসএএচ ইত্যাদি হতে পারে


17

স্থানীয় সংগ্রহস্থলকে দূরবর্তী স্থানের সাথে তুলনা করতে কেবল নীচের বাক্য গঠনটি ব্যবহার করুন:

git diff @{upstream}

2

তার জন্য আমি একটি বাশ স্ক্রিপ্ট লিখেছি:

#set -x 
branchname=`git branch | grep -F '*' |  awk '{print $2}'`
echo $branchname
git fetch origin ${branchname}
for file in `git status | awk '{if ($1 == "modified:") print $2;}'`
do
echo "PLEASE CHECK OUT GIT DIFF FOR "$file 
git difftool  FETCH_HEAD $file ;
done

উপরের স্ক্রিপ্টে, আমি দূরবর্তী প্রধান শাখাটি (এর কোনও মাস্টার শাখা কোনও প্রয়োজন নেই) এ নিয়ে FETCH_HEADএসেছি, তারপরে কেবল আমার পরিবর্তিত ফাইলের একটি তালিকা তৈরি করুন এবং পরিবর্তিত ফাইলগুলির সাথে তুলনা করুন git difftool

difftoolগিট দ্বারা সমর্থিত অনেকগুলি রয়েছে , আমি Meld Diff Viewerভাল জিইউআই তুলনার জন্য কনফিগার করেছি ।
উপরের লিপি থেকে, আমার আগে থেকেই একই ফাইলের অন্যান্য দলগুলি কী পরিবর্তন করেছে তা আমার পূর্ববর্তী জ্ঞান ছিল, আমি গিট স্টেজগুলি অনুসরণ করার আগে untrack-->staged-->commitযা আমাকে দূরবর্তী দলের সাথে অপ্রয়োজনীয় সমাধানের সংঘাত এড়াতে বা নতুন স্থানীয় শাখা তৈরি করতে এবং মূল শাখায় তুলনা ও একীভূত করতে সহায়তা করে।


1

আমি বেশ কয়েকটা সমাধান চেষ্টা করেছিলাম তবে আমি এর মতো সহজ উপায় (আপনি স্থানীয় ফোল্ডারে রয়েছেন):

#!/bin/bash
git fetch

var_local=`cat .git/refs/heads/master`
var_remote=`git log origin/master -1 | head -n1 | cut -d" " -f2`

if [ "$var_remote" = "$var_local" ]; then
    echo "Strings are equal." #1
else
    echo "Strings are not equal." #0 if you want
fi

তারপরে আপনি স্থানীয় গিট এবং দূরবর্তী গিটের সর্বশেষ কমিট নম্বরটি তুলনা করেছেন ....


0

স্থানীয় এবং দূরবর্তী অঞ্চলে একটি সম্ভাব্য পৃথক পথ সম্পর্কে যে মূল প্রশ্নের কথা বলছিল তার সম্পূর্ণ উত্তর নীচে রয়েছে

  1. git fetch origin
  2. git diff master -- [local-path] origin/master -- [remote-path]

স্থানীয় পথটি হ'ল ডক্স / ফাইল1.txt এবং দূরবর্তী পাথ হ'ল ডক্স 2 / ফাইল1.txt, ব্যবহার করুন git diff master -- docs/file1.txt origin/master -- docs2/file1.txt

এটি এখানে গিটহাব সহায়তা পৃষ্ঠা এবং উপরের কোড-অ্যাপ্রেন্টিস উত্তর থেকে অভিযোজিত

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