গিট: প্যাচ প্রয়োগ হয় না


288

আমার_পিসি_ব্রঞ্চ.প্যাচ নামে একটি নির্দিষ্ট প্যাচ রয়েছে।

আমি যখন এটি প্রয়োগ করার চেষ্টা করি তখন আমি নিম্নলিখিত বার্তাটি পাই:

$ git apply --check my_pcc_branch.patch
warning: src/main/java/.../AbstractedPanel.java has type 100644, expected 100755
error: patch failed: src/main/java/.../AbstractedPanel.java:13
error: src/main/java/.../AbstractedPanel.java: patch does not apply

এর মানে কী?

আমি কিভাবে এই সমস্যা ঠিক করতে পারবো?


আশেপাশে কোনও অ্যাবস্ট্রাক্টপ্যানেল.জভা.রেজ ফাইল রয়েছে? সাধারণ এর অর্থ হ'ল উত্সের পাশাপাশি প্যাচে একটি লাইন বট পরিবর্তিত হয়েছে (এখানে 13 লাইনটি প্রভাবিত বলে মনে হচ্ছে)।
রুদি

না, আমি কোনও * .rej ফাইল খুঁজে পাইনি।
দিমিত্রি পিসারেঙ্কো

নিশ্চিত নয় কেন গৃহীত উত্তরটি এটি ঠিক করে দেবে (সুতরাং আমি সন্দেহ করি এটি একটি লাল রঙের উত্তোলক) তবে has type 100644, expected 100755কোথাও কোথাও কোনও chmod অনুমতি মিলছে না তা বোঝায় না ?
ruffin

উত্তর:


322

git apply --reject --whitespace=fix mychanges.patch আমার জন্য কাজ।

ব্যাখ্যা

--rejectবিকল্প Git নির্দেশ দেওয়া হবে ব্যর্থ না যদি এটা নির্ধারণ করতে পারেন না কিভাবে প্যাচ প্রয়োগ করতে, কিন্তু এর পরিবর্তে indivdual কৃপণ ব্যক্তি এটি প্রয়োগ এবং ফাইল (প্রত্যাখ্যান তৈরি করতে পারেন আবেদন করতে .rej) কৃপণ ব্যক্তি এটা প্রযোজ্য নয় করতে পারেন। উইগল "প্রত্যাখ্যানিত প্যাচগুলি প্রয়োগ করতে এবং শব্দ ভিত্তিক পারফরম্যান্স সম্পাদন করতে পারে"।

উপরন্তু, --whitespace=fix হোয়াইটস্পেস ত্রুটি সম্পর্কে সতর্ক করবে এবং অন্যথায় প্রযোজ্য কূট প্রয়োগ করতে অস্বীকার করার পরিবর্তে সেগুলি ঠিক করার চেষ্টা করবে।

উভয় বিকল্পগুলি একত্রে প্যাচ প্রয়োগকে ব্যর্থতার বিরুদ্ধে আরও শক্তিশালী করে তোলে, তবে ফলাফলের প্রতি তাদের আরও মনোযোগ প্রয়োজন।

পুরো ডকুমেন্টেশনের জন্য https://git-scm.com/docs/git-apply দেখুন


8
এটি আসলে আমার পক্ষে আরও ভাল কাজ করেছে কারণ এটি আমার ফাইলে সম্পূর্ণরূপে সংশোধন করেনি
ওয়েইন ওয়ার্নার

9
এটা অসাধারণ. কেবল এটি যা নিজেকে সমাধান করতে পারে না তা প্রত্যাখ্যান করে এবং আপনি কেবলমাত্র প্রত্যাখ্যাত ফাইলগুলিকে ম্যানুয়ালি সংশোধন করতে পারেন।
ডেনিস

1
প্যাচ -p1 <mychanges.patch # শঙ্ক দ্বারা পরিবর্তনগুলি প্রয়োগ করে। যদি পরিবর্তনগুলি ব্যর্থ হয় তবে একটি <সোর্স ফাইল> .অরিগ এবং <সোসোফিল> .রেজ প্যাচ তৈরি হয় এবং আপনি নিজে নিজে পরিবর্তনগুলি প্রয়োগ করতে পারেন। আমি অনুমান করছি গিট প্রয়োগ --reject একই কাজ করে এবং - হোয়াইটস্পেস = ফিক্স ম্যাজিকালি আরও ভাল।
গায়েথ

