আমি কীভাবে গিট সাবমডিউলগুলির সাথে বিরোধগুলি পরিচালনা করব?


127

আমার কাছে একটি গিট সুপারপ্রজেক্ট রয়েছে যা বেশ কয়েকটি সাবমোডিয়ুলের উল্লেখ করে এবং আমি আমার প্রকল্পের বাকী সদস্যদের মধ্যে কাজ করার জন্য একটি ওয়ার্কফ্লো লক করার চেষ্টা করছি trying

এই প্রশ্নের জন্য, আমার সুপারপ্রজেক্টটি বলা হয় superyএবং সাবমডিউলটি বলা হয় subby। (তারপরে আমি যা করার চেষ্টা করছি তার একটি সরলীকরণ ... আমি আসলে সংস্করণগুলির জন্য শাখাগুলি ব্যবহার করছি না, তবে আমি মনে করি এটি একটি প্রশ্ন হিসাবে প্রকাশ করা সবচেয়ে সহজ হবে))

আমার মাস্টার শাখার গিট প্রকল্পের superyট্যাগটি একটি সাবমডিউল হিসাবে উল্লেখ করা আছে। শাখা বলা এবং ট্যাগ দিকে নির্দেশ submodule এর রেফারেন্স পরিবর্তিত এর ।v1.0subbysuperyone.onev1.1subby

আমি এই শাখাগুলির প্রত্যেকটিতেই কোনও বাধা ছাড়াই কাজ করতে পারি, তবে আমি যদি one.oneশাখাটি পরিবর্তন করে শাখাটি আপডেট করার চেষ্টা করি তবে আমি masterকিছু বিবাদ পেয়েছি এবং কীভাবে সেগুলি সমাধান করব তা আমি জানি না।

মূলত শাখায় git pull . masterকিছুক্ষণ চলার পরে subbyদেখে মনে হচ্ছে এটি অতিরিক্ত সাবমডিউল তৈরি করে।

টান / মার্জ হওয়ার আগে, আমি শাখা git submoduleথেকে পছন্দসই প্রতিক্রিয়া পেয়েছি one.one:

$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)

তবে টানার পরে, আমি চালানোর সময় এটি অতিরিক্ত সাবমডিউলগুলি যুক্ত করে git submodule:

$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e
Automatic merge failed; fix conflicts and then commit the results.

$ git submodule
qw3rty...321e subby (v1.0)
asdfgh...456d subby (v1.1)
zxcvbn...7890 subby (v1.1~1)

আমি কীভাবে অযাচিত সাবমডিউল রেফারেন্সগুলি মুছতে / উপেক্ষা করব এবং আমার দ্বন্দ্ব এবং পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করব? বা এমন কোনও প্যারামিটার আছে যা আমি আমার আসলটি ব্যবহার করতে পারি git pullযা আমার সাবমডিউলগুলিকে উপেক্ষা করবে?

উত্তর:


23

এর আগে ঠিক সেই ত্রুটি আমি দেখিনি। তবে আপনি যে সমস্যার মুখোমুখি হচ্ছেন সে সম্পর্কে আমার একটি ধারণা আছে। দেখে মনে হচ্ছে কারণ শাখাগুলি masterএবং one.oneশাখাগুলি superyসাব-মডুলের জন্য আলাদা আলাদা রেফ রাখে subby, আপনি যখন masterগিট থেকে পরিবর্তনগুলি মার্জ করেন তখন কোন রেফ - v1.0বা v1.1- এর one.oneশাখাটি দ্বারা রাখা এবং ট্র্যাক করা উচিত তা জানে না supery

যদি এটি হয় তবে দ্বন্দ্ব সমাধানের জন্য আপনার যে রেফটি চান তা নির্বাচন করতে হবে এবং সেই পরিবর্তনটি সংঘটিত করতে হবে। রিসেট কমান্ডটি দিয়ে আপনি যা করছেন ঠিক তেমনই।

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


1
প্রশ্নের উপর কিছু আলোকপাত করার জন্য ধন্যবাদ। এটি এখন আমার কাছে মোটামুটি বোঝায় এবং রিসেট কমান্ড আমার পরিস্থিতির উপরে পুরোপুরি কাজ করে। তবে মাস্টার শাখা থেকে সাবমোডুল রেফ গ্রহণ এবং বর্তমান শাখার সাবমডিউলে রেফটি ফেলে দেওয়ার কী আদেশ থাকবে? আমি জানি যে কীভাবে সাধারণ দ্বন্দ্বগুলি পরিচালনা করতে হয় তবে ওয়েবে স্ক্রোল করার তিন দিন পরেও আমি আরএম-আর ব্যতীত কোনও কোডের উদাহরণ খুঁজে পাই না। এবং আমি ভাবতে শুরু করি যে উদাহরণগুলি বিদ্যমান নেই এর কারণ রয়েছে; সাবমডিউল এতদূর পর্যন্ত সুপারপজেক্ট থেকে বিমূর্ত হয়ে গেছে যে আপনাকে প্রতিটি সংক্রমণ পরিচালনা করতে হবে।
টাইলার 20

