প্যাচ তৈরি করার জন্য এটি কি ভাল উপায়?


15

আমি gccসরকারী প্রকাশের সাথে তুলনা করে একটি নির্দিষ্ট শাখা থেকে একটি প্যাচ তৈরি করতে চাই ; সুতরাং যখন আমি স্থিতিশীল রিলিজ থেকে তারবালটি আনপ্যাক করি তখন আমি প্যাচটি প্রয়োগ করতে পারি এবং সেই নির্দিষ্ট শাখায় যা ছিল তার সমতুল্য পেতে পারি।

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

diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch

এটি কি যথেষ্ট এবং এটি করার সর্বোত্তম উপায়?


এখানে স্বাভাবিক নিয়মগুলি সংস্করণ নিয়ন্ত্রণ বা এর কিছু বৈকল্পিক জড়িত। এর মধ্যে রয়েছে মার্উরিয়াল, গিট এবং তাদের সম্পর্কিত প্যাচ সারি এক্সটেনশনগুলি। আপনিও ভরাট বিবেচনা করতে পারেন। আপনি যা করার চেষ্টা করছেন তা সম্ভবত আপনি আরও বিশদে যেতে পারেন?
ফাহিম মিঠা

@ ফাহিমমিঠ "আরও বিশদ" দিয়ে আপনার অর্থ কী? আমার কাছে gccঅফিশিয়াল স্ট্যাবিলের একটি সংস্করণ tar.bz2এবং এর gitসংগ্রহস্থল থেকে এর আরেকটি অস্থির সংস্করণ রয়েছে , আমি একটি প্যাচ তৈরি করতে চাই, অবশ্যই আমি পুরো masterশাখার চেয়ে নয় কেবল শাখার বিরুদ্ধে তুলনা করতে চাই ।
ব্যবহারকারী 2485710

ঠিক আছে, ভাল, আপনি পৃথক হিসাবে সহজ কিছু ব্যবহার করতে পারেন তা নিশ্চিত। তবে সংস্করণ নিয়ন্ত্রণ ব্যবহার করা সাধারণত পছন্দনীয়। একটি জিনিসের জন্য, আপনি কী করছেন তার ট্র্যাক হারাতে এটি আরও শক্ত করে তোলে।
ফাহিম মিঠা 21

@ ফাহিমমিঠা আপনি কী পরামর্শ দিচ্ছেন তা আমি বুঝতে পারছি না, আমার tar.bz2স্পষ্টতই কোনও gitভাণ্ডার নয়, কীভাবে আপনি মনে করেন আমার এগিয়ে যাওয়া উচিত?
ব্যবহারকারী 2485710

1
"সংস্করণ নিয়ন্ত্রণ ব্যবহার করে প্যাচগুলি তৈরি করতে" অনুসন্ধান করুন। পূর্বের দুটি উত্তর যা আমি লিখেছি সেগুলি হ'ল ইউনিক্স.স্ট্যাকেক্সেঞ্জা.কম /
ফাহিম মিঠা

উত্তর:


20

হ্যাঁ, এটি প্যাচ তৈরির একটি ভাল উপায়।

সংক্ষেপে:

  1. একক ফাইলের জন্য প্যাচ তৈরি করতে আপনার কমান্ডটি দেখতে পারে

    diff -Naru file_original file_updated > file.patch

    কোথায়

    • -N: অনুপস্থিত ফাইলগুলি খালি হিসাবে গণ্য করুন
    • -a: সমস্ত ফাইলকে পাঠ্য হিসাবে বিবেচনা করুন
    • -r: পুনরাবৃত্তভাবে পাওয়া যে কোনও উপ-ডিরেক্টরিকে তুলনা করুন
    • -u: আউটপুট NUM (ডিফল্ট 3) ইউনিফাইড প্রসঙ্গে লাইন
  2. পুরো ডিরেক্টরিতে প্যাচ তৈরি করতে:

    diff -crB dir_original dir_updated > dfile.patch

    কোথায়

    • -c: অনুলিপি NUM (ডিফল্ট 3) অনুলিপি করা প্রসঙ্গে lines
    • -r: পুনরাবৃত্তভাবে যে কোনও উপ-ডিরেক্টরিকে তুলনা করুন
    • -B: যার রেখাগুলি সমস্ত শূন্য রয়েছে এমন পরিবর্তনগুলি উপেক্ষা করুন