7
.rejকীভাবে কোনও প্যাচ প্রয়োগ করতে হবে তা স্বয়ংক্রিয়ভাবে সনাক্ত করতে না পারলে এই আদেশটি ফাইলগুলি তৈরি করে। আপনি এই জাতীয় সমস্যাগুলি সমাধান করতে উইগল ব্যবহার করতে পারেন ।
গুডনিসইয়েব

14
এই উত্তরটি কোনও ব্যাখ্যা দেয় না, বিশেষত কোন ক্ষেত্রে এটি কাজ করবে। লোকেরা, আপনাকে অবশ্যই উত্তরের মানের চেয়ে বেশি দাবি করতে হবে, এটি কোনও ফোরাম নয়।
অলিভার

318

Msysgit@googlegroups.com মেলিং তালিকা থেকে জোহানেস সিক্স্ট নিম্নলিখিত কমান্ড লাইন আর্গুমেন্টগুলি ব্যবহার করার পরামর্শ দিয়েছে:

git apply --ignore-space-change --ignore-whitespace mychanges.patch

এটি আমার সমস্যার সমাধান করেছে।


25
কেউ আমাকে সহায়তা করতে এবং ব্যাখ্যা করতে পারে যে এটি কেন কাজ করে? অন্য উত্তরটি আমার পক্ষে কাজ করে নি, এবং প্রশ্নকর্তা যা বর্ণনা করেন ঠিক তেমনই আমার সমস্যা ছিল। সাদা স্পেস উপেক্ষা করার সাথে ফাইলের বৈশিষ্ট্যগুলির কী কী আছে?
skrebbel

1
উইন্ডোজ পাওয়ারশেল ব্যবহার করে গিট ডিফ দিয়ে তৈরি একটি প্যাচ সফলভাবে প্রয়োগ করা হয়েছিল: গিট ডিফ হেড..6১fee হাফ - মাইফাইল.এক্সএমএল | গিট প্রয়োগ করুন --ignore-space-change --ignore-সাদা স্থান, যেখানে প্রথমে ফাইল হিসাবে পৃথক আউটপুট সংরক্ষণ করা কাজ করে না, যদি কেউ একই সমস্যায় চলে যায়
tjb

2
-C1প্রয়োগের জন্য স্যুইচ করার চেষ্টাও করুন , এটি সংযোজনগুলির আশেপাশের প্রসঙ্গকে হ্রাস করে যা গুরুত্বপূর্ণ হিসাবে বিবেচিত হয়।
আমির আলী আকবরী

2
@ এরিকওয়াকার, সিআর / এলএফ দিয়ে গিট ম্যাজিক অগত্যা কোনও খারাপ জিনিস নয়। বিকল্পটি হতে পারে যে আপনার অর্ধেক চেঞ্জসেটের প্রতিটি ফাইলের প্রতিটি লাইন থাকে যা স্পর্শ করা হয়েছিল এক লাইন থেকে অন্য প্রান্তে পরিবর্তিত হয়ে, আসল পরিবর্তনটি মাঝখানে কোথাও কবর দেওয়া হয়েছে।
jwg

3
এটি মাঝে মাঝে সহায়তা করে। তবে অন্যান্য সময়, আমি এখনও প্যাচটি সমস্যা ছাড়াই প্যাচ প্রয়োগ করা উচিত হওয়া সত্ত্বেও "প্যাচ প্রয়োগ হয় না" get
টমাস লেভেস্ক

118

যখন সব অন্য ব্যর্থ হয়, চেষ্টা git apply'র --3wayবিকল্প

git apply --3way patchFile.patch

--3way
যখন প্যাচটি পরিষ্কারভাবে প্রয়োগ হয় না, তখন প্যাচটি ব্লবগুলির যে পরিচয় প্রয়োগ করা হবে তার পরিচয় রেকর্ড করে, এবং 3 টি উপায় সংযুক্তির পিছনে পিছনে পড়ুন, এবং সম্ভবত আমাদের মধ্যে এই ব্লবগুলি স্থানীয়ভাবে উপলব্ধ রয়েছে, সম্ভবত ফাইলগুলিতে দ্বন্দ্ব চিহ্নিতকারীদের রেখে যায় ব্যবহারকারীকে সমাধান করার জন্য কার্যকারী গাছ। এই বিকল্পটি --index বিকল্পটি বোঝায় এবং --reject এবং --cched বিকল্পগুলির সাথে সঙ্গতিপূর্ণ নয়।

টিপিকাল ব্যর্থ কেস যতটা প্যাচ করতে পারে ততটুকু প্রয়োগ করে এবং গিমে কাজ করার জন্য আপনাকে দ্বন্দ্বের সাথে ছেড়ে দেয় তবে আপনি সাধারণত এটি করেন। সম্ভবত rejectবিকল্পের চেয়ে একধাপ সহজ ।


