গিট সাবমডিউল হিসাবে সাধারণ কোড যুক্ত করার বিষয়টি: "সূচীতে ইতিমধ্যে বিদ্যমান"


225

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

ফোল্ডারটি নির্দিষ্ট করতে আমি গিট সাবমডিউল অ্যাডের পাথ বিকল্পটি ব্যবহার করেছি:

git submodule add url_to_repo projectfolder

তবে ত্রুটিটি পেয়েছে:

'projectfolder' already exists in the index"

এটি আমার সংগ্রহস্থলের পছন্দসই কাঠামো:

repo
|-- projectfolder
    |-- folder with common code

গিট সাবমডিউলটি সরাসরি রেপোতে বা সেখানে একটি নতুন ফোল্ডারে যুক্ত করা সম্ভব, তবে প্রজেক্টফোল্ডারে নয়। সমস্যাটি হ'ল এটি প্রকৃতপক্ষে প্রজেক্টফোল্ডারে থাকা দরকার .. আমি এটি সম্পর্কে কী করতে পারি এবং গিট সাবমডুল যুক্ত করার পথ বিকল্প সম্পর্কে আমি কী ভুল বুঝেছি?


আপনি কি করলে কি পাবেন git ls-files --stage projectfolder?
লংগায়ার

আমি 100644. সঙ্গে সমস্ত সামগ্রী শুরুর সঙ্গে সম্বন্ধে জানতে--
Vanja


8
আমার জন্য git rmবিদ্যমান ফোল্ডারে সাহায্য করার জন্য: |
রজারডপ্যাক

উত্তর:


343

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

এই ত্রুটির অর্থ projectfolderইতিমধ্যে মঞ্চস্থ হয়েছে ("সূচীতে ইতিমধ্যে বিদ্যমান")। এখানে কী চলছে তা জানতে, ফোল্ডারের নীচে সূচকের সমস্ত কিছু তালিকাভুক্ত করার চেষ্টা করুন:

git ls-files --stage projectfolder

সেই আউটপুটটির প্রথম কলাম আপনাকে জানাবে যে সূচকটিতে কোন ধরণের অবজেক্ট projectfolder। (এগুলি ইউনিক্স ফাইলমোডগুলির মতো দেখায় তবে গিটে বিশেষ অর্থ রয়েছে))

আমি সন্দেহ করি যে আপনি এমন কিছু দেখতে পাবেন:

160000 d00cf29f23627fc54eb992dde6a79112677cd86c 0   projectfolder

(অর্থাত্ একটি পংক্তির শুরু 160000), সেক্ষেত্রে projectfolderইতিমধ্যে সংগ্রহস্থলটিকে "গিটলিংক" হিসাবে যুক্ত করা হয়েছে। যদি এটির আউটপুটে উপস্থিত না হয় git submoduleএবং আপনি এটি উপ-মডেল হিসাবে পুনরায় যুক্ত করতে চান তবে আপনি এটি করতে পারেন:

git rm --cached projectfolder

... এটি আনস্টেজ করার জন্য এবং তারপরে:

git submodule add url_to_repo projectfolder

... সাবমডিউল হিসাবে সংগ্রহস্থল যুক্ত করতে।

তবে এটিও সম্ভব যে আপনি তালিকাভুক্ত অনেকগুলি ব্লব দেখতে পাবেন (ফাইলের মোড 100644এবং 100755), যা আমার কাছে পরামর্শ দেবে যে আপনি projectfolderনতুন সংগ্রহস্থলটি অনুলিপি করার আগে ফাইলগুলি যথাযথভাবে আনস্টেজ করেন নি। যদি এটি হয় তবে এই সমস্ত ফাইল আনস্টেজ করার জন্য আপনি নিম্নলিখিতটি করতে পারেন:

git rm -r --cached projectfolder

... এবং তারপরে সাবমডিউলটি যুক্ত করুন:

git submodule add url_to_repo projectfolder

12
আপনার বিস্তারিত উত্তরের জন্য মার্ক ধন্যবাদ। আমি একটি "গিট আরএম -আর - ক্যাচড প্রকল্প ফোল্ডার" করেছিলাম এবং আবার সাবমডিউলে পৌঁছানোর চেষ্টা করেছি। তবে এবার আমি ত্রুটিটি পেয়েছি rmessage "'প্রজেক্টফোল্ডার' ইতিমধ্যে বিদ্যমান এবং এটি কোনও বৈধ গিট রেপো নয়"।
ভানজা

