গিট সংগ্রহস্থল থেকে প্যাচ বা ডিফ ফাইল তৈরি করুন এবং এটি অন্য একটি পৃথক গিট সংগ্রহস্থলে প্রয়োগ করুন


155

আমি ওয়ার্ডপ্রেস ভিত্তিক প্রকল্পে কাজ করি এবং আমি ডাব্লুপিপির প্রতিটি নতুন প্রকাশ সংস্করণে আমার প্রকল্পটি প্যাচ করতে চাই। এর জন্য, আমি দুটি কমিট বা ট্যাগের মধ্যে একটি প্যাচ তৈরি করতে চাই।

উদাহরণস্বরূপ, আমার রেপোতে /www/WPআমি এটি করি:

$git patch-format com1..com2 --stdout > ~/patchs/mypatch.patch

অথবা

$git patch-format tag1..tag2 --stdout > ~/patchs/mypatch.patch

/www/WP গিট নাটিফ ওয়ার্ডপ্রেস

/www/myproject আমার গিট প্রকল্প ওয়ার্ডপ্রেস ভিত্তিক

git applyকমান্ড লাইন কাজ করে না, আমি মনে করি, কারণ আমরা বিভিন্ন ভান্ডার রয়েছে।

আমি কি কোনও প্রতিশ্রুতি ছাড়াই কোনও প্যাচ ফাইল তৈরি করতে পারি, কেবলমাত্র একটি ডিফারেনশিয়াল এবং এটিকে অন্য গিটের ভাণ্ডারে প্রয়োগ করতে পারি?

আগাম ধন্যবাদ.

উত্তর:


243

আপনি কেবল এর জন্য উপযুক্ত git diffএকটি ইউনিফাইড ডিফ উত্পাদন করতে ব্যবহার করতে পারেন git apply:

git diff tag1..tag2 > mypatch.patch

তারপরে আপনি এর ফলে ফলাফলটি প্যাচ প্রয়োগ করতে পারেন:

git apply mypatch.patch

1
আপনাকে ধন্যবাদ এনরিকো, আমি ব্যবহার করেছি $git diff -u tag1..tag2 > mypatch.patchএবং $git apply --stat > mypatch.patchউত্তরটি 0 files changedঅন্য কোনও পরামর্শ দয়া করে? :)
zatamine

আর্গুমেন্ট হিসাবে আপনাকে প্যাচ ফাইলে যাওয়ার পথটি নির্দিষ্ট করতে হবে git apply। আমি একটি উদাহরণ সহ আমার উত্তর আপডেট।
এনরিকো ক্যাম্পিডোগ্লিও

1
আমি git diff -p tag1 tag2 > my.patchযা ভাল কাজ করেছি।
বার্কলে

আমি কীভাবে ইউনিফাইড ডিফার্ট ফর্ম্যাটে প্যাচগুলি তৈরি করব? sourceware.org/glibc/wiki/... বলেছেন Only unified diff (-uNr) format is acceptable.কিন্তু যখন আমি চেষ্টা git diff -uNr tag1..tag2 > mypatch.patchআমি বার্তা পেতেusage: git diff [<options>] [<commit> [<commit>]] [--] [<path>...]
হারুন Franke

2
সতর্কতা অবলম্বন করা আবশ্যক git diff ...+ + git apply ...পরিচালনা মোছা / সরানো ফাইল সঠিকভাবে ... কখন git format-patch ...+ + git am ...না।
vrince

50

কয়েকটি কমিটের জন্য প্যাচ তৈরি করতে আপনার format-patchগিট কমান্ড ব্যবহার করা উচিত , যেমন

git format-patch -k --stdout R1..R2

এটি আপনার কমিটগুলি মেলবক্স ফর্ম্যাটে প্যাচ ফাইলে রফতানি করবে।

শেষ কমিটের জন্য প্যাচ তৈরি করতে, চালান:

git format-patch -k --stdout HEAD^

তারপরে অন্য সংগ্রহস্থলে amগিট কমান্ড দ্বারা প্যাচ প্রয়োগ করুন , যেমন eg

git am -3 -k file.patch

দেখুন: man git-format-patchএবং git-am


1
একটি প্যাচ যা প্রয়োগ করা যেতে পারে তার সম্পর্কে কী patch -p1? সোর্সওয়্যার.আর.জি.জিগ্লিবসি
অ্যারন ফ্র্যাঙ্ক

লিনাক্স থেকে winodws প্যাচ চলন্ত করা হয়েছে, তাই --ignore-সাদা ব্যবধান ব্যবহার ছিল এখানে হিসাবে উল্লেখ করেছে stackoverflow.com/questions/13190679/...
মহেশ

2
অ্যারোনফ্র্যাঙ্ক, আপনি '-p' বিকল্পটি ব্যবহার করতে পারেন: গিট ফর্ম্যাট-প্যাচ
-পি

লক্ষণীয় বিষয়, এর প্রতিশ্রুতি বার্তা, লেখক এবং মূল কমিটের তারিখগুলি রাখার সুবিধা রয়েছে।
এম জাস্টিন

0

পরিপূরক হিসাবে, শুধুমাত্র একটি নির্দিষ্ট কমিটের জন্য প্যাচ তৈরি করতে, ব্যবহার করুন:

git format-patch -1 <sha>

প্যাচ ফাইলটি উত্পন্ন হওয়ার পরে, আপনার অন্যান্য রেপো জানেন যে আপনি কখন এটি ব্যবহার করবেন git am ${patch-name}

প্যাচ যুক্ত করার আগে, git apply --check ${patch-name}নিশ্চিত করুন যে কোনও সঙ্কট নেই।

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