সর্বোপরি এই প্যাচ প্রয়োগ করার জন্য একটি চালাতে পারে

patch -p1 --dry-run < dfile.patch

যেখানে সুইচ pপ্যাচটিকে পাথের উপসর্গটি স্ট্রিপ করার নির্দেশ দেয় যাতে ফাইলগুলি সঠিকভাবে চিহ্নিত করা যায়। বেশিরভাগ ক্ষেত্রে এটি হওয়া উচিত 1

--dry-runআপনি যদি স্ক্রিনে মুদ্রিত ফলাফল থেকে খুশি হন তবে সরান ।


প্রশ্ন: যদি কোনও ডিরেক্টরি বা একটি ফাইল dir_updatedসেখানে থাকাটির তুলনায় মুছে ফেলা হয় তবে তার কী হবে dir_original? diffখুব যে যত্ন নেয় অথবা এটি এড়ানো পায়?
ব্যবহারকারী 2485710

@ ব্যবহারকারী 2485710 বিভিন্ন ফাইলগুলি মুছে ফেলা হয়েছে তা দেখতে পান। file.patchকেবল একটি পাঠ্য ফাইলে, যাতে আপনি এটি কোনও সম্পাদক বা খালি catএটি খুলতে পারেন এবং আপনি একটি লাইন দেখতে পাবেনonly in dir_original: missingfile.txt
jimmij

ঠিক আছে, তবে তা patchমুছে ফেলবে missingfile.txtনাকি আর কি?
ব্যবহারকারী 2485710

এটা নির্ভর করে. আপনি যদি এগুলি মুছতে চান তবে diff -N ...আমার প্রথম উদাহরণ হিসাবে ব্যবহার করুন । সাধারণত patchখালি ফাইলগুলি ডিফল্টরূপে মুছে ফেলা হবে। আপনি যদি না চান তবে কেবল diff -crBআপনার প্রশ্নের মতোই ব্যবহার করুন । কিছু কিছু ক্ষেত্রে (বিরল) ক্ষেত্রে প্যাচ ম্যানুয়াল পরে খালি ফাইলগুলি অপসারণের জন্য কমান্ডের -Eবিকল্প patchপ্রয়োজন:if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
জিম্মিজ

আমি দৌড়ে diff -Naru dir/file dir/file.new > diff.patchপেয়ে can't find file to patch at input line 3সঙ্গে patch -p0 --dry-run < diff.patchপ্যাচ প্রথম লাইন লেখা --- dir/fileদ্বিতীয় +++ dir/file.newটাইমস্ট্যাম্প সঙ্গে, পরিবর্তন শুধু সঠিক মনে করা হয় সেখানে কিভাবে জন্য সঠিক ফাইলের নামের কমান্ড সৌন্দর্য প্রতিবেদন অপসন আছে?
ptica

0

আপনি যদি কিছু স্থিতিশীল সংস্করণের সাথে সর্বশেষ গিট চেকিনের তুলনা করতে চান, তবে সরাসরি যান git diff the-stable-version( কোনও ট্যাগটি কী বর্ণনা করে তা সম্ভবত খুঁজে বের করতে হবে, সম্ভবত সঠিক সংস্করণ নম্বর বা কিছু বৈকল্পিক)। gitপ্রকল্পের পুরো ইতিহাস রাখে (সাধারণত, কেবলমাত্র একটি অংশ দখল করার উপায় রয়েছে)। the-stable-versionকিছু আলাদা উন্নয়ন শাখায় থাকলে তা বিবেচনাধীন নয় (অর্থাত্ উন্নয়নটি বন্ধ হয়ে গেছে এবং স্থিতিশীল শাখাটি শেষ মুহুর্তের কিছু স্থির হয়েছে)।

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