3
@ ভানজা: এটি নির্দেশ করে যে projectfolderকোনও .gitডিরেক্টরি নেই। এটি আপনার প্রশ্নের থেকে মনে হয়েছিল যেন আপনি projectfolderঅন্য কোথাও নতুন সংগ্রহশালা তৈরি করে এটিকে অনুলিপি করে রেখেছিলেন, তবে স্পষ্টত তেমনটি ঘটেনি। আপনাকে বিদ্যমান পদ্ধতিটি অন্যদিকে সরানো দরকার projectfolder, এবং তারপরে .gitসাব-মডিউল হিসাবে যুক্ত করার আগে নতুন সংগ্রহস্থলটি (এর ডিরেক্টরিতে সম্পূর্ণ ) কপি করা উচিত। অথবা, আপনি যদি ইতিমধ্যে এটি দ্বারা উপস্থাপিত ভান্ডারগুলিতে ধাক্কা দিয়ে থাকেন তবে আপনি url_to_repoকেবল projectfolderURL এর বাইরে চলে যেতে পারেন এবং তারপরে সেই ইউআরএল থেকে উপ-মডেল যুক্ত করতে পারেন।
লংগায়ার

সর্বত্র দুর্দান্ত উত্তর +1
অ্যাবড

এটি আমাকে এক টন সহায়তা করেছে। ধন্যবাদ!
ইভান মোরান

1
আমি এটিই করেছি, যা 3 ধাপের প্রক্রিয়া পদক্ষেপ 1: গিট আরএম -r - ক্যাচড এসসিআর / পরীক্ষা / সংস্থান /, পদক্ষেপ 2: বিদ্যমান উত্স ডিরেক্টরিটি অন্য কোনও জায়গায় সরিয়ে দিয়েছে, পদক্ষেপ 3: গিট সাবমোডুল যুক্ত url_to_repo src / পরীক্ষা / সংস্থানসমূহ
বিক্রমভি

52

সাবমডিউলটি ম্যানুয়ালি অপসারণ করতে অনেকগুলি পদক্ষেপ জড়িত এবং এটি আমার জন্য কাজ করেছে।

ধরে নিচ্ছেন আপনি প্রকল্পের মূল ডিরেক্টরিতে রয়েছেন এবং নমুনা গিট মডিউলটির নাম "সি 3-প্রো-আইওএস-ফ্রেমওয়ার্ক"

সাবমডিউলে যুক্ত ফাইলগুলি সরান

rm -rf .git/modules/c3-pro-ios-framework/

কনফিগারেশনে সাবমডিউলের কোনও রেফারেন্স সরান

vim .git/config

এখানে চিত্র বর্ণনা লিখুন

.Gitmodules সরান

rm -rf .gitmodules

"গিট" ছাড়াই এটি ক্যাশে থেকে সরান

git rm --cached c3-pro-ios-framework

সাবমডিউল যুক্ত করুন

git submodule add https://github.com/chb/c3-pro-ios-framework.git

2
দুর্দান্ত পোস্ট, দুর্দান্ত কাজ করে। আপনি এটি ভাগ করে নেওয়ার জন্য দুর্দান্ত। সত্যিই চমৎকার.
gabn88

1
আমি git submoduleঅপসারণের পরে এবং যুক্ত করার আগে সাবমোডুলগুলি তালিকাভুক্ত করার চেষ্টা করেছি এবং এটি আমাকে একটি ত্রুটি দিয়েছে, অপসারণের প্রতিশ্রুতি এটিকে যত্ন নিয়েছিল।
মেহমেট

1
আমি পারলে এই 50x upvote করব; তুমি শুধু আমার দিন বাঁচিয়েছ!
সেনসেই জেমস

touch .gitmodules(কাজের গাছের মধ্যে থাকা দরকার, তাই এটি অপসারণে সহায়তা করে। তবে আপনাকে এটি আবার যুক্ত করতে হবে)। দুর্দান্ত পোস্ট বিটিডব্লিউ। এখানে যে জিনিস কাজ করেছে।
টর্েক্সড