2
এই উত্তরটি আমার পক্ষে কাজ করেছিল। আমি যে ফাইলটি প্যাচ করছি সেটিতে প্যাচটি আমি যে পরিবর্তনগুলি করেছি তা প্রতিফলিত হয়নি (কারণ আমি প্যাচ তৈরির পরে পরিবর্তনগুলি
ক্রিশ্চিয়া

3
চমৎকার সাধারণ সমাধান। 3 ওয়ে ডিফের মতো দেখে মনে হচ্ছে না এটি সাধারণত কিছুটা বিভ্রান্ত হয় তবে এর চেয়ে কমই আমাকে দ্বন্দ্ব সমাধানের এবং প্যাচটি প্রয়োগ করার ক্ষমতা দেয় না।
স্টিইনিবট

8
আমি মনে করি --3wayএটি ডিফল্ট আচরণ হওয়া উচিত। যখন প্যাচিং ব্যর্থ হয়, কমপক্ষে আমাকে কী ব্যর্থ তা বলুন যাতে আমি ম্যানুয়ালি এটি ঠিক করতে পারি। git applyকেবল ব্যর্থ হয় এবং কেন কিছু ব্যর্থ হয় তা রিপোর্ট করে না। এমনকি উত্পন্ন উত্সযুক্ত *.rejফাইলগুলিও আমি খুঁজে পেলাম না hg
পবন মঞ্জুনাথ

4
অবশ্যই, সেরা সমাধান। ব্যবহারকারীকে তার নিজস্ব বিরোধগুলি সমাধান করতে দিন!
মোশ ফেউ

ধন্যবাদ, এই সমাধানটি আমার সমস্যার সমাধান করেছে।
p.daniel

55

এই কমান্ডটি খারাপ ফাইলগুলিকে রেখে সমাধান না করে প্যাচটি প্রয়োগ করবে *.rej:

git apply --reject --whitespace=fix mypath.patch

আপনি কেবল তাদের সমাধান করতে হবে। একবার সমাধান চালানো:

git -am resolved

7
কীভাবে সমাধান করবেন *.rej- উত্স ফাইলে ম্যানুয়ালি পরিবর্তনগুলি করা এবং এই .rejফাইলগুলি মুছতে পারা যায় can অন্য কোন উপায় ?
কোডিং_আইডিওট

1
@ কোডিং_ইডিয়ট যথারীতি, কেবল .rej ফাইলগুলি পরীক্ষা করুন, তাদের সাথে দ্বন্দ্বপূর্ণ ফাইলগুলির সাথে তুলনা করুন এবং শেষ পর্যন্ত নির্দিষ্ট ফাইলগুলি সূচীতে যুক্ত করুন ("গিট অ্যাড ফিক্সED_FILES" সহ)
ইভান

2
@coding_idiot আপনি ব্যবহার করতে পারে আন্দোলিত তা সমাধান করার। উদাহরণস্বরূপ: wiggle --replace path/to/file path/to/file.rej। এই কমান্ডটি .rejফাইল থেকে আসল ফাইলটিতে পরিবর্তনগুলি প্রয়োগ করবে । এছাড়াও এটি মূল ফাইলের একটি অনুলিপি তৈরি করে path/to/file.porig। দয়া করে
উইগল সম্পর্কিত

22

এখানে প্রস্তাবিত সমাধানটি ব্যবহার করার চেষ্টা করুন: https://www.drupal.org/node/1129120

patch -p1 < example.patch

এটি আমাকে সাহায্য করেছিল।


3
আমি জানি আপনি এটি করার কথা না, তবে আপনাকে অনেক ধন্যবাদ! আমার ঘন্টা বাঁচিয়েছে আমি পেয়েছিলাম "প্যাচ প্রয়োগ হয় না" এবং সমস্ত ধরণের ত্রুটি।
sudo rm -rf স্ল্যাশ

@ সুডর্ম-আরফস্ল্যাশ, কেন আমাদের এটি করার কথা নেই এবং তবুও আপনি এটি কেন করছেন?
কালো

git: 'patch' is not a git command.অনgit version 2.21.1 (Apple Git-122.3)
শ্রীধর সারনোবাত

16

আপনি যখন ইউনিক্স এবং উইন্ডোজ গিট ক্লায়েন্টগুলি মিশ্রিত করেন এটি ঘটে কারণ উইন্ডোজ সত্যই "এক্স" বিটের ধারণাটি রাখে না তাই rw-r--r--উইন্ডোজের অধীনে আপনার একটি (0644) ফাইলের চেকআউটটি এমএসএস পসিক্স স্তর দ্বারা "প্রচারিত" হবে rwx-r-xr-x(0755) । গিট এই মোড পার্থক্যটিকে মূলত ফাইলে একটি পাঠ্যগত পার্থক্যের হিসাবে বিবেচনা করে, তাই আপনার প্যাচটি সরাসরি প্রয়োগ হয় না। আমি মনে করি এখানে আপনার একমাত্র ভাল বিকল্পটি সেট core.filemodeকরা false(ব্যবহার করে)git-config ) ।

