গিট সাবমডিউল এবং সাবট্রির মধ্যে পার্থক্য


300

গিট সাবমডিউল এবং সাবট্রি ব্যবহারের মধ্যে ধারণাগত পার্থক্যগুলি কী কী?

প্রতিটি জন্য সাধারণ পরিস্থিতিতে কি?


2
এটি আপনার সব প্রশ্নের উত্তর দিতে পারে কিন্তু বিষয়ের উপর আকর্ষণীয় পড়া হল: blogs.atlassian.com/2013/05/...
চপ


"গীত Submodules বিকল্প?": Stackoverflow.com/questions/6500524/...
brillout

উত্তর:


177

আমি যদি লিঙ্কগুলি সর্বদা বাহ্যিক রেপোর হেডকে নির্দেশ করতে চাই তবে কী হবে?

আপনি সাবমডিউল রিমোট রেপোর একটি শাখার হেড অনুসরণ করতে একটি সাবমডিউল তৈরি করতে পারেন, এটি সহ:

git submodule add -b <branch> <repository> [<path>]। (অনুসরণ করার জন্য একটি শাখা নির্দিষ্ট করতে)
o git submodule update --remoteযা <repository>/<branch>ডিফল্টরূপে সাবমোডিয়ালের সামগ্রীটি সর্বশেষতম হেড থেকে আপডেট করবে origin/master। আপনার মূল প্রকল্পটি সাবমডিউলের হেডের হ্যাশগুলি এখনও --remoteব্যবহার করা হলেও ট্র্যাক করবে ।



আপনার উত্তরটি এখানে ভোট দেওয়া উত্তরের বিপরীতে গেছে বলে মনে হচ্ছে: stackoverflow.com/questions/10443627/…
নাথান এইচ

@ নাথান এই (হেডের ট্র্যাক করার সম্ভাবনা) এক বছর পরে যুক্ত করা হয়েছে (মার্চ ২০১৩, গিট ১.৮.২ : গিথুব.com/ git/git/ blob/… )
ভোনসি

আমি দেখতে পেলাম সাবমডিউল অনুসরণের আচরণটি আপনার অন্যান্য অ্যাওভারেও উল্লেখ করা হয়েছে । সেক্ষেত্রে আমার মনে হয় আপনি বলতে চাইছেন যে সাবমডিউলের হেডকে সর্বদা নির্দেশ করা সাবডমডিউল ডকুমেন্টেশন অনুসারে আপডেট কমান্ড দুটি ব্যবহার করে add -bএবং --remoteতারপরেই সম্পন্ন হয় । সেক্ষেত্রে , মাস্টারের হেডের অনুসরণের জন্য এখনও সত্যই দরকার আছে? -b
ম্যাটানস্টার

@ ম্যাটটি -bসাবমোডুলের জন্য ডান .গিটমডিউল মেটাডেটা তৈরি করতে ব্যবহৃত হয় (এটি একটি এর সমতুল্য git config -f .gitmodules submodule.<path>.branch <branch>)।
ভোনসি

তারপরে এটি সক্ষম করার সাথে সামান্যই সম্পর্কযুক্ত --remote- এটি ব্যবহার না করা --remoteথাকলেও কাজ -bকরে add। উভয় ক্ষেত্রেই আপডেটটি প্যারেড রেপোতে সাবমডিউলে আবাসনের প্রতিশ্রুতি ঘটাবে, সুতরাং লিঙ্কগুলি সত্যই খুব স্বয়ংক্রিয় উপায়ে "সর্বদা হেডকে নির্দেশ করে" না .... হয় আমি তা পাইনি, বা দাবিটি আসল উত্তর (?) থেকে আরও ভাল সরানো হবে
ম্যাটানস্টার


121

ধারণাগত পার্থক্য হ'ল:

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

সঙ্গে Git সাবট্রি আপনি তার ইতিহাস সহ ভেজাল, অন্য সংগ্রহস্থলের একীভূত। সুতরাং এটি সংহত করার পরে, আপনার সংগ্রহস্থলের আকার সম্ভবত বড় so সংহতকরণের পরে অন্য সংগ্রহস্থলের সাথে কোনও সংযোগ নেই এবং আপনি আপডেট পেতে না চাইলে আপনার এতে অ্যাক্সেসের প্রয়োজন হবে না। সুতরাং কোডটি এবং ইতিহাস পুনরায় ব্যবহারের জন্য এই কৌশলটি বেশি - আমি ব্যক্তিগতভাবে এটি ব্যবহার করি না।


তবে আপনার সাথে git subtreeএখনও চাপ দিতে পারে - আপনি যদি চান - ঠিক?
আইএক্সএক্স

@ এলএক্সএক্স আপনি যদি সংগ্রহস্থলটির URL জানেন ...
ফ্র্যাঙ্কলিন ইউ

@ ফ্র্যাঙ্কলিনইউ সে কেন জানবে না? স্থানীয় গিট মেটা ডেটা থেকে সেই তথ্যটি পাওয়া যাবে না?
adi518

@ adi518 হ্যাঁ, আপনিই যদি সাবট্রি তৈরি করেন। তবে, আপনি যদি নিজের সংগ্রহস্থলটিকে গিটহাবের দিকে ঠেলে দেন এবং অন্যরা এটি ক্লোন করে ফেলেছেন, তবে আমি মনে করি না যে সে / সে সাবট্রির ইউআরএল স্বয়ংক্রিয়ভাবে জানে।
ফ্র্যাঙ্কলিন ইউ

@ নিক্লাসপি - আপনি কি "মূল ভাণ্ডারে নতুন প্রতিশ্রুতি রেফারেন্স" এর বিস্তারিত ব্যাখ্যা করতে পারেন? এটিই একটি পদক্ষেপ আমি কীভাবে কার্যকর করব সে সম্পর্কে পরিষ্কার নয় এবং সুতরাং "পরিবর্তিত রেফারেন্স" আমি বুঝতে পারি এমন কিছুই নয়।
রবার্ট অসলারের

21

উপ-মডিউল
একটি প্রধান রেপোকে একটি রিমোটে ঠেলে উপ-মডিউলটির ফাইলগুলিকে ধাক্কা দেয় না

উপ-গাছ
একটি প্রধান রেপোকে রিমোটে ঠেলে উপ-গাছের ফাইলগুলিকে ধাক্কা দেয়


3
"একটি প্রধান রেপোকে দূরবর্তীতে উপ-গাছের ফাইলগুলিতে চাপ দেয়" না, তা হয় না।
জে ব্র্যাম্বলে

@ জে ব্র্যাম্বলে আমার সম্ভবত উল্লেখ করা উচিত যে এটি উত্সট্রি অ্যাপ্লিকেশন দিয়ে সম্পন্ন হয়েছে উদাহরণস্বরূপ:git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master
ম্যাকিক রেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.