এটি সেই .gitডিরেক্টরি ছিল যা এখনও আমার জন্য অবশিষ্টাংশ ছিল। এটি দুর্দান্ত কাজ করেছে। ধন্যবাদ.
কেভিন অ্যান্ডারসন

44

গিট পাথের জন্য আপনাকে প্রথমে আপনার সাবমডিউল গিট সংগ্রহস্থল (এই ক্ষেত্রে প্রজেক্টফোল্ডার) সরিয়ে ফেলতে হবে।

rm -rf projectfolder

git rm -r projectfolder

এবং তারপরে সাবমডিউল যুক্ত করুন

git submodule add <git_submodule_repository> projectfolder

4
git submodule add --force <git_submodule_repository>
টেনফ্রো

1
ধন্যবাদ !! আমাকে প্রকল্পের ফোল্ডারে যুক্ত করতে হবে না, আমি কেবল সেখান থেকে উপ-ডিরেক্টরি এবং ক্লোনগুলিতে পরিবর্তিত হয়েছি।
টনি ফ্রেজার

32

আমারও একই সমস্যা ছিল এবং কয়েক ঘন্টা দেখার পরে উত্তরটি পাওয়া গেল।

আমি যে ত্রুটিটি পাচ্ছিলাম তা অন্যরকম ছিল: <path> already exists and is not a valid git repo(এবং এসইও মানের জন্য এখানে যুক্ত করা হয়েছে)

সমাধানটি হল এমন ডিরেক্টরি তৈরি করা নয় যা সাবমডিউলটি রাখবে। git submodule addকমান্ডের অংশ হিসাবে ডিরেক্টরিটি তৈরি করা হবে ।

এছাড়াও, যুক্তিটি আপনার ওয়ার্কিং ডিরেক্টরি নয়, প্যারেন্ট-রেপো রুটের সাথে সম্পর্কিত বলে আশা করা হচ্ছে, সুতরাং এটির জন্য নজর রাখুন।

উপরের উদাহরণের সমাধান:

  1. ইতিমধ্যে আপনার পিতামাতার রেপো ক্লোন করা ঠিক আছে।
  2. common_codeডিরেক্টরিটি বিদ্যমান নেই তা নিশ্চিত করুন ।
  3. cd Repo
  4. git submodule add git://url_to_repo projectfolder/common_code/( প্রয়োজনীয় ট্রেলিং স্ল্যাশ নোট করুন ))
  5. বিবেক পুনরুদ্ধার করা হয়েছে।

আমি আশা করি এটি কাউকে সহায়তা করবে, কারণ এই সম্পর্কে অন্য কোথাও খুব কম তথ্য পাওয়া যায়।


1
চতুর্থ ধাপটি শুরু হওয়া উচিত git submodule add, এবং পিছনের স্ল্যাশ প্রয়োজন হয় না।
nullability

টাইপো স্থির করল। আমি এটির প্রতিক্রিয়া জানিয়েছি এবং পিছনে থাকা স্ল্যাশটি আমার জন্য একটি পার্থক্য তৈরি করেছে। আমি zsh ব্যবহার করছি যদি এর কোনও প্রভাব থাকে।
সংজ্ঞায়িত

এটি আমার সমস্যার সমাধান করেছে (অ্যাড সাব মডুল কমন্যান্ড দিয়ে ডিরেক্টরি তৈরি করা), আপনাকে ধন্যবাদ!
জ্যাকজয়ে

18

xগিট নিয়ন্ত্রণের অধীনে যদি কোনও ফোল্ডার উপস্থিত থাকে তবে আপনি একই নামের সাবমডিউল যুক্ত করতে চান, আপনার ফোল্ডারটি মুছে ফেলাx উচিত এবং প্রথমে এটি প্রতিশ্রুতিবদ্ধ

@ উজ্জ্বল-সিংহ আপডেট করেছেন:

সংগঠনের প্রয়োজন নেই, যথেষ্ট নাটক মঞ্চস্থ .. git add/git rm -r


প্রতিশ্রুতিবদ্ধতা আমি কি মিস করেছি। সংক্ষিপ্ত উত্তর, তবে একটি সঠিক!
কিউকিউই

3
প্রতিশ্রুতিবদ্ধকরণের দরকার নেই, পর্যাপ্ত মঞ্চায়ন .. git add/gir rm -r
উজ্জ্বল সিং