26
অবশেষে! একটি উত্তর! আমার কাছে তা থাকত added by us: ../Mono.Cecilমধ্যে git statusকিন্তু git addgit rmব্যর্থ Mono.Cecil: needs merge, pathspec 'Mono.Cecil/' did not match any filesহয়েছে কারণ এটি শুধু একটি খালি ফোল্ডার এবং Git শুধুমাত্র সত্যিই হ্যান্ডলগুলি ফাইল ছিল। git checkoutআমাকে দিয়েছে Mono.Cecil: needs merge, error: you need to resolve your current index first, git submodule updateদিয়েছে Skipping unmerged submodule Mono.Cecilএবং শেষ পর্যন্ত git checkout master Mono.Cecilএটি ঠিক করে দিয়েছে। বেসিক সমস্যা: git statusপরামর্শটি ভুল, সুতরাং একটি শাখা বাছাই করুন এবং এর সাথে ফোল্ডারের অনুলিপিটি নিন checkout!
আইবিবোর্ড

6
@ IBBoard হুকুম আমাকে এই পরিস্থিতির সঙ্গে সাহায্য করেছে - আমি চেষ্টা git checkout --ours SUBMODএবং git add SUBMODএবং অন্যদের, কিন্তু পরিশেষে করছেন git checkout master SUBMODদ্বন্দ্ব স্থির করেছি। এই মন্তব্যটি সম্ভবত একটি উত্তর নয়, কোনও মন্তব্য নয় ... :)
কলিন ডি বেনেট

89

ঠিক আছে, এটি প্রযুক্তিগতভাবে সাবমডিউলগুলির সাথে বিরোধগুলি পরিচালনা করে না (যেমন: এটি রাখুন তবে তা নয়) তবে আমি কাজ চালিয়ে যাওয়ার একটি উপায় খুঁজে পেয়েছি ... এবং আমার যা করতে হয়েছিল তা হ'ল আমার git statusআউটপুটটির দিকে মনোযোগ দেওয়া এবং সাবমোডিয়ুলগুলি পুনরায় সেট করা:

git reset HEAD subby
git commit

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


আমার কাছে এটি কেবল বিরোধী মডিউলটির স্থিতি "উভয় সংশোধিত" থেকে "মুছে ফেলা" হিসাবে পরিবর্তন করবে বলে মনে হচ্ছে।
ম্যাট জুকোভস্কি

4
পরিবর্তে আপনি মার্জ করা শাখার সাবমডিউলটি রাখতে চান: গিট রিসেট <নিমজ্জিত- ব্র্যাঞ্চ> সাববি
অ্যাডওয়ার্ড অ্যান্ডারসন

1
উত্তরে উল্লিখিত হিসাবে আমার জন্য কাজ করে .. গিট রিসেট হেড পাথ / থেকে / সাবমডিউল / দির
এস্টয়

56

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

  1. চালান git status- বিরোধগুলি সহ সাবমডিউল ফোল্ডারের একটি নোট তৈরি করুন
  2. বর্তমান শাখায় সর্বশেষ প্রতিশ্রুতিবদ্ধ সংস্করণটিতে সাব-মডেলটি পুনরায় সেট করুন:

    git reset HEAD path/to/submodule

  3. এই মুহুর্তে আপনার কাছে আপনার সাবমোডিয়ুলের দ্বন্দ্ব-মুক্ত সংস্করণ রয়েছে যা আপনি এখন সাবমডিউলের সংগ্রহস্থলের সর্বশেষ সংস্করণে আপডেট করতে পারবেন:

    সিডি পাথ / টু / সাবমডিউল
    গিট সাবমডিউল ফোর্যাচ গিট টানুন উত্স সাবমডুডল-ব্রাঞ্চ-নাম
  4. এবং এখন আপনি এটি করতে পারেন commitএবং কাজে ফিরে পাবেন।


16

প্রথমে, আপনার সাব-মডিউলটিতে আপনি যে হ্যাশটি চান তা সন্ধান করুন। তারপর চালান

~/supery/subby $ git co hashpointerhere
~/supery/subby $ cd ../
~/supery $ git add subby
~/supery $ git commit -m 'updated subby reference'

এটি আমার সাবমডিউলটিকে সঠিক হ্যাশ রেফারেন্সে পেতে এবং আরও বিবাদ না পেয়ে আমার কাজ চালিয়ে যাওয়ার জন্য কাজ করেছে।


1
অথবা আপনি শুধু একটি Git চেকআউট --theirs (অথবা --ours) subby করতে পারে
Bachi

@ বাচি: গিট চেকআউট - তার এবং আওয়ারগুলির সাবমোডিয়ুলগুলিতে কোনও প্রভাব নেই।
এডওয়ার্ড অ্যান্ডারসন

1
এটি বিরোধের সমাধান করার সময় <hashpointerhere> নির্ধারণ করা সহজ নয় easy দ্বন্দ্বের প্রতিটি পক্ষের চেক-আপ করা সাবমডিউল কমিট দেখার সহজ উপায় আমি জানি না। সাববিতে আপনি যে প্রতিশ্রুতিটি যাচাই করেছেন তা মার্জ করার উভয় দিক থেকে আলাদা হতে পারে, যা মার্জ কমিটে উপযুক্ত নয়।
এডওয়ার্ড অ্যান্ডারসন

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

12

আমার git rebase -i origin/masterএকটি শাখায় সমস্যা ছিল । আমি সাবমডিউল রেফারির মাস্টারের সংস্করণ নিতে চাইছিলাম, তাই আমি কেবল এটি করেছি:

git reset master path/to/submodule

এবং তারপর

git rebase --continue

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


3
এটি আমার পক্ষে কাজ করেছে।
সাব

3

এই আলোচনা থেকে সহায়তা পেয়েছি। আমার ক্ষেত্রে

git reset HEAD subby
git commit

আমার জন্য কাজ করেছেন :)


2

ভাল আমার পিতামহিত ডিরেক্টরিতে আমি দেখতে পাই:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)

সুতরাং আমি সবেমাত্র এটি করেছি

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