যখন কেবল সিপি ব্যবহার করা সহজ হয় তখন কেন ডিফ / প্যাচ ব্যবহার করবেন


19
diff -u file1.txt file2.txt > patchfile

ফাইল patch1.txt ফাইলকে ঠিক ফাইল 2.txt এর মত রূপান্তর করার জন্য নির্দেশাবলী সমন্বিত একটি প্যাচ ফাইল তৈরি করে

cpপরিবর্তে কমান্ড ব্যবহার করে এটি করা যায় না ? ফাইলটি খুব বড় হয়ে যাওয়ার জন্য এবং এমন কোনও নেটওয়ার্কের মধ্যে স্থানান্তর করতে হবে যেখানে এই পদ্ধতির ব্যান্ডউইদথ সংরক্ষণ করতে পারে এর জন্য এটি কার্যকর হতে পারে তা আমি কল্পনা করতে পারি। ডিফ / প্যাচ ব্যবহারের অন্য কোনও উপায় আছে যা অন্যান্য পরিস্থিতিতে সুবিধাজনক হবে?

উত্তর:


31

একটি ফাইলের তুলনায় অন্যটির তুলনায় ডিফগুলি আরও জটিল হতে পারে। সম্পূর্ণ ডিরেক্টরি শ্রেণিবিন্যাসের তুলনা করতে পারে। আমি জিসিসিতে একটি বাগ ঠিক করতে চাই যে উদাহরণটি বিবেচনা করুন। আমার পরিবর্তনগুলি 4 বা 5 ফাইলে একটি লাইন বা দুটি যুক্ত করে এবং সেইগুলি এবং অন্যান্য ফাইলগুলিতে মুষ্টিমেয় লাইনগুলি মুছে দেয়। আমি যদি এই পরিবর্তনগুলি কারও সাথে যোগাযোগ করতে চাই তবে জিসিসিতে অন্তর্ভুক্তির জন্য আমার বিকল্পগুলি

  • পুরো উত্স ট্রি অনুলিপি করুন
  • পরিবর্তিত ফাইলগুলি কেবল অনুলিপি করুন
  • আমার করা পরিবর্তনগুলি সরবরাহ করুন Supply

পুরো উত্স ট্রি অনুলিপি করা কোনও অর্থবোধ করে না, তবে অন্য দুটি বিকল্প সম্পর্কে কী বলা যায় যা আপনার প্রশ্নের মূল অংশে আসে। এখন বিবেচনা করুন যে অন্য কেউও আমার মতো একই ফাইলটিতে কাজ করেছে এবং আমরা দুজনেই কাউকে আমাদের পরিবর্তনগুলি দিয়েছি। এই ব্যক্তি কীভাবে জানবেন যে আমরা কী করেছি এবং যদি পরিবর্তনগুলি সামঞ্জস্যপূর্ণ হয় (ফাইলের বিভিন্ন অংশ) বা বিরোধ (ফাইলের একই লাইন)? তিনি তাদের বিভিন্ন হবে! পার্থক্য তাকে বলতে পারে কীভাবে ফাইলগুলি একে অপরের থেকে এবং অপরিবর্তিত উত্স ফাইল থেকে পৃথক। ডিফটি যদি প্রয়োজন হয় তবে এটি কেবল প্রথমে আলাদা করে পাঠাতে আরও বোধগম্য হয়। একটি ডিফের মধ্যেও একাধিক ফাইলের পরিবর্তন থাকতে পারে, সুতরাং আমি মোট 9 টি ফাইল সম্পাদনা করার সময়, এই পরিবর্তনগুলি বর্ণনা করার জন্য আমি একটি একক ডিফ ফাইল সরবরাহ করতে পারি।

ইতিহাস সরবরাহ করতে ডিফগুলিও ব্যবহার করা যেতে পারে। যদি তিন মাস আগে কোনও পরিবর্তন ঘটে তবে আমি কেবল এটিই আবিষ্কার করেছি। বাগটি চালু হওয়ার সময় আমি যদি সংকীর্ণ হতে পারি এবং এটি একটি নির্দিষ্ট পরিবর্তনে পৃথক করতে পারি, তবে আমি এই পরিবর্তনটি "পূর্বাবস্থায় ফেরাতে" বা পরিবর্তনটি ফিরিয়ে নিতে পারি। আমি কেবল খুব সহজেই ফাইলগুলি অনুলিপি করতে পারলে এটি আমি খুব সহজেই করতে পারি।