3

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

আপনি এই ফোল্ডারে কোনও সংগ্রহস্থল তৈরি করতে পারবেন না যা ইতিমধ্যে মূল ভান্ডারে ট্র্যাক করা আছে।

উদাহরণস্বরূপ: আপনার কাছে একটি থিম ফোল্ডার রয়েছে AwesomeThemeএটি একটি উত্সর্গীকৃত সংগ্রহস্থল, আপনি এটিকে সরাসরি আপনার মূল সংগ্রহস্থলের মধ্যে ফেলে দেওয়ার চেষ্টা করেন git submodule add sites/themesএবং আপনি এটি পান "AwesomeTheme" index already exists

আপনাকে কেবল এটি নিশ্চিত করতে হবে যে sites/themes/AwesomeThemeমূল সংগ্রহস্থলের সংস্করণ ট্র্যাকিংয়ের মধ্যে ইতিমধ্যে কোনওটি নেই যাতে সেখানে সাবমডিউল তৈরি করা যায়।

সুতরাং ঠিক করার জন্য, আপনার মূল ভান্ডারে যদি আপনার খালি sites/theme/AwesomeThemeডিরেক্টরি থাকে তবে এটি মুছে ফেলুন। আপনি যদি ইতিমধ্যে sites/theme/AwesomeThemeআপনার মূল সংগ্রহস্থলের ডিরেক্টরিটি নিয়ে কমিট করে থাকেন তবে আপনাকে এর সমস্ত কমান্ডের মতো কমান্ড দিয়ে এটি মুছে ফেলতে হবে:

git filter-branch --index-filter \
              'git rm -r --cached --ignore-unmatch sites/theme/AwesomeTheme'     HEAD

এখন আপনি চালাতে পারেন git submodule add git@AwesomeTheme.repowhateverurlthing sites/themes/AwesomeTheme

যেহেতু মূল সংগ্রহস্থলটি এর আগে কখনও কিছু দেখেনি (ওরফে ইনডেক্স'ড) sites/themes/AwesomeTheme, এটি এখন এটি তৈরি করতে পারে।


1

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

একটি খালি রেপো টাইপ:

git submodule add url_to_repo projectfolder/common_code

এটি পছন্দসই ফোল্ডার কাঠামো তৈরি করবে:

repo
|-- projectfolder
    |-- common_code

এখন আরও সাবমডিউল যুক্ত করা সম্ভব এবং প্রকল্প কোডটি প্রোজেক্টফোল্ডারে যুক্ত করা যেতে পারে।

আমি কেন এখনও এটি বলতে পারি না কেন এটি এইভাবে কাজ করেছিল এবং অন্যটি নয়।


0

এটি কোনও দরকারী কিনা তা জানেন না, যদিও ইন্টেলিজিজ ১৫ এর মধ্যে থেকে আমার ফাইলগুলি প্রতিশ্রুতি দেওয়ার চেষ্টা করার সময় আমার একই সমস্যা ছিল the সমস্যা সমাধান. কোনও অভিনব গিট কমান্ড জারি করার দরকার নেই। কারও ক্ষেত্রে একই সমস্যা রয়েছে কেবল তা উল্লেখ করা।


0

সংগ্রহস্থল ফোল্ডারে যান। .Gitmodules থেকে প্রাসঙ্গিক সাবমডিউলগুলি মুছুন। লুকানো ফাইলগুলি দেখান নির্বাচন করুন। .Git ফোল্ডারে যান, মডিউল ফোল্ডার এবং কনফিগার থেকে সাবমডিউলগুলি মুছুন।


0

.Git ফাইলটি যদি লক্ষ্য পথে অনুপস্থিত থাকে তবে এটি ঘটে। মৃত্যুদন্ড কার্যকর করার পরে এটি আমার কাছে খুশি git clean -f -d

আমাকে বার্তায় প্রদর্শিত সমস্ত টার্গেট ফোল্ডার মুছে ফেলতে হয়েছিল এবং তারপরে এক্সিকিউট করা হয়েছিল git submodule update --remote


-18

আপনার গিট দির, মনে করুন আপনি সমস্ত পরিবর্তন সিঙ্ক করেছেন।

rm -rf .git 

rm -rf .gitmodules

তারপরে:

git init
git submodule add url_to_repo projectfolder

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