আপনি কি .gitignore এ একটি গিট সাবমডিউলটিকে উপেক্ষা করছেন বা এটি আপনার রেপোতে প্রতিশ্রুতিবদ্ধ?


94

আমি আমার প্রকল্প করার জন্য একটি submodule জুড়েছেন project_dir/vendor/submodule_oneএখন প্রতিটি সময় আমি চালানোর git statusআমি পেতে modified: vendor/submodule_one (new commits)

আমার প্রশ্ন হ'ল এটি মোকাবেলার সেরা উপায় কি? আমি কি আমার মূল প্রকল্প হিসাবে vendor/submodule_oneফোল্ডারটি যুক্ত করব যে আমার সাবমডিউলের .gitignoreবৈশিষ্ট্যগুলি সম্পর্কে জানতে হবে না?

বা যখন আমি আমার সাবমডিউলে পরিবর্তন করছি এবং পরিবর্তনগুলি করছি তখন আমার মূল প্রকল্পেও আমার কি কমিট করা দরকার?

কেবলমাত্র সাবমডিউলগুলি দিয়ে শুরু করা এবং সেগুলি সেট আপ করার বাইরে খুব বেশি তথ্য খুঁজে পাওয়া যাবে না।

উত্তর:


81

না, আপনার নিজের সাবমডিউলটি আপনার যুক্ত করার দরকার নেই .gitignore: পিতা-মাতা আপনার সাবমডিউল থেকে যা দেখবে তা হ'ল গিটলিংক (একটি বিশেষ প্রবেশ,mode 160000 )।

এর অর্থ: একটি সাবমডিউলে সরাসরি করা যেকোনো পরিবর্তনকে পিতামাতার ডিরেক্টরিতে প্রতিশ্রুতিবদ্ধ হওয়া দরকার।
এইভাবে, প্যারেন্ট ডিরেক্টরি সাবমোডুলের অবস্থার জন্য সঠিক প্রতিশ্রুতি রেকর্ড করবে: সেই প্রতিশ্রুতিটি উপরে উল্লিখিত "গিটলিংক";

আপনি " গিট সাবমডিউল আপডেট (সাবমডিউলের প্রকৃত প্রকৃতি) " এ নীতিটি সম্পর্কে আরও পড়তে পারেন ।
সাবমডিউলগুলির পেছনের মূল ধারণাটি একটি উপাদান-ভিত্তিক পদ্ধতির , যেখানে আপনি নির্দিষ্ট কমিটে অন্যান্য রেপো রেফারেন্স করেন। তবে আপনি যদি সে সাবমোডিয়ুলগুলিতে কিছু পরিবর্তন করেন তবে আপনার সেই তথ্যসূত্রগুলি প্যারেন্ট রেপোতেও আপডেট করতে হবে।


মনে রাখবেন যে, গীত 2.13 সঙ্গে (Q2 এর 2017), এবং না gitlink উপেক্ষা, আপনি কি এখনও সঙ্গে submodule উপেক্ষা করতে পারেন:

git config submodule.<name>.active false

" গিট সাবমডিউলের জন্য নতুন কমিট উপেক্ষা করুন " এ আরও দেখুন ।


দ্রষ্টব্য: গিট 2.15.x / 2.16 (Q1 2018) এর সাথে একটি সাব মড্যুলটিকে উপেক্ষা করা আরও সুনির্দিষ্ট।
" git status --ignored --untracked" কোনও পৃথক প্রকল্পের কার্যকারী বৃক্ষের কাছে থামেনি যা একটি উপেক্ষা করা ডিরেক্টরিতে এম্বেড করা আছে এবং অন্য প্রকল্পে ফাইল তালিকাভুক্ত করা হয়েছে, কেবল ডিরেক্টরিটিকে উপেক্ষা হিসাবে দেখানোর পরিবর্তে।

দেখুন কমিট fadb482 (25 অক্টোবর 2017) দ্বারা জোহানেস Schindelin ( dscho)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে da7996a কমিট , 06 নভেম্বর 2017)

status: বাদ দেওয়া ডিরেক্টরিগুলিতে সাবমডিউলগুলি দ্বারা বিভ্রান্ত করবেন না

আমরা মনোযোগ সহকারে excludeপতাকাটি treat_directory()ফাংশনে প্রেরণ করেছি যাতে আমরা এটি নির্দেশ করতে পারি যে এর মধ্যে থাকা ফাইলগুলি পুনরাবৃত্তি করার সময় তালাছাড়া করা বাদ দিয়ে বাদ দেওয়া হয়েছে।

তবে আমরা এখনও সাবমডিউলগুলি একইভাবে ব্যবহার করি নি।

যে কারণে, git status --ignored --untrackedএকটি submodule সঙ্গে submoduleএকটি gitignored মধ্যে tracked/"এ submodule দেখাতে হবে Untracked files" বিভাগে, যেমন

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    tracked/submodule/

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    tracked/submodule/initial.t

