আমি কীভাবে অন্য গেমার সাথে গিট সাবমডিউল প্রতিস্থাপন করব?


98

আমি কীভাবে গিট সাবমডিউলকে আলাদা গিট রেপো দিয়ে প্রতিস্থাপন করব?

বিশেষত, আমার একটি সাবমডিউল রয়েছে:

  • ./ExternalFrameworks/TestFrameworkগিট রেপোতে সেই পয়েন্টে অবস্থিতgit@github.com:userA/TestFramework.git
  • আমি এখন এটি নির্দেশ করতে চাই git@github.com:userB/TestFramework.git

সমস্যাটি হ'ল আমি যখন এখানে বর্ণিত পদ্ধতি সহ সাবমডিউলটি মুছব তখন কমান্ডটি ব্যবহার করে এটি পুনরায় যুক্ত করুন

git submodule add git@github.com:userB/TestFramework.git

আমি এই ত্রুটি পেয়েছি:

A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
  origin    git@github.com:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
  git@github.com:userB/TestFramework.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.

উত্তর:


125

যদি সাবমডিউলের অবস্থান (ইউআরএল) পরিবর্তিত হয়েছে, তবে আপনি সহজভাবে এটি করতে পারেন:

  1. .gitmoduleনতুন URL টি ব্যবহার করতে আপনার ফাইলটি পরিবর্তন করুন Mod
  2. রেপোতে সাবমডিউল ফোল্ডারটি মুছুন rm -rf .git/modules/<submodule>
  3. ওয়ার্কিং ডিরেক্টরিতে সাবমডিউল ফোল্ডারটি মুছুন rm -rf <submodule>
  4. চালান git submodule sync
  5. চালান git submodule update

আরও সম্পূর্ণ তথ্য অন্য কোথাও পাওয়া যাবে:


4
আরও লক্ষণীয়: যখন অন্য ব্যবহারকারী (যিনি ইতিমধ্যে সাবমডিউলটি আবিষ্কার করেছিলেন) আপনার আপডেটটি পান, নতুন সাবমোডিয়ুল তাদের জন্য কাজ করার আগে তাদের "গিট সাবমডিউল সিঙ্ক" করতে হবে।
জোসেফ.হাইনলাইন

4
এটি আমার পক্ষে কার্যকর হয়নি। আমার সাবমডিউলটি এর পরেও পুরানো ইউআরএলটির দিকে ইঙ্গিত করেছে। কোন ধারণা কেন?
আরনে

34
@ আর্ন সম্ভবত আপনার সাবমডিউলটি কখনই সঠিকভাবে শুরু হয়নি। rm -rf .git/modules/<submodule>এটি আমার পক্ষে কাজ করার আগে আমার ছিল ।
ডেভিড ব্রাউন

যদিও করছেন @DavidBraun আমি @Arne যেমন একই সমস্যা আছে git submodule syncপরে rm -rf .git/modules/<submodule>দেয় fatal: Not a git repository: ../.git/modules/<submodule>। কোন টিপস? git submodule add https://<submodule-url>গিট ডকস অনুসারে আমি প্রাথমিকভাবে
সাবমডিউলটি তৈরি করেছি

4
এর পরে আমাকে মডিউলটির ডিরেক্টরিতে সিডি করতে হয়েছিল, আমি যে শাখায় চাইছি তা গিট চেকআউট করতে হবে, তারপরে গিট টানতে হবে।
নিকোলাস রাউল

34

প্রথমে এখানে উল্লিখিত পদ্ধতিটি সহ বর্তমান সাবমডিউলটি মুছুন , যা আমি সুবিধার জন্য অন্তর্ভুক্ত করছি:

  • .gitmodulesফাইল থেকে প্রাসঙ্গিক বিভাগ মুছুন
  • থেকে প্রাসঙ্গিক বিভাগটি মুছুন .git/config
  • চালান git rm --cached path_to_submodule(কোনও পিছনে স্ল্যাশ নেই)
  • এখনই অচিহ্নবিহীন সাবমডিউল ফাইলগুলি প্রতিশ্রুতিবদ্ধ এবং মুছুন