কিছু সম্পর্কিত তথ্য সহ এখানে একটি এমএসজিগিত সমস্যা রয়েছে: http://code.google.com/p/msysgit/issues/detail?id=164 ( সংরক্ষণাগার ..org এর 3 ডিসেম্বর 2013 অনুলিপিটিতে পুনরায় প্রকাশিত হয়েছে)


2
আমি "গিট কনফিগারেশন কোর.ফিলমোড মিথ্যা" কমান্ডটি চালানোর চেষ্টা করেছি, তবে তাতে কোন লাভ হয়নি - আমি এখনও একই বার্তা পাচ্ছি।
দিমিত্রি পিসারেনকো

ধরে নেওয়া আপনার গাছে আপনার কোনও অ-প্রতিশ্রুতিবদ্ধ পরিবর্তন নেই, git reset --hard HEADনতুন বিকল্প কার্যকর হওয়ার সাথে সাথে আপনার ফাইলগুলি পুনরায় চেকআউট করার জন্য গিটকে জোর করার চেষ্টা করুন ।
বেন জ্যাকসন

"গিট রিসেট --হার্ড হেড" চালানোর চেষ্টা করলাম। এটি সফল হয়েছিল (আমি "হেড এখন উপস্থিত ..." বার্তাটি দেখেছি) তবে "গিট প্রয়োগ" সমস্যাটি এখনও থেকেই যায়।
দিমিত্রি পিসারেনকো

7

আমার ক্ষেত্রে আমি প্যাচ ফাইলটি ভুল জায়গায় প্রথম জায়গায় তৈরি করতে যথেষ্ট বোকা ছিলাম, আসলে ভুল উপায়ে আলাদা করেছিলাম । আমি ঠিক একই ত্রুটি বার্তাগুলি দিয়ে শেষ করেছি।

আপনি যদি মাস্টার হন এবং করেন git diff branch-name > branch-name.patch, এটি আপনার হতে চান এমন সমস্ত সংযোজন মুছে ফেলার চেষ্টা করে এবং বিপরীতভাবে (যা গিটারের পক্ষে অর্জন করা অসম্ভব ছিল, সম্ভবত, কখনও করা সংযোজনগুলি অপসারণ করা যায় না)।

সুতরাং নিশ্চিত হয়ে নিন যে আপনি আপনার শাখায় চেকআউট করেছেন এবং কার্যকর করেছেন git diff master > branch-name.patch


3

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

আমি এই লিঙ্কটি খুঁজে পেয়েছি

কেন এটি কাজ করে সে সম্পর্কে আমার কোনও ধারণা নেই তবে আমি প্রায় অনেক কাজ চেষ্টা করেছিলাম এবং এটিই আমার পক্ষে কাজ করেছে। সংক্ষেপে, নীচের তিনটি কমান্ড চালান:

git fsck --full
git reflog expire --expire=now --all
git gc --prune=now

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

0

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


0

আমার সমস্যাটি হ'ল আমি দৌড়ে এসেছি git diff, তখন দৌড়ে git reset --hard HEADএসেছি, তখন বুঝতে পেরেছিলাম যে আমি পূর্বাবস্থায় ফিরে যেতে চাইছি, তাই আমি আউটপুটটিকে git diffকোনও ফাইলে অনুলিপি করে এবং ব্যবহার করার চেষ্টা করেছি git apply, তবে আমার একটি ত্রুটি হয়েছিল যে "প্যাচ প্রয়োগ হয় না"। patchএটিকে স্যুইচ করে এবং এটি ব্যবহারের চেষ্টা করার পরে , আমি বুঝতে পেরেছিলাম যে ডিফের কিছু অংশ কোনও কারণে পুনরাবৃত্তি হয়েছিল, এবং সদৃশটি সরিয়ে দেওয়ার পরে , patch(এবং সম্ভবত এটিও git apply) কাজ করেছিল।

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