পরিবর্তে, আমরা এটি " Ignored files" বিভাগে সাবমডিউলটি দেখানোর জন্য চাই :

On branch master
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    tracked/submodule/

4
ধন্যবাদ ভনসি, আপনি যখন এটির মতো রাখেন তখন নির্ভুল ধারণা তৈরি করে।
sprysoft

8
এই উত্তরটি বিভ্রান্তিকর কারণ প্রশ্ন শিরোনামটি সাবমোডিয়াল ফোল্ডারগুলিকে উপেক্ষা করবেন কিনা তা জিজ্ঞাসা করছে এবং আপনি পরে প্রশ্নের শিরোনামে পৃথক প্রশ্নের উত্তর হ্যাঁ দিয়ে দিচ্ছেন।
SgtPooki

4
আমি মনে করি এটি এখন আরও বেশি অর্থবোধ করে, এবং গভীরভাবে তথ্য সরবরাহ করে। দুর্দান্ত, আপডেট করার জন্য ধন্যবাদ :)
SgtPooki

.Gitignore এর পক্ষে যুক্তি: যখন ইউআরএল থাকা ইউআরএল সম্ভবত একটি ব্যবহারকারীর নাম প্যারাম সহ একটি নির্দিষ্ট নির্দিষ্ট গিট url থাকতে পারে তখন চেক ইন .gitsubmodules ফাইলটি কেন?
জাঙ্গোফান

4
@ জাজানফান @ প্রশ্নটি (এবং আমার উত্তর) নিজেই সাবমডিউল ফোল্ডারটি উপেক্ষা করার বিষয়ে ছিল (একটি গিটলিংকের প্রতিনিধিত্বকারী)। .gitmodulesফাইল উপেক্ষা সম্পর্কে নয় । এটি সত্য যে এই একটি ফাইল (দ্য .gitmodules)টিতে শংসাপত্রগুলি অন্তর্ভুক্ত থাকতে পারে তবে এটি যদি কেবল সর্বজনীন রেপো ক্লোন করতে ব্যবহৃত হয় তবে এটি সেগুলি অন্তর্ভুক্ত করতে হবে না। এছাড়াও এগুলি উইন্ডোতে, "উইন্ডোজের জন্য গিট শংসাপত্র ব্যবস্থাপক" ( github.com/Mic Microsoft/Git- Credational- Manager- for-Windows/ ) এর মতো শংসাপত্র সহায়ক সহ, যাইহোক, উইন্ডোজে, যাইহোক ক্যাশে রাখা যায় । সুতরাং এর মধ্যে শংসাপত্র থাকা .gitmodulesকোনও প্রাণঘাতী নয়।
ভোনসি

8

কিছু কারণে submodule.module-name.active আমার পক্ষে কাজ করে না।

এজন্য আমি সাবমডিউল.মডিউল-নেম.সাইনোর ব্যবহার করেছি

git config submodule.<your module path>.ignore all

https://git-scm.com/docs/gitmodules - এখানে আপনি প্যারামিটারের জন্য সম্ভাব্য মানগুলির বর্ণনা পেতে পারেন

(নতুন কমিট) এবং (পরিবর্তিত সামগ্রী) বার্তাগুলির জন্য আমার জন্য কাজ করে।


1

গৃহীত উত্তরের সাথে যুক্ত করতে আমি জানতে পেরেছি যে গিট সাবমডিউল ফোল্ডারটি .gitignore এ যুক্ত করা আসলে সমস্যাগুলির কারণ হয় - বিশেষত যখন প্রকল্পটির একটি নতুন ক্লোন তৈরি করার চেষ্টা করা হয়। বিশেষত, সাধারণ সাবমডিউল ক্লোন কমান্ডগুলি চালনার ফলে সাবমডিউল ফোল্ডারটি খালি হয়ে যায়:

git submodule init
git submodule update
git pull --recurse-submodules

কেবল পুনরায় চালানোর চেষ্টা করে

git submodule add <Git repo> <submodule folder>

আউটপুটের ভিত্তিতে বিষয়টি কী ছিল তা স্পষ্ট ছিল:

The following path is ignored by one of your .gitignore files:
<submodule folder>
Use -f if you really want to add it.

যোগ করার পরিবর্তে -f, আমি .gitignore থেকে গিট সাবমডিউল ফোল্ডারটি সরিয়ে ফেললাম এবং সাব-মডিউল ক্লোন কমান্ডগুলি পুনরায় চালিত করে - যা এখন সফলভাবে ফোল্ডারটি তৈরি করেছে। আমি মনে করি যে সাবমডিউল ক্লোন কমান্ডগুলির মধ্যে একটিতে শ্রদ্ধার সাথে একটি ত্রুটি থাকতে পারে g গিটিগনোর কিন্তু সতর্ক করে দেয় না যে এটি একটি সাবমোডুলটি সেই অনুসারে এড়িয়ে চলেছে।

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