এবার --nameপতাকা সহ নতুন সাবমডিউল যুক্ত করুন । এটি .git/confighistorতিহাসিকভাবে উপস্থিত সাব-মডুলের সাথে ডিকনফ্লিক্ট করতে সাব-মডুলের জন্য রেফারেন্স দেওয়ার জন্য গিটকে একটি বিকল্প নাম দেবে , যা আপনি এখনও আপনার পূর্বের ইতিহাসে কাজ করতে চান।

সুতরাং টাইপ করুন:

git submodule add --name UpdatedTestFramework git@github.com:userB/TestFramework.git

এবং আপনি প্রত্যাশার পথে সাবমোডুলটি লোড পাবেন।


4
এই পথে কাজ করার সময় এটি টিমের পদ্ধতির মতো প্রায় পরিষ্কার নয়।
joseph.hainline

4
এটি আমার পক্ষে কাজ করেছিল তবে আমাকে মুছতেও হয়েছিল .git/modules/<path_to_submodule>
নট

4
রেফারেন্স প্রশংসা করুন --name। আমি এর আশেপাশের সমস্যাগুলি সম্পর্কে অবগত ছিলাম না এবং আমি এই বিকল্পটি ব্যবহার না করা অবধি সাবমডিউলটি প্রতিস্থাপন করতে সক্ষম হইনি (আপনার উত্তরের জন্য ধন্যবাদ))
aknuds1

এটি আমার জন্য কাজ করা একমাত্র পদ্ধতি হ'ল এটি তাত্পর্যপূর্ণ, তবে আমি একই ডিরেক্টরি নামটি রাখতে চাই। এটি সঠিক পথটি চেকআউট করেছিল এবং মডিউলটির নামটি পছন্দসই নাম তৈরি করেছে তবে কার্যকারী ডিরেক্টরি নামটি ছিল নতুন রেপো নাম। সুতরাং আপনি যদি একই নামটি চান তবে আপনার অবশ্যই ইউআরএল শেষে এটি নির্দিষ্ট করতে হবে: git submodule add --name old-name-to-keep git@github.com:userB/new-repository.git old-name-to-keep
rgb

9

এই কমান্ডগুলি স্থানীয় সংগ্রহস্থলের কোনও ফাইল পরিবর্তন না করে কমান্ড প্রম্পটে কাজ করবে।

git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Dev
git submodule sync
git submodule update --init --recursive --remote

5

আমার জন্য যা স্থির হয়েছে তা আপনার গিট রেপো (সাবমডিউল নয়) এর মূলের মধ্যে ছিল, চালান

rm -rf .git/modules/yourmodule

তারপরে আপনার স্বাভাবিক হিসাবে যোগ করতে সক্ষম হওয়া উচিত।


3

সবচেয়ে সহজ উপায় যেটি আমি পেয়েছি তা হ'ল:

git rm -rf [submodule_dir]
git submodule add --name new_[submodule_name] [new_submodule_url] [submodule_dir]

আমার নিজের .gitmodulesহাতে নিজেই সংশোধন করা ধারণাটি পছন্দ হয়নি । আমি এটি সম্পর্কে একটি সামান্য ব্লগপোস্টও লিখেছি ।


2

আপনি যদি কেবল এই ক্লোনটির জন্য দূরবর্তী URL পরিবর্তন করতে চান :

git config submodule."$submodule_name".url "$new_url"

এটি .gitmodulesপ্যারেন্ট প্রোজেক্টের ফাইলটিকে প্রভাবিত করবে না , তাই এটি অন্য বিকাশকারীদের কাছে প্রচার করা হবে না।

এটি এখানে "ব্যবহারকারী নির্দিষ্ট রেকর্ড পরিবর্তন" হিসাবে বর্ণনা করা হয়েছে

না চালানোরgit submodule syncযেমন ডিফল্ট URL এ আবার পুনরায় সেট করবে।

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