এটি উত্স সংস্করণ নিয়ন্ত্রণের সাথে সমস্ত সম্পর্কযুক্ত যেখানে প্রোগ্রামগুলি ফাইল তৈরির ইতিহাসটিকে আজ অবধি তৈরি হওয়ার সময় থেকে ভিন্নতার একটি সিরিজ হিসাবে রেকর্ড করতে পারে। পার্থক্য ইতিহাস সরবরাহ করে (আমি ফাইলটি কোনও নির্দিষ্ট দিনের মতোই পুনরায় তৈরি করতে পারি), আমি দেখতে পাচ্ছি যে কোনও কিছু ভাঙার জন্য কাকে দোষ দেওয়া উচিত (ডিফের মালিকের মালিক আছে) এবং আমি সহজেই নির্দিষ্ট প্রবাহের মাধ্যমে প্রবাহ প্রকল্পগুলিতে পরিবর্তনগুলি জমা দিতে পারি ( আমি যখন অনেকগুলি তৈরি করি তখন তারা কেবলমাত্র একটি পরিবর্তনতে আগ্রহী)।

সংক্ষেপে, হ্যাঁ, এর cpচেয়ে সহজ diffএবং patchতবে ফাইলগুলি কীভাবে পরিবর্তন হয় তা ট্র্যাক করা গুরুত্বপূর্ণ এমন পরিস্থিতিতে তার উপযোগিতা diffএবং patchএর চেয়ে বেশি cp


প্রকৃতপক্ষে, গিটটি ফাইলের ইতিহাস পরবর্তীকালের কমিটগুলির পৃথক হিসাবে সংরক্ষণ করে না। প্রতিটি কমিটের জন্য স্টোর, প্রতিটি ফাইলের সামগ্রী ("গিট শো -এস - ব্যাখ্যাটি = কাঁচা" এবং "গিট এলএস-ট্রি হেড" দেখুন)। তারপরে, এই স্তরটির উপরে বিভিন্ন কমিটে অনেকগুলি ফাইল একই রকম হবে, এটি ডেটা বেন্টিন ফাইলগুলি ভাগ করতে ডেল্টা সংক্ষেপণ ব্যবহার করে (তবে এটি ইতিহাসের সাথে আবদ্ধ নয়)।
ysdx

ভিন্নতাগুলি এই ইতিহাসের জন্য একটি সুবিধাজনক ভিজুয়ালাইজেশন সরঞ্জাম।
ysdx

20

