আমি কীভাবে গিটে সংযুক্তির বিরোধগুলি সমাধান করব?
git
ইনস্টলেশন সহ বাক্স থেকেও কাজ করে না । আমার জন্য আজ, ২০১৩, এসই সূচনা পৃষ্ঠায় হিট করার জন্য পরিচালিত, ১.৩ মিটার ভিউ এবং হাজার হাজার ভোট উভয় উপায়ে। আকর্ষনীয়।
আমি কীভাবে গিটে সংযুক্তির বিরোধগুলি সমাধান করব?
git
ইনস্টলেশন সহ বাক্স থেকেও কাজ করে না । আমার জন্য আজ, ২০১৩, এসই সূচনা পৃষ্ঠায় হিট করার জন্য পরিচালিত, ১.৩ মিটার ভিউ এবং হাজার হাজার ভোট উভয় উপায়ে। আকর্ষনীয়।
উত্তর:
চেষ্টা করুন: git mergetool
এটি একটি জিইউআই খোলে যা প্রতিটি দ্বন্দ্বের মধ্য দিয়ে আপনাকে পদক্ষেপ দেয় এবং আপনি কীভাবে একত্রী করতে পারবেন তা চয়ন করতে পারেন। কখনও কখনও এটির জন্য পরে কিছুটা হাত সম্পাদনার প্রয়োজন হয় তবে সাধারণত এটি নিজেরাই যথেষ্ট। এটি অবশ্যই হাত দিয়ে পুরো কাজটি করার চেয়ে অনেক ভাল।
@ জোশগ্লোভার মন্তব্য অনুসারে:
আদেশ
আপনি একটি ইনস্টল না করে অগত্যা একটি জিইউআই খোলেন না।
git mergetool
আমার জন্য দৌড়ানোর ফলেvimdiff
ব্যবহার হয়েছে। পরিবর্তে আপনি এটি ব্যবহার করতে নিম্নলিখিত সরঞ্জামগুলির মধ্যে একটি ইনস্টল করতে পারেন:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
।
vimdiff
মার্জ সংঘাতগুলি সমাধানের জন্য নীচের নমুনা পদ্ধতিটি ব্যবহার করা হবে। এই লিঙ্কের উপর ভিত্তি করে
পদক্ষেপ 1 : আপনার টার্মিনালে নিম্নলিখিত কমান্ডগুলি চালান
git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false
এটি ডিফল্ট একীকরণ সরঞ্জাম হিসাবে ভিমডিফ সেট করবে।
পদক্ষেপ 2 : টার্মিনালে নিম্নলিখিত কমান্ড চালান
git mergetool
পদক্ষেপ 3 : আপনি নিম্নলিখিত বিন্যাসে একটি vimdiff প্রদর্শন দেখতে পাবেন
╔═══════╦══════╦════════╗
║ ║ ║ ║
║ LOCAL ║ BASE ║ REMOTE ║
║ ║ ║ ║
╠═══════╩══════╩════════╣
║ ║
║ MERGED ║
║ ║
╚═══════════════════════╝
এই 4 ভিউ হয়
স্থানীয় - এটি বর্তমান শাখা থেকে ফাইল
বেস - সাধারণ পূর্বপুরুষ, ফাইল উভয় পরিবর্তনের আগে কীভাবে দেখেছে
রিমোট করুন - ফাইলটি আপনি নিজের শাখায় মার্জ করছেন
মার্জড - মার্জ ফলাফল, এটি যা রেপোতে সংরক্ষিত হয়
আপনি ctrl+ ব্যবহার করে এই দর্শনগুলির মধ্যে নেভিগেট করতে পারেন w। আপনি ctrl+ wঅনুসরণ করে সরাসরি মার্জড ভিউতে পৌঁছাতে পারেন j।
এখানে এবং এখানে ভিমডিফ নেভিগেশন সম্পর্কে আরও তথ্য
পদক্ষেপ 4 । আপনি নিম্নলিখিতভাবে মার্জড ভিউটি সম্পাদনা করতে পারেন
আপনি যদি REMOTE থেকে পরিবর্তন পেতে চান
:diffg RE
আপনি যদি বেস থেকে পরিবর্তন পেতে চান
:diffg BA
আপনি যদি স্থানীয় থেকে পরিবর্তন পেতে চান
:diffg LO
পদক্ষেপ 5 । সংরক্ষণ করুন, প্রস্থান করুন, প্রতিশ্রুতিবদ্ধ এবং পরিষ্কার
:wqa
vi থেকে সংরক্ষণ করুন এবং প্রস্থান করুন
git commit -m "message"
git clean
ডিফ সরঞ্জাম দিয়ে তৈরি অতিরিক্ত ফাইল (যেমন * .orig) সরান।
git mergetool -y
একবারে প্রচুর ফাইল মার্জ করলে কয়েকটি কীস্ট্রোক সংরক্ষণ করতে আপনি ব্যবহার করতে পারেন ।
git mergetool
আমার জন্য দৌড়ানোর ফলে vimdiff
ব্যবহার হয়েছে। পরিবর্তে আপনি এটি ব্যবহার করতে নিম্নলিখিত সরঞ্জামগুলির মধ্যে একটি ইনস্টল করতে পারেন: meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse ecmerge p4merge araxis vimdiff emerge
।
git mergetool -t bc3
)।
উপরে থেকে এখানে একটি সম্ভাব্য ব্যবহারের কেস:
আপনি কিছু পরিবর্তন আনতে যাচ্ছেন, তবে ওফ, আপনি আপ টু ডেট নন:
git fetch origin
git pull origin master
From ssh://gitosis@example.com:22/projectname
* branch master -> FETCH_HEAD
Updating a030c3a..ee25213
error: Entry 'filename.c' not uptodate. Cannot merge.
সুতরাং আপনি আপ-টু-ডেট হন এবং আবার চেষ্টা করুন তবে আপনার বিরোধ রয়েছে:
git add filename.c
git commit -m "made some wild and crazy changes"
git pull origin master
From ssh://gitosis@example.com:22/projectname
* branch master -> FETCH_HEAD
Auto-merging filename.c
CONFLICT (content): Merge conflict in filename.c
Automatic merge failed; fix conflicts and then commit the result.
সুতরাং আপনি পরিবর্তনগুলি একবার দেখে নেওয়ার সিদ্ধান্ত নিয়েছেন:
git mergetool
ওহ আমার, ওহ আমার, উজানে কিছু জিনিস বদলেছে, তবে কেবল আমার পরিবর্তনগুলি ব্যবহার করতে ... না ... তাদের পরিবর্তনগুলি ...
git checkout --ours filename.c
git checkout --theirs filename.c
git add filename.c
git commit -m "using theirs"
এবং তারপরে আমরা একটি চূড়ান্ত সময় চেষ্টা করি
git pull origin master
From ssh://gitosis@example.com:22/projectname
* branch master -> FETCH_HEAD
Already up-to-date.
Ta-দা!
git merge --help
this question
আমি সংশ্লেষ সরঞ্জামগুলি দ্বিধা বা সমাধান বুঝতে খুব কমই সহায়তা করে। আমি সাধারণত কোনও পাঠ্য সম্পাদকের দ্বন্দ্ব চিহ্নিতকারীগুলিকে এবং সাপ্লিমেন্ট হিসাবে গিট লগ ব্যবহার করে আরও সফল।
এখানে কয়েকটি টিপস দেওয়া হল:
আমি খুঁজে পেয়েছি সবচেয়ে ভাল জিনিসটি হল "ডিফফ 3" মার্জ সংঘাতের স্টাইলটি ব্যবহার করা:
git config merge.conflictstyle diff3
এটি এই জাতীয় মতবিরোধ চিহ্নিত করে:
<<<<<<<
Changes made on the branch that is being merged into. In most cases,
this is the branch that I have currently checked out (i.e. HEAD).
|||||||
The common ancestor version.
=======
Changes made on the branch that is being merged in. This is often a
feature/topic branch.
>>>>>>>
মধ্যভাগটি হ'ল সাধারণ পূর্বপুরুষের মতো দেখতে। এটি দরকারী কারণ আপনি প্রতিটি শাখায় কী পরিবর্তন হয়েছে সে সম্পর্কে আরও ভাল ধারণা পেতে আপনি এটি শীর্ষ এবং নীচের সংস্করণগুলির সাথে তুলনা করতে পারেন, যা প্রতিটি পরিবর্তনের উদ্দেশ্য কী ছিল তার জন্য আপনাকে একটি ভাল ধারণা দেয়।
যদি দ্বন্দ্বটি কয়েকটি লাইন হয় তবে এটি সাধারণত সংঘাতকে খুব সুস্পষ্ট করে তোলে। (কোনও বিরোধের সমাধান কীভাবে করা যায় তা জানা খুব আলাদা; অন্য লোকেরা কী কাজ করছে সে সম্পর্কে আপনার সচেতন হওয়া দরকার you're আপনি যদি বিভ্রান্ত হন তবে সম্ভবত সেই ব্যক্তিকে আপনার ঘরে ডেকে আনা ভাল so যাতে আপনি কী দেখছেন তা তারা দেখতে পারে এ।)
যদি বিরোধ দীর্ঘায়িত হয়, তবে আমি তিনটি বিভাগের প্রত্যেককে "খনি", "সাধারণ" এবং "তাদের" এর মতো তিনটি পৃথক পৃথক ফাইলে কাটাতে এবং পেস্ট করব।
তারপরে দ্বন্দ্বের কারণ হিসাবে চিহ্নিত হওয়া দুটি পৃথক কুকুরগুলি দেখতে আমি নীচের কমান্ডগুলি পরিচালনা করতে পারি:
diff common mine
diff common theirs
এটি মার্জ সরঞ্জামটি ব্যবহার করার মতো নয়, যেহেতু মার্জ সরঞ্জামটিতে সমস্ত বিবাদহীন ডিফ হুক্সকেও অন্তর্ভুক্ত করা হবে। আমি বিভ্রান্তিকর হতে পারে।
কেউ ইতিমধ্যে এটি উল্লেখ করেছেন, তবে দ্বন্দ্ব কোথা থেকে এসেছে এবং কীভাবে এটি পরিচালনা করতে হবে তা বোঝার জন্য প্রতিটি ভিন্নতার পিছনে উদ্দেশ্যটি বোঝা খুব কার্যকর।
git log --merge -p <name of file>
এটি আপনার পূর্ববর্তী পূর্বপুরুষ এবং যে দুটি মাথা আপনি মার্জ করছেন তার মধ্যে সেই ফাইলটিকে স্পর্শ করে এমন সমস্ত কমিট দেখায়। (সুতরাং এটি মার্জ হওয়ার আগে উভয় শাখায় ইতিমধ্যে বিদ্যমান অঙ্গীকারগুলি অন্তর্ভুক্ত করে না)) এটি আপনাকে বিভিন্ন দ্বিধাগুলি উপেক্ষা করতে সহায়তা করে যা স্পষ্টভাবে আপনার বর্তমান বিরোধের কারণ নয়।
স্বয়ংক্রিয় সরঞ্জামের সাহায্যে আপনার পরিবর্তনগুলি যাচাই করুন।
আপনার যদি স্বয়ংক্রিয় পরীক্ষা থাকে তবে সেগুলি চালান। যদি আপনার কাছে লিন্ট থাকে , যে চালানো। যদি এটি কোনও বিল্টেবল প্রজেক্ট হয় তবে আপনার প্রতিশ্রুতি দেওয়ার আগে এটি তৈরি করুন ইত্যাদি etc. সব ক্ষেত্রেই আপনার পরিবর্তনগুলি কোনও কিছু ভঙ্গ করে না তা নিশ্চিত করার জন্য আপনাকে কিছুটা পরীক্ষা করা দরকার। (মুরগি, এমনকি সংঘাত বিহীন একীকরণের ফলে কার্যকরী কোডটি ভেঙে যায়))
এগিয়ে পরিকল্পনা; সহকর্মীদের সাথে যোগাযোগ করুন।
সামনের পরিকল্পনা করা এবং অন্যেরা কী নিয়ে কাজ করছেন তা সম্পর্কে সচেতন হওয়া একীভূত সংঘাতগুলি রোধ করতে এবং / বা এর আগে সমাধান করতে সহায়তা করতে পারে - যখন বিশদটি এখনও মনে রাখা তাজা।
উদাহরণস্বরূপ, যদি আপনি জানেন যে আপনি এবং অন্য ব্যক্তি দু'জনই একই রিফ্যাক্টরিংয়ের কাজ করছেন যা উভয়ই একই ফাইলগুলির একই সেটকে প্রভাবিত করে, আপনার আগে সময়ের সাথে একে অপরের সাথে কথা বলা উচিত এবং আপনার প্রত্যেকে কী ধরণের পরিবর্তন হয় তা সম্পর্কে আরও ভাল ধারণা পাওয়া উচিত করে। আপনি যদি আপনার পরিকল্পিত পরিবর্তনগুলি সমান্তরাল না হয়ে ক্রমিকভাবে পরিচালনা করেন তবে আপনি যথেষ্ট সময় এবং প্রচেষ্টা বাঁচাতে পারেন।
কোডের বৃহত সোয়াথ জুড়ে কাটা বড় রিফ্যাক্টরিংগুলির জন্য, আপনাকে সিরিয়ালিভাবে কাজ করা বিবেচনা করা উচিত: প্রত্যেকে কোডের ওই অঞ্চলে কাজ করা বন্ধ করে দেয় যখন একজন ব্যক্তি সম্পূর্ণ রিফ্যাক্টরিং করে।
যদি আপনি ক্রমিকভাবে কাজ করতে না পারেন (সময়ের চাপের কারণে, সম্ভবত), তবে প্রত্যাশিত সংহত দ্বন্দ্বগুলির বিষয়ে কথা বলা কমপক্ষে আপনাকে সমস্যাগুলি দ্রুত সমাধানে সহায়তা করে যখন বিশদটি এখনও মনে হয় তাজা। উদাহরণস্বরূপ, যদি কোনও সহকর্মী এক সপ্তাহের সময়কালে একটি বিঘ্নিত ধারাবাহিক প্রতিশ্রুতিবদ্ধ করে থাকেন তবে আপনি সেই সহকর্মী শাখায় এই সপ্তাহে প্রতিদিন একবার বা দু'বার একীভূত / পুনর্বাসনের সিদ্ধান্ত নিতে পারেন। এইভাবে, যদি আপনি মার্জ / রিবেস দ্বন্দ্বগুলি খুঁজে পান তবে আপনি খুব বড় সমাধানে একসাথে সবকিছু একত্রীকরণের জন্য কয়েক সপ্তাহ অপেক্ষা করার চেয়ে আপনি এগুলি আরও দ্রুত সমাধান করতে পারেন।
আপনি যদি একীভূত হওয়ার বিষয়ে অনিশ্চিত হন তবে তা জোর করবেন না।
মার্জিং অপ্রতিরোধ্য অনুভব করতে পারে, বিশেষত যখন প্রচুর বিরোধী ফাইল থাকে এবং সংঘাতের চিহ্নিতকারীরা শত শত লাইনকে কভার করে। প্রায়শই সফ্টওয়্যার প্রকল্পের অনুমান করার সময় আমরা ওভারহেড আইটেমগুলিতে জাঁকজমকপূর্ণ মার্জ পরিচালনা করার মতো পর্যাপ্ত সময় অন্তর্ভুক্ত করি না, তাই প্রতিটি বিবাদ বিচ্ছিন্ন করার জন্য বেশ কয়েক ঘন্টা ব্যয় করা সত্যিকারের টানাটান বলে মনে হয়।
দীর্ঘমেয়াদে, এগিয়ে যাওয়ার পরিকল্পনা করা এবং অন্যেরা কী নিয়ে কাজ করছেন সে সম্পর্কে সচেতন হওয়াই মার্জ সংঘাতের প্রত্যাশার জন্য সেরা সরঞ্জাম এবং এগুলিকে কম সময়ে সঠিকভাবে সমাধান করার জন্য নিজেকে প্রস্তুত করুন।
p4merge
, যা ইনস্টল করে পারফফোর্সের অন্যান্য সরঞ্জামগুলি (যা আমি ব্যবহার করি নি, তবে অভিযোগ শুনেছি) থেকে আলাদাভাবে ব্যবহার করা যেতে পারে।
git config merge.conflictstyle diff3
- ধন্যবাদ জনাব. এটি আশ্চর্যজনক এবং ভাল 3 উপায় মার্জ জিইআইয়ের জন্য অনুসন্ধানের (এবং অর্থ প্রদানের) থেকে আমাকে মুক্তি দিয়েছে। আইএমও এই কারণে ভাল হিসাবে এটি সাধারণ পূর্বপুরুষ দেখায় যেমন স্থানীয় / দূরবর্তী উত্তম এবং গত কমিট লগ লাইন যা (আমি যতদূর জানি) কোন গুই করে দেখায়। কমিটগুলি অবশ্যই কোন কোডটি কোন শাখার সাথে সম্পর্কিত তা সনাক্ত করতে আপনাকে অবশ্যই সহায়তা করবে।
কোন ফাইলগুলির মধ্যে দ্বন্দ্ব রয়েছে তা সনাক্ত করুন (গিটটি আপনাকে এটি জানাতে হবে)।
প্রতিটি ফাইল খুলুন এবং বিভিন্নগুলি পরীক্ষা করুন; গিট তাদের নির্দিষ্ট করে দেয়। আশা করি প্রতিটি ব্লকের কোন সংস্করণটি রাখা উচিত তা স্পষ্ট হবে। কোডটি প্রতিশ্রুতিবদ্ধ এমন সহযোগী বিকাশকারীদের সাথে আপনার এটি আলোচনা করা দরকার।
একবার আপনি কোনও ফাইলে দ্বন্দ্ব সমাধান করেছেন git add the_file
।
একবার আপনি সমস্ত বিবাদগুলি সমাধান করে নিলে , git rebase --continue
বা সম্পন্ন করার পরে গিট যা করতে আদেশ করেছিল তা করুন বা করুন।
git add
ফাইলগুলি পর্যায়ক্রমে; এটি ভান্ডারে কিছু যুক্ত করে না । git commit
সংগ্রহস্থলগুলিতে জিনিস যুক্ত করে। এই ব্যবহারটি মার্জগুলির জন্য অর্থবোধ করে - মার্জটি স্বয়ংক্রিয়ভাবে একত্রিত হতে পারে এমন সমস্ত পরিবর্তনের স্বয়ংক্রিয়ভাবে পর্যায়ক্রমে; বাকী পরিবর্তনগুলিকে একীভূত করা এবং আপনার কাজ শেষ হয়ে গেলে সূচিতে এগুলি যুক্ত করা আপনার দায়িত্ব।
স্ট্যাক ওভারফ্লো প্রশ্নে উত্তরগুলি দেখুন গিটের সাথে একত্রীকরণ বাতিল করা , বিশেষত চার্লস বেলির উত্তর যা দেখায় যে কীভাবে সমস্যাগুলির সাথে ফাইলের বিভিন্ন সংস্করণটি দেখতে হবে, উদাহরণস্বরূপ,
# Common base version of the file.
git show :1:some_file.cpp
# 'Ours' version of the file.
git show :2:some_file.cpp
# 'Theirs' version of the file.
git show :3:some_file.cpp
একই সময়ে কোনও ফাইলে পরিবর্তন আনলে সংঘাতগুলি সংঘটিত হয়। এটি কীভাবে সমাধান করা যায় তা এখানে।
git
CLIআপনি দ্বন্দ্বপূর্ণ অবস্থায় পড়লে কী করবেন তা এখানে সরল পদক্ষেপ রয়েছে:
git status
( Unmerged paths
বিভাগের অধীনে )।নিম্নলিখিত ফাইলগুলির মধ্যে একটির মাধ্যমে প্রতিটি ফাইলের জন্য পৃথক বিবাদগুলি সমাধান করুন:
বিবাদগুলি সমাধান করতে জিইউআই ব্যবহার করুন: git mergetool
(সবচেয়ে সহজ উপায়)।
স্বীকার করতে দূরবর্তী / অন্যান্য সংস্করণ, ব্যবহার: git checkout --theirs path/file
। এটি সেই ফাইলের জন্য আপনি যে স্থানীয় পরিবর্তনগুলি করেছেন তা প্রত্যাখ্যান করবে।
স্থানীয় / আমাদের সংস্করণ গ্রহণ করতে, ব্যবহার করুন: git checkout --ours path/file
তবে আপনাকে সতর্ক হতে হবে, কারণ দূরবর্তী পরিবর্তনগুলি যে কারণে কোনও কারণে দ্বন্দ্ব হয়েছিল।
সম্পর্কিত: গিটের "আমাদের" এবং "তাদের" এর সঠিক অর্থ কী?
দ্বন্দ্বযুক্ত ফাইলগুলি ম্যানুয়ালি সম্পাদনা করুন এবং তারপরে <<<<<
/ >>>>>
নীচের থেকে সংস্করণটি বেছে নিন / তার মধ্যে কোড ব্লকের সন্ধান করুন =====
। দেখুন: বিবাদগুলি কীভাবে উপস্থাপন করা হয় ।
পাথ এবং ফাইলের নাম দ্বন্দ্বগুলি git add
/ দ্বারা সমাধান করা যেতে পারে git rm
।
অবশেষে, পর্যালোচনা ফাইলের জন্য ব্যবহার কমিট প্রস্তুত: git status
।
আপনি যদি এখনও অধীনে কোন ফাইল থাকে, তাহলে Unmerged paths
, এবং আপনি ম্যানুয়ালি দ্বন্দ্ব সমাধান হয়নি, তবে গীত জানি তুমি দ্বারা মীমাংসিত যাক: git add path/file
।
যদি সমস্ত বিবাদগুলি সফলভাবে সমাধান হয়ে যায় তবে এর দ্বারা পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ: git commit -a
এবং যথারীতি দূরবর্তী স্থানে চাপ দিন।
আরও দেখুন: গিটহাবের কমান্ড লাইন থেকে মার্জ সংঘাতের সমাধান করা
ব্যবহারিক টিউটোরিয়ালের জন্য, দেখুন: পরিস্থিতি 5 - কাটাকোদা দ্বারা সংশোধন মার্জ সংঘাতগুলি ।
আমি ডিফমার্জটি সফলভাবে ব্যবহার করেছি যা উইন্ডোজ, ম্যাকোস এবং লিনাক্স / ইউনিক্সে দৃশ্যমানভাবে তুলনা করতে এবং ফাইলগুলিকে একীভূত করতে পারে।
এটি গ্রাফিক্যভাবে 3 টি ফাইলের মধ্যে পরিবর্তনগুলি দেখাতে পারে এবং এটি স্বয়ংক্রিয়ভাবে মার্জিং (যখন এটি করা নিরাপদ থাকে) এবং ফলস্বরূপ ফাইলটি সম্পাদনা করার উপর সম্পূর্ণ নিয়ন্ত্রণকে অনুমতি দেয়।
চিত্র উত্স: ডিফফর্ম (লিনাক্সের স্ক্রিনশট)
কেবল এটি ডাউনলোড করুন এবং রেপো হিসাবে চালনা করুন:
git mergetool -t diffmerge .
ম্যাকোজে আপনি এর মাধ্যমে ইনস্টল করতে পারেন:
brew install caskroom/cask/brew-cask
brew cask install diffmerge
এবং সম্ভবত (যদি সরবরাহ না করা থাকে) আপনার নিম্নলিখিত রাস্তায় আপনার অতিরিক্ত পাঠানো দরকার (যেমন /usr/bin
):
#!/bin/sh
DIFFMERGE_PATH=/Applications/DiffMerge.app
DIFFMERGE_EXE=${DIFFMERGE_PATH}/Contents/MacOS/DiffMerge
exec ${DIFFMERGE_EXE} --nosplash "$@"
তারপরে আপনি নিম্নলিখিত কীবোর্ড শর্টকাটগুলি ব্যবহার করতে পারেন:
বিকল্পভাবে আপনি ওপেনডিফ (এক্সকোড সরঞ্জামগুলির অংশ) ব্যবহার করতে পারেন যা আপনাকে দুটি ফাইল বা ডিরেক্টরি একত্রিত করে তৃতীয় ফাইল বা ডিরেক্টরি তৈরি করতে দেয়।
যদি আপনি ঘন ঘন ছোট্ট কমিট করেন তবে তার সাথে কমিটের মন্তব্যগুলি দেখে শুরু করুন git log --merge
। তারপরে git diff
আপনাকে দ্বন্দ্ব দেখাবে।
কয়েকটি লাইনের চেয়ে বেশি জড়িত বিরোধগুলির জন্য, বাহ্যিক জিইউআই সরঞ্জামে কী চলছে তা দেখা সহজ। আমি আফেন্ডিফ পছন্দ করি - গিটটি বাক্সের বাইরে ভিমডিফ, জিভিমডিফ, কেডিআইফ 3, টিকিডিফ, মেল্ড, এক্সএক্সডিডিফ সমর্থন করে এবং আপনি অন্যগুলি ইনস্টল করতে পারেন: git config merge.tool "your.tool"
আপনার নির্বাচিত সরঞ্জামটি সেট করবে এবং তারপরে git mergetool
ব্যর্থ একীভূত হওয়ার পরে আপনাকে প্রসঙ্গের ভিন্নতা দেখাবে।
প্রতিবার বিরোধের সমাধানের জন্য আপনি যখন কোনও ফাইল সম্পাদনা git add filename
করবেন তখন সূচকটি আপডেট হবে এবং আপনার ডিফ আর তা প্রদর্শন করবে না। যখন সমস্ত দ্বন্দ্বগুলি পরিচালনা করা হয় এবং তাদের ফাইলগুলি git add
বড করা হয়, তখন git commit
আপনার মার্জটি সম্পূর্ণ করবে।
দেখা কিভাবে দ্বন্দ্ব উপস্থাপন করা হয় বা, গীত এ, git merge
ডকুমেন্টেশন বুঝতে কি একত্রীকরণ দ্বন্দ্ব চিহ্নিতকারী হয়।
এছাড়াও দ্বন্দ্বগুলি কীভাবে সমাধান করবেন কীভাবে বিরোধগুলি সমাধান করবেন তা ব্যাখ্যা করে:
দ্বন্দ্ব দেখার পরে, আপনি দুটি জিনিস করতে পারেন:
মার্জ না করার সিদ্ধান্ত নিন। আপনার কেবলমাত্র ক্লিন আপগুলি দরকার তা হল সূচক ফাইলটি
HEAD
2 বিপরীত করার প্রতিশ্রুতিতে পুনরায় সেট করা এবং 2. এবং 3 দ্বারা তৈরি গাছের পরিবর্তনগুলি পরিষ্কার করা;git merge --abort
এই জন্য ব্যবহার করা যেতে পারে।বিরোধগুলি সমাধান করুন। গিট কার্যকারী গাছের মধ্যে দ্বন্দ্বগুলি চিহ্নিত করবে। ফাইলগুলি আকারে এবং
git add
সেগুলি সূচকে সম্পাদনা করুন।git commit
চুক্তি সিল করতে ব্যবহার করুন ।আপনি বেশ কয়েকটি সরঞ্জাম দিয়ে দ্বন্দ্বের মাধ্যমে কাজ করতে পারেন:
একটি মার্জারুল ব্যবহার করুন।
git mergetool
একটি গ্রাফিকাল মার্জটুল চালু করতে যা আপনাকে মার্জ করার মাধ্যমে কাজ করবে।ভিন্নতা দেখুন।
git diff
উভয়HEAD
এবংMERGE_HEAD
সংস্করণ উভয় থেকে পরিবর্তন হাইলাইট, একটি ত্রি-উপায় পার্থক্য প্রদর্শিত হবে ।প্রতিটি শাখা থেকে পৃথক্ দেখুন।
git log --merge -p <path>
প্রথম diffs দেখাবেHEAD
সংস্করণ এবং তারপরMERGE_HEAD
সংস্করণ।মূল দেখুন।
git show :1:filename
সাধারণ পূর্বপুরুষgit show :2:filename
দেখায়,HEAD
সংস্করণgit show :3:filename
দেখায় এবংMERGE_HEAD
সংস্করণ দেখায় ।
আপনি মার্জ সংঘাতের চিহ্নিতকারীগুলি এবং কীভাবে প্রো গিট বই বিভাগ বেসিক মার্জ সংঘাতগুলিতে সেগুলি সমাধান করবেন সে সম্পর্কেও পড়তে পারেন ।
আমি হয় আমার বা তাদের সংস্করণ পুরোপুরি চাই, বা স্বতন্ত্র পরিবর্তনগুলি পর্যালোচনা করে তাদের প্রত্যেকের জন্য সিদ্ধান্ত নিতে চাই।
আমার বা তাদের সংস্করণটি সম্পূর্ণরূপে স্বীকার করুন :
আমার সংস্করণ গ্রহণ করুন (স্থানীয়, আমাদের):
git checkout --ours -- <filename>
git add <filename> # Marks conflict as resolved
git commit -m "merged bla bla" # An "empty" commit
তাদের সংস্করণ গ্রহণ করুন (দূরবর্তী, তাদের):
git checkout --theirs -- <filename>
git add <filename>
git commit -m "merged bla bla"
আপনি যদি সব বিবাদী ফাইল চালাতে চান তবে:
git merge --strategy-option ours
অথবা
git merge --strategy-option theirs
সমস্ত পরিবর্তন পর্যালোচনা করুন এবং স্বতন্ত্রভাবে সেগুলি গ্রহণ করুন
git mergetool
git add <filename>
git commit -m "merged bla bla"
ডিফল্ট কমান্ড লাইনেmergetool
কাজ করে । কমান্ড লাইন মার্জেটুল কীভাবে ব্যবহার করবেন তা পৃথক প্রশ্ন হওয়া উচিত।
আপনি এর জন্য ভিজ্যুয়াল সরঞ্জামও ইনস্টল করতে পারেন , যেমন meld
এবং চালান
git mergetool -t meld
এটি স্থানীয় সংস্করণ (আমাদের), "বেস" বা "মার্জড" সংস্করণ (একীভূত হওয়ার বর্তমান ফলাফল) এবং দূরবর্তী সংস্করণ (তাদের) খুলবে। মার্জড সংস্করণটি শেষ হয়ে গেলে সংরক্ষণ করুন, git mergetool -t meld
"কোনও ফাইল মার্জ করার দরকার নেই" না হওয়া পর্যন্ত আবার চালান , তারপরে পদক্ষেপ 3 এবং 4 এ যান।
জন্য এ গিয়ে Emacs যা আধা ম্যানুয়ালি একত্রীকরণ দ্বন্দ্ব সমাধান করতে চান ব্যবহারকারী:
git diff --name-status --diff-filter=U
দ্বন্দ্বের সমাধানের প্রয়োজন এমন সমস্ত ফাইল দেখায়।
এই ফাইলগুলির একটি একটি করে বা সমস্ত একবারে খুলুন:
emacs $(git diff --name-only --diff-filter=U)
ইমাক্সে সম্পাদনা প্রয়োজন বাফার দেখার সময়, টাইপ করুন
ALT+x vc-resolve-conflicts
এটি তিনটি বাফার খুলবে (আমার, তাদের এবং আউটপুট বাফার)। 'এন' (পরবর্তী অঞ্চল), 'পি' (পূর্ববর্তী অঞ্চল) টিপুন নেভিগেট করুন। আউটপুট বাফারে খনি বা তার অঞ্চলটি অনুলিপি করতে যথাক্রমে 'a' এবং 'b' চাপুন। এবং / অথবা সরাসরি আউটপুট বাফার সম্পাদনা করুন।
শেষ হয়ে গেলে: 'কি' টিপুন। ইমাকস আপনাকে জিজ্ঞাসা করে আপনি এই বাফারটি সংরক্ষণ করতে চান: হ্যাঁ। একটি বাফার সমাপ্তির পরে এটি টার্মিনাল থেকে চালিয়ে সমাধান হিসাবে সমাধান করুন:
git add FILENAME
সমস্ত বাফার টাইপ দিয়ে শেষ হলে
git commit
মার্জ শেষ করতে।
উপরের উত্তরগুলিতে টান / আনার / একীভূত হওয়ার কথা বলতে গিয়ে আমি একটি আকর্ষণীয় এবং উত্পাদনশীল কৌশল ভাগ করতে চাই,
git pull --rebase
এই উপরের কমান্ডটি আমার গিট লাইফের সবচেয়ে দরকারী কমান্ড যা অনেক সময় সাশ্রয় করে।
রিমোট সার্ভারে আপনার নতুন প্রতিশ্রুতিবদ্ধ পরিবর্তনটি চাপ দেওয়ার আগে, git pull --rebase
বরং git pull
ম্যানুয়াল চেষ্টা করুনmerge
এবং এটি স্বয়ংক্রিয়ভাবে সর্বশেষতম রিমোট সার্ভার পরিবর্তনগুলি (একটি আনয়ন + মার্জ সহ) সিঙ্ক করবে এবং গিট লগে আপনার স্থানীয় সর্বশেষ প্রতিশ্রুতি শীর্ষে রাখবে। ম্যানুয়াল টান / মার্জ সম্পর্কে চিন্তা করার দরকার নেই।
বিরোধের ক্ষেত্রে কেবল ব্যবহার করুন
git mergetool
git add conflict_file
git rebase --continue
এখানে বিশদটি সন্ধান করুন: http://gitolite.com/git-pull--rebase
সহজভাবে, আপনি যদি ভালভাবে জানেন যে কোনও ভাণ্ডারগুলির মধ্যে পরিবর্তনগুলি গুরুত্বপূর্ণ নয় এবং অন্যগুলির পক্ষে সমস্ত পরিবর্তন সমাধান করতে চান তবে ব্যবহার করুন:
git checkout . --ours
আপনার সংগ্রহস্থলের পক্ষে পরিবর্তনগুলি সমাধান করতে বা
git checkout . --theirs
অন্য বা প্রধান সংগ্রহস্থলের পক্ষে পরিবর্তনগুলি সমাধান করতে ।
অন্যথায় আপনাকে একের পর এক ফাইলের মাধ্যমে পদক্ষেপ নিতে জিইউআই একীকরণ সরঞ্জামটি ব্যবহার করতে হবে, মার্জ টুলটি বলুন p4merge
বা আপনি ইতিমধ্যে ইনস্টল করেছেন এমন কারও নাম লিখুন
git mergetool -t p4merge
এবং একটি ফাইল শেষ করার পরে, আপনাকে সংরক্ষণ করতে হবে এবং বন্ধ করতে হবে, যাতে পরেরটিটি খুলবে।
গিটে সংযুক্তির সংঘাতগুলি সংশোধন করতে দয়া করে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:
গিট স্ট্যাটাস: গিট স্ট্যাটাস পরীক্ষা করুন
প্যাচসেট পান: গিট আনুন (আপনার গিট কমিট থেকে ডান প্যাচ চেকআউট করুন)
একটি স্থানীয় শাখা চেকআউট করুন (এখানে আমার উদাহরণে টেমপ 1): গিট চেকআউট-বি টেমপ্লে 1
মাস্টার থেকে সাম্প্রতিক সামগ্রীগুলি টানুন: গিট টান --rebase মূল মাস্টার
মার্জেটুল শুরু করুন এবং দ্বন্দ্বগুলি পরীক্ষা করুন এবং সেগুলি ঠিক করুন ... এবং আপনার বর্তমান শাখার সাথে দূরবর্তী শাখায় পরিবর্তনগুলি পরীক্ষা করুন: গিট মার্জেটুল
আবার স্থিতি পরীক্ষা করুন: গিট স্ট্যাটাস
মার্জেটুল দ্বারা স্থানীয়ভাবে তৈরি অযাচিত ফাইলগুলি মুছুন, সাধারণত মার্জেটুল * .orig এক্সটেনশান দিয়ে অতিরিক্ত ফাইল তৈরি করে। দয়া করে সেই ফাইলটিকে মুছুন কারণ এটি কেবলমাত্র সদৃশ এবং স্থানীয়ভাবে পরিবর্তনগুলি ঠিক করুন এবং আপনার ফাইলগুলির সঠিক সংস্করণ যুক্ত করুন। গিট যোগ করুন # আপনার_চেনজড_রেক্ট_ফাইলস
আবার স্থিতি পরীক্ষা করুন: গিট স্ট্যাটাস
একই কমিট আইডিতে পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ (এটি একটি নতুন পৃথক প্যাচ সেট এড়ায় ): গিট কমিট --amend
মাস্টার শাখায় পুশ করুন: গিট পুশ (আপনার গিট ভাণ্ডারে)
3 টি পদক্ষেপ রয়েছে:
কমান্ড দ্বারা কোন ফাইলগুলি দ্বন্দ্ব সৃষ্টি করে তা সন্ধান করুন
git status
ফাইলগুলি পরীক্ষা করুন, যাতে আপনি দ্বন্দ্বগুলি এর মতো চিহ্নিত করেছেন
<<<<<<<<head
blablabla
আপনি যেভাবে চান এটি এটিকে পরিবর্তন করুন, তারপরে আদেশগুলি দিয়ে প্রতিশ্রুতিবদ্ধ করুন
git add solved_conflicts_files
git commit -m 'merge msg'
অন্যদের বিবিধ হিসাবে আপনি একাধিক উপায়ে মার্জ সংঘাতগুলি ঠিক করতে পারেন fix
আমি মনে করি আসল কীটি স্থানীয় এবং দূরবর্তী সংগ্রহস্থলের সাথে কীভাবে পরিবর্তনগুলি প্রবাহিত হবে তা জেনে। এর মূল বিষয় হ'ল ট্র্যাকিং শাখাগুলি understanding আমি খুঁজে পেয়েছি যে আমি ট্র্যাকিং শাখাকে আমার স্থানীয়, আসল ফাইল ডিরেক্টরি এবং দূরবর্তী হিসাবে উত্স হিসাবে সংজ্ঞায়িত করা 'মাঝখানে হারিয়ে যাওয়া টুকরা' হিসাবে মনে করি।
এড়াতে সহায়তা করার জন্য আমি ব্যক্তিগতভাবে 2 টির অভ্যাসে চলে এসেছি।
পরিবর্তে:
git add .
git commit -m"some msg"
যার দুটি ত্রুটি রয়েছে -
ক) সমস্ত নতুন / পরিবর্তিত ফাইল যুক্ত হয়ে যায় এবং এতে কিছু অযাচিত পরিবর্তন অন্তর্ভুক্ত থাকতে পারে।
খ) আপনাকে প্রথমে ফাইল তালিকা পর্যালোচনা করতে হবে না।
সুতরাং পরিবর্তে আমি কি:
git add file,file2,file3...
git commit # Then type the files in the editor and save-quit.
এই পদ্ধতিতে আপনি কোন ফাইল যুক্ত হবে সে সম্পর্কে আপনি আরও ইচ্ছাকৃত এবং আপনি তালিকাটি পর্যালোচনা করতে এবং বার্তার জন্য সম্পাদক ব্যবহার করার সময় আরও কিছুটা চিন্তা করতে পারেন। আমি -m
বিকল্পের পরিবর্তে যখন একটি পূর্ণ স্ক্রিন সম্পাদক ব্যবহার করি তখন এটি আমার প্রতিশ্রুতি বার্তাগুলিও উন্নত করে ।
[আপডেট - সময় কেটে যাওয়ার সাথে সাথে আমি আরও স্যুইচ করেছি:
git status # Make sure I know whats going on
git add .
git commit # Then use the editor
]
এছাড়াও (এবং আপনার পরিস্থিতির সাথে আরও প্রাসঙ্গিক), আমি এড়াতে চেষ্টা করি:
git pull
অথবা
git pull origin master.
কারণ টানটি মার্জকে বোঝায় এবং আপনি যদি স্থানীয়ভাবে পরিবর্তিত হয়ে থাকেন যে আপনি মার্জ করতে চান না তবে আপনি সহজেই মার্জড কোড এবং / অথবা মার্জ হওয়া উচিত নয় এমন কোডের জন্য সংঘাতের সংঘাতগুলি দিয়ে শেষ করতে পারেন।
পরিবর্তে আমি করার চেষ্টা করি
git checkout master
git fetch
git rebase --hard origin/master # or whatever branch I want.
আপনি এটি সহায়ক খুঁজে পেতে পারেন:
গিট শাখা, কাঁটাচামচ, আনা, মার্জ, পুনরায় এবং ক্লোন, পার্থক্য কি?
git checkout master
এবং আপনার সাথে স্থানীয় পরিবর্তনগুলি কী ঘটেgit fetch
git rebase --hard origin/master
git add .
, এটি কি আমাদের স্থানীয় পরিবর্তনগুলি সংরক্ষণ করবে যাতে আমরা অনুসরণ করতে পারি git checkout master
? না তারা দুটি ভিন্ন পরিস্থিতিতে আছে?
$ git rebase --hard origin/master b5a30cc159ba8dd error: unknown option
হার্ড 'ব্যবহার: Git রি-বেসের ফলে [-i] [অপশন] [--exec <cmd কমান্ড>] [--onto <newbase>] [<মূল প্রজেক্টের>] [<শাখা>] বা: Git রি-বেসের ফলে [-i] [ বিকল্পসমূহ] [--exec <Cdd>] [--অ্যান্ট <নতুন>>] - মূল [<ব্র্যাঞ্চ>] বা: গিট রিবেস - কনটিনিউ | --abort | --স্কিপ | --edit-todo `
CoolAJ86 এর উত্তরে সমস্ত কিছুর পরিমাণ রয়েছে। যদি কোডের একই অংশে আপনার উভয় শাখায় পরিবর্তন ঘটে তবে আপনাকে একটি ম্যানুয়াল মার্জ করতে হবে। কোনও পাঠ্য সম্পাদকের দ্বন্দ্বের মধ্যে ফাইলটি খুলুন এবং আপনার নিম্নলিখিত কাঠামোটি দেখতে পাওয়া উচিত।
(Code not in Conflict)
>>>>>>>>>>>
(first alternative for conflict starts here)
Multiple code lines here
===========
(second alternative for conflict starts here)
Multiple code lines here too
<<<<<<<<<<<
(Code not in conflict here)
সমান চিহ্ন এবং কোণ বন্ধনী অপসারণ করার সময় আপনি যে কোনও নতুন কোডটি দেখতে চান এমন কোনও বিকল্প বা উভয়ের সংমিশ্রণ চয়ন করুন।
git commit -a -m "commit message"
git push origin master
git log --merge -p [[--] path]
আমার পক্ষে সবসময় কাজ করে বলে মনে হয় না এবং সাধারণত দুটি প্রতিশ্রুতি যে দুটি শাখার মধ্যে পৃথক ছিল তা প্রদর্শন করে শেষ হয় --
, কমান্ড থেকে পথ পৃথক করার ক্ষেত্রেও এটি ঘটে ।
আমি এই ইস্যুটি সম্পর্কে কাজ করতে যা করব তা হ'ল দুটি কমান্ড লাইন এবং এক রানের মধ্যে
git log ..$MERGED_IN_BRANCH --pretty=full -p [path]
এবং অন্যটিতে
git log $MERGED_IN_BRANCH.. --pretty=full -p [path]
$MERGED_IN_BRANCH
আমি যে শাখায় একত্রী হয়ে গিয়েছিলাম এবং [path]
সেই ফাইলটি যা বিরোধী। এই আদেশটি সমস্ত কমিটকে প্যাচ আকারে ( ..
) দুটি কমিটের মধ্যে লগ করবে । উপরের কমান্ডগুলির মতো আপনি যদি একপাশে খালি রাখেন তবে স্বয়ংক্রিয়ভাবে গিটটি ব্যবহার করা হবে HEAD
(আপনি যে শাখায় এই ক্ষেত্রে মার্জ করছেন তা)।
এই দুটি শাখাগুলির ডাইভারেজ হওয়ার পরে ফাইলগুলিতে কি কমিটগুলি ঘটেছিল তা আপনাকে দেখতে দেয়। এটি সাধারণত বিরোধগুলি সমাধান করা সহজ করে তোলে।
patience
আমি বিস্মিত হয়েছি যে আর কেউ patience
মার্জ পুনরাবৃত্ত কৌশলটি ব্যবহার করে বিরোধ নিষ্পত্তির বিষয়ে কথা বলেনি । একটি বড় মার্জ সংঘাতের জন্য, ব্যবহার করেpatience
জন্য, আমার জন্য ভাল ফলাফল সরবরাহ । ধারণাটি হ'ল এটি পৃথক লাইনের চেয়ে ব্লকগুলি মেলাতে চেষ্টা করবে।
উদাহরণস্বরূপ আপনি যদি আপনার প্রোগ্রামের ইনডেন্টেশন পরিবর্তন করেন তবে ডিফল্ট গিট মার্জ কৌশলটি কখনও কখনও একক ধনুর্বন্ধকে মেলে {
যা বিভিন্ন ফাংশনের অন্তর্ভুক্ত। এটি এর সাথে এড়ানো যায় patience
:
git merge -s recursive -X patience other-branch
ডকুমেন্টেশন থেকে:
With this option, merge-recursive spends a little extra time to avoid
mismerges that sometimes occur due to unimportant matching lines
(e.g., braces from distinct functions). Use this when the branches to
be merged have diverged wildly.
যদি আপনার একত্রীকরণ বিরোধ রয়েছে এবং তাদের শাখা সংশোধন করার সময় অন্যেরা কী মনে রেখেছিল তা দেখতে চান, তবে কখনও কখনও তাদের শাখাটি সরাসরি সাধারণ পূর্বপুরুষের সাথে (আমাদের শাখার পরিবর্তে) তুলনা করা সহজ। তার জন্য আপনি ব্যবহার করতে পারেন merge-base
:
git diff $(git merge-base <our-branch> <their-branch>) <their-branch>
সাধারণত, আপনি কেবল একটি নির্দিষ্ট ফাইলের পরিবর্তনগুলি দেখতে চান:
git diff $(git merge-base <our-branch> <their-branch>) <their-branch> <file>
12 ই ডিসেম্বর, 2016 হিসাবে, আপনি শাখাগুলি মার্জ করতে এবং github.com এ বিরোধগুলি সমাধান করতে পারেন
সুতরাং, আপনি যদি পুরানো উত্তরগুলি থেকে এখানে দেওয়া কমান্ড-লাইন বা 3 য় পক্ষের সরঞ্জামগুলি ব্যবহার করতে না চান তবে গিটহাবের নেটিভ সরঞ্জামটি সহ যান।
এই ব্লগ পোস্টটি বিশদভাবে ব্যাখ্যা করেছে , তবে মূল কথাটি হ'ল ইউআইয়ের মাধ্যমে দুটি শাখা 'মার্জ' করার পরে, আপনি এখন একটি 'দ্বন্দ্বের সমাধান করুন' বিকল্প দেখতে পাবেন যা আপনাকে এই সংহত বিরোধগুলির সাথে মোকাবিলা করার জন্য কোনও সম্পাদককে নিয়ে যাবে।
আপনি যদি শাখা (পরীক্ষা) থেকে মাস্টারটিতে মার্জ করতে চান তবে আপনি এই পদক্ষেপগুলি অনুসরণ করতে পারেন:
পদক্ষেপ 1 : শাখায় যান
git checkout test
পদক্ষেপ 2 :
git pull --rebase origin master
পদক্ষেপ 3 : যদি কিছু বিবাদ হয় তবে এটি পরিবর্তন করতে এই ফাইলগুলিতে যান।
পদক্ষেপ 4 : এই পরিবর্তনগুলি যুক্ত করুন
git add #your_changes_files
পদক্ষেপ 5 :
git rebase --continue
পদক্ষেপ :: যদি এখনও বিরোধ দেখা দেয় তবে আবার ৩ য় ধাপে ফিরে যান। যদি কোনও বিরোধ না হয় তবে নিম্নলিখিতগুলি করুন:
git push origin +test
পদক্ষেপ 7 : এবং তারপরে পরীক্ষা এবং মাস্টারগুলির মধ্যে কোনও বিরোধ নেই। আপনি সরাসরি মার্জ ব্যবহার করতে পারেন।
বিরোধগুলি এড়াতে আমি সর্বদা নীচের পদক্ষেপগুলি অনুসরণ করি।
এখন আপনি একই কাজ করতে পারেন এবং যতগুলি স্থানীয় শাখাগুলি চান তা বজায় রাখতে পারেন এবং যখন প্রয়োজন হয় তখন আমার শাখায় আমার গিট চেকআউট করে একসাথে কাজ করতে পারেন।
বিভিন্ন পরিস্থিতিতে সংঘাতগুলি সংঘটিত হতে পারে:
দ্বন্দ্বগুলি সমাধান করার জন্য আপনাকে একটি মার্জ সরঞ্জাম ইনস্টল করতে হবে যা গিটের সাথে সামঞ্জস্যপূর্ণ। আমি ব্যক্তিগতভাবে কেডিফ 3 ব্যবহার করি এবং আমি এটি সুন্দর এবং হ্যান্ডসেট খুঁজে পেয়েছি। আপনি এর উইন্ডোজ সংস্করণটি এখানে ডাউনলোড করতে পারেন:
https://sourceforge.net/projects/kdiff3/files/
বিটিডাব্লু যদি আপনি গিট এক্সটেনশানগুলি ইনস্টল করেন তবে কেডিফ 3 ইনস্টল করার জন্য এর সেটআপ উইজার্ডে একটি বিকল্প রয়েছে।
তারপরে কেডিফকে তার মার্জারুল হিসাবে ব্যবহার করতে সেটআপ গিট কনফিগার করুন:
$ git config --global --add merge.tool kdiff3
$ git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
$ git config --global --add mergetool.kdiff3.trustExitCode false
$ git config --global --add diff.guitool kdiff3
$ git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
$ git config --global --add difftool.kdiff3.trustExitCode false
(কেডিফ এক্সিপ ফাইলের আসল পথ দিয়ে পাথটি প্রতিস্থাপনের কথা মনে রাখবেন))
তারপরে প্রতিবার আপনি যখন মার্জ সংঘাতের মুখোমুখি হন আপনার কেবল এই আদেশটি চালানো দরকার:
$git mergetool
তারপরে এটি কেডিফ 3 খুলবে এবং প্রথমে স্বয়ংক্রিয়ভাবে মার্জ সংঘাতগুলি সমাধান করার চেষ্টা করবে। বেশিরভাগ দ্বন্দ্ব স্বতঃস্ফূর্তভাবে সমাধান করা হবে এবং আপনাকে বাকীটি নিজেই ঠিক করতে হবে।
কেডিফ 3 এর মতো দেখতে এখানে রয়েছে:
তারপরে আপনার কাজ শেষ হয়ে গেলে ফাইলটি সংরক্ষণ করুন এবং এটি দ্বন্দ্বের সাথে পরবর্তী ফাইলে যাবে এবং সমস্ত বিবাদগুলি সমাধান না হওয়া পর্যন্ত আপনি আবার একই জিনিসটি করুন।
সবকিছু সফলভাবে একত্রিত হয়েছে কিনা তা পরীক্ষা করতে, কেবল আবার মার্জেটুল কমান্ডটি চালান, আপনার এই ফলাফলটি পাওয়া উচিত:
$git mergetool
No files need merging
এই উত্তরগুলি হ'ল আমার মতো সেই ভিআইএম ব্যবহারকারীদের জন্য একটি বিকল্প যুক্ত করা যা সম্পাদকের মধ্যে যা কিছু করা পছন্দ করে।
পলাতক নামক ভিআইএম-এর জন্য দুর্দান্ত এই প্লাগইনটি নিয়ে এসেছিলেন টপোপ । একবার ইনস্টল হয়ে গেলে আপনি :Gstatus
যে ফাইলগুলির দ্বন্দ্ব রয়েছে সেগুলি পরীক্ষা করতে চালাতে পারেন and:Gdiff
গিটটি 3 উপায়ে মার্জ করে খোলার জন্য ।
একবার ত্রি-উপায়ে একত্রিত হওয়ার পরে পলাতক আপনাকে নীচের ফ্যাশনে মার্জ করা যে কোনও শাখার পরিবর্তন পেতে দেবে:
:diffget //2
, আসল ( হেড ) শাখা থেকে পরিবর্তনগুলি পান ::diffget //3
, মার্জ করা শাখা থেকে পরিবর্তনগুলি পান: আপনি একবার ফাইলটি মার্জ শেষ করার পরে, :Gwrite
মার্জ করা বাফারটি টাইপ করুন । ভিমকাস্টগুলি এই পদক্ষেপগুলির বিশদটি ব্যাখ্যা করে একটি দুর্দান্ত ভিডিও প্রকাশ করেছে।
গিট ফেচ
গিট আপনার শাখা
গিট রিবেস মাস্টার চেকআউট
এই পদক্ষেপে আপনি আপনার পছন্দের আইডিই ব্যবহার করে সংঘাতের সমাধানের চেষ্টা করবেন
আপনি https://help.github.com/articles/resolving-a- व्यवस्थापन-conflict-using-the-command-line/ ফাইলের সংঘাত নিরসনে হো পরীক্ষা করতে এই লিঙ্কটি অনুসরণ করতে পারেন
গিট অ্যাড
গিট রিবেস - কনটিনিউ
গিট কমিট - এবং
গিট পুশ অরিজিন হেড: রেফ / ড্রাফ্ট / মাস্টার (খসড়ার মতো ধাক্কা)
এখন প্রতিটি জিনিসই ভাল এবং আপনি জীবাণুতে আপনার প্রতিশ্রুতি খুঁজে পাবেন
আমি আশা করি এটি এই সমস্যাটি সম্পর্কে প্রত্যেককে সহায়তা করবে।
আপনি যদি ইতিমধ্যে না হন তবে সম্পাদনার জন্য ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে দেখুন। এটি যা করে তা হল আপনি মার্জ করার চেষ্টা করার পরে (এবং মার্জ সংঘাতের মধ্যে অবতরণ) V
দেখানো মূল এক পরিবর্তনগুলি করেছে কি দ্বারা খুব ভাল আপনাকে সহায়তা করতে পারে এবং আপনি গ্রহণ করা উচিত incoming
বা
current change
(অর্থ একত্র হওয়ার আগে আসল)) ?.
এটি আমার পক্ষে সহায়তা করেছে এবং এটি আপনার পক্ষেও কাজ করতে পারে!
PS: আপনি কেবল নিজের কোড এবং ভিজ্যুয়াল স্টুডিও কোড দিয়ে গিটটি কনফিগার করলেই এটি কাজ করবে।
বিবাদগুলি সমাধানের একটি নিরাপদ উপায় হ'ল গিট-মধ্যস্থতা ব্যবহার করা (এখানে প্রস্তাবিত সাধারণ সমাধানগুলি যথেষ্ট ত্রুটিযুক্ত ইমো)
কীভাবে এটি ব্যবহার করবেন তার দ্রুত পরিচয়ের জন্য এই পোস্টটি দেখুন ।
যারা ভিজ্যুয়াল স্টুডিও ব্যবহার করছেন তাদের জন্য (আমার ক্ষেত্রে 2015)
আপনার প্রকল্পটি ভিএস-এ বন্ধ করুন বিশেষত বড় প্রকল্পগুলিতে ভিএস ইউআই ব্যবহার করে মার্জ করার সময় ঝাঁকুনির দিকে ঝুঁকে পড়ে।
কমান্ড প্রম্পটে একীভূত করুন।
গিট চেকআউট লক্ষ্য_ব্রাঞ্চ
গিট একত্রিত করার উত্স_ ব্রাঞ্চ
তারপরে ভিএসে প্রকল্পটি খুলুন এবং টিম এক্সপ্লোরার -> শাখায় যান। এখন একটি বার্তা রয়েছে যা জানিয়েছে যে মার্জটি মুলতুবি রয়েছে এবং বিরোধী ফাইলগুলি বার্তার ঠিক নীচে তালিকাভুক্ত রয়েছে।
বিরোধী ফাইলটিতে ক্লিক করুন এবং আপনার কাছে মার্জ, তুলনা, উত্স নেবে, লক্ষ্য অর্জনের বিকল্প থাকবে। ভিএসে মার্জ সরঞ্জামটি ব্যবহার করা খুব সহজ।
আপনি যদি আইডিই হিসাবে ইন্টিলিজ ব্যবহার করছেন তবে পিতামাতাকে আপনার শাখায় মার্জ করার চেষ্টা করুন
git checkout <localbranch>
git merge origin/<remotebranch>
এটি এর মতো সমস্ত বিবাদ দেখাবে
এ_এমবিপ্রো: পরীক্ষা আনু $ গিট মার্জ অরিজিন / অটো-মার্জিং এসসিআর / টেস্ট / জাভা / কম /...// টেস্টক্লাস.জভা কনফ্লিক্ট (সামগ্রী): এসআরসি / টেস্ট / জাভা / কম /.../ টেস্টক্লাস.জভাতে সংহত বিবাদ
এখন নোট করুন যে টেস্টক্লাস.জভা ফাইলটি ইন্টেলিজজে লাল দেখানো হয়েছে এছাড়াও গিট স্ট্যাটাসটি প্রদর্শিত হবে
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: src/test/java/com/.../TestClass.java
ইন্টেলিজজে ফাইলটি খুলুন, এর সাথে বিভাগ থাকবে
<<<<<<< HEAD
public void testMethod() {
}
=======
public void testMethod() { ...
}
>>>>>>> origin/<remotebranch>
যেখানে হেড আপনার স্থানীয় শাখায় পরিবর্তিত হয় এবং দূরবর্তী শাখা থেকে পরিবর্তিত হয় / হয়। আপনার প্রয়োজনীয় জিনিসগুলি এখানে রাখুন এবং আপনার প্রয়োজনীয় জিনিসগুলি সরিয়ে ফেলুন f এর পরে সাধারণ পদক্ষেপগুলি করা উচিত। এটাই
git add TestClass.java
git commit -m "commit message"
git push