আপনি যখন কোনও প্যাচ পান আপনি প্রায়শই করতে পারেন (এটি হ'ল যদি আপনি একই একই লাইনে পরিবর্তন না করেন) প্যাচটি এমন একটি ফাইলের সেটটিতে প্রয়োগ করুন যা আপনি নিজেও পরিবর্তন করেছেন।

প্যাচটিতে ফাইলগুলির পুরানো এবং নতুন অবস্থার তথ্য রয়েছে। যদি আপনি কোনও অনুলিপিযুক্ত ফাইল পান তবে আপনি জানেন না যে আসলটি কী (পুরানো অবস্থা) এবং আপনি কোনও ফাইল (বা ফাইলের সেট) -এর পার্থক্যগুলি প্রয়োগ করতে পারবেন না যা আপনি খুব অসুবিধা ছাড়াই পরিবর্তন করেছেন। উত্স ফাইলের সেটগুলির জন্য এটি স্থান সংরক্ষণ নয় যে এটি সবচেয়ে বড় উদ্বেগের বিষয়, এটি পূর্ব-পরবর্তী তথ্য।

(প্রসঙ্গ / একীভূত) পৃথক হওয়ার আগে এটি প্রায়শই সম্পাদকদের নির্দেশাবলী দিয়ে করা হত (এক্স এর পরে একটি লাইন সন্নিবেশ করান, লাইন ওয়াই মুছুন), তবে কেবলমাত্র যদি আপনি এই রাজ্যটি এই নির্দেশনাটি শুরু করেছিলেন তা জানতেন তবেই এটি কাজ করবে। সুতরাং কেবল অনুলিপি করে আপনার "সমাধান" এর মতো একই সমস্যা হচ্ছে।


2
প্যাচ ফাইলগুলি আপনাকে এটিকে পূর্বাবস্থায় ফিরিয়ে আনতে এবং একবারে একাধিক ফাইলে এটি প্রয়োগ করতে দেয়
গিলশাম

প্রকৃতপক্ষে, ইউনিফাইড ডিফস ( diff -u) মানুষের জন্য ডিজাইন করা একটি উন্নতি, তারা নিয়মিত প্রসঙ্গে ( diff -c) প্রসঙ্গে দ্বন্দ্বের বিরুদ্ধে দৃust়তা সহায়তা করে না , আমি মনে করি। এমনকি সরল ভিন্নতা ( diff) এখনও প্রায়শই "এই নির্দেশাবলীর দিক থেকে এই নির্দেশনা শুরু হয়েছিল" ঠিক না জেনে কাজ করে। তবুও, এটি গ্রহণযোগ্য উত্তরের চেয়ে ভাল কারণ প্যাচ ফাইলগুলি একই সাথে একাধিক উত্স ফাইলগুলিকে কীভাবে প্যাচ করতে পারে সে সম্পর্কে কথা বলা সত্যিই একটি লাল হেরিং।
সেলেদা

@ এসলেদা আপনি প্রসঙ্গের পার্থক্য সম্পর্কে ঠিক বলেছেন, তার মধ্যে এবং সাধারণ পার্থক্যের মধ্যেই যেখানে মূল পার্থক্য রয়েছে। প্রসঙ্গ ব্যতীত প্যাচগুলি বিপরীতে প্রয়োগ করা বেশি শক্ত, যদি তা হয় তবে।
অ্যান্থন

12

আপনি যদি ডিফ ব্যবহার করে থাকেন তবে দেখতে পাবেন ঠিক কী পরিবর্তন হয়েছে তাই ডিফ / প্যাচ ব্যবহার করা কাউকে ফাইলে অযাচিত পরিবর্তনগুলি স্খলন থেকে রক্ষা করার উপায়।


11

ফাইলগুলিতে করা পরিবর্তনগুলি সাধারণত ফাইলগুলি পরিবর্তিত হওয়ার চেয়ে অনেক ছোট হয়।

এর অর্থ একটি ডিফ সংরক্ষণ করা আপনাকে প্রচুর জায়গা বাঁচাতে পারে। কখন diffতৈরি করা হয়েছিল, ডিস্কের জায়গাটি ব্যয়বহুল ছিল।

তবে এর অর্থ হ'ল সেই ফাইলটি অন্য উপায়ে পরিবর্তিত হয়ে গেলেও আপনি কোনও ফাইলের জন্য আলাদাভাবে আবেদন করতে পারেন। প্যাচ ইউটিলিটি আপনার জন্য কি এবং আপনাকে বলতে যদি কোন সমস্যা হয় হবে।

এটি প্রকৃতপক্ষে সফ্টওয়্যার বিকাশের ক্ষেত্রে ভিন্নতার সাথে কাজ করার সবচেয়ে গুরুত্বপূর্ণ কারণ। যখন কোনও পরিবর্তন করা হয় (সাধারণত একাধিক ফাইলের কাছে) তখন এটি ভিন্ন হিসাবে সংরক্ষণ করা যায়: ফলাফলটিকে পরিবর্তন সেট বা প্যাচ বলা হয় । যদি সবকিছু ঠিকঠাক হয় তবে প্যাচটি কেবল কিছু স্বেচ্ছাসেবী পরিবর্তন নয়, তবে এটি কিছু প্রকারের কার্যকরী পরিবর্তন প্রয়োগ করে - যেমন একটি বাগ ফিক্স বা একটি নতুন বৈশিষ্ট্য।

এদিকে, সম্ভবত অন্য কোনও বিকাশকারী এমনকি আলাদা স্থানেও ভিন্ন পরিবর্তন আনতে পারবেন। যদি একই ফাইলগুলির একই অংশে পরিবর্তন না করা হয়, তবে সেগুলি স্বাধীনভাবে প্রয়োগ করা যেতে পারে। সুতরাং বিকাশকারীরা একে অপরকে তাদের প্যাচগুলি পরীক্ষার জন্য প্রেরণ করতে পারেন। প্যাচগুলির একটি সম্পূর্ণ সেট তৈরি করতে পারে যা সম্ভাব্য পরিবর্তনের প্রতিনিধিত্ব করে; এর মধ্যে কিছু চূড়ান্তভাবে প্রত্যাখ্যাত হতে পারে, বাকিগুলি সিস্টেমে সংহত করা হবে।

সুতরাং ডিফসের সাথে কাজ করা সমবর্তী বিকাশের অনুমতি দেয়। আপনাকে আর একবারে একটি পরিবর্তন নিয়ে কাজ করতে হবে না।

আধুনিক বিতরণিত সংস্করণ নিয়ন্ত্রণ সিস্টেমগুলি এই কাজের এই ধারাবাহিকতা।


1

সংক্ষেপে এটি পারে। আপনি যদি ইউটিউবে কিছু থিঙ্ক বিগ ল্যারি ওয়াল ভিডিও দেখে থাকেন তবে তিনি কীভাবে পৃথক / প্যাচ শুরু হয়েছিল এবং কী সমস্যাগুলি সমাধান করেছেন সে সম্পর্কে তিনি কথা বলেন এবং সংক্ষেপে এটি প্যাচগুলি নমনীয় এবং মানব-পঠনযোগ্য রাখার সময় ইন্টারনেটে যোগাযোগের জন্য আকার হ্রাস করার বিষয়ে ছিল ।

আপনি একটি স্থানীয় সিস্টেমে হন এবং যদি এই রকমের কোন যত্নশীল, তারপর না cpবা rsyncজরিমানা হয়।


ধন্যবাদ পিএসকোকিক আপনি কি দয়া করে সেই ভিডিওর লিঙ্কটি ভাগ করে নিতে পারেন?
toddlermenot

আমি সর্বশেষ বক্তব্যের সাথে একমত নই। এটি আজকের আকারের বিষয়ে নয়, এটি আপনার বিকাশ প্রক্রিয়াটি ট্র্যাক করার বিষয়ে তাই এটি পরিচালনা করা সহজ হয়ে যায়।
পুনরায় পোষ্ট

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