গিট সাবমডিউলের জন্য দূরবর্তী সংগ্রহস্থলটি কীভাবে পরিবর্তন করবেন?


722

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

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


8
দ্রষ্টব্য: গিট 2.25 (Q1 2020) একটি নতুন কমান্ড নিয়ে আসে ":git submodule set-url [--] <path> <newurl>
ভোনসি

উত্তর:


1009

.gitmodulesইউআরএল আপডেট করার জন্য আপনার কেবল ফাইল সম্পাদনা করতে সক্ষম হওয়া উচিত এবং তারপরে git submodule syncসুপারপোজেক্ট এবং আপনার কার্যকরী অনুলিপটিতে সেই পরিবর্তনটি প্রতিফলিত করতে চালানো উচিত।


22
এটি কমপক্ষে 1.7.1 বা 1.7.3 এ .git / কনফিগারেশন আপডেট করে বলে মনে হচ্ছে না।
ডেভিডটবার্নাল

6
এটি পূর্ববর্তী কমিটগুলির জন্য কী সাবমোডুল ইউআরএল কনফিগারেশন আপডেট করে? প্রাক্তন আমি যদি কোনও পুরানো প্রতিশ্রুতি পরীক্ষা করে দেখি তবে এটি কি নতুন সাবমডিউল ইউআরএলগুলিকে নির্দেশ করবে?
ম্যাক্সেমবিন

62
git submodule foreach -q git config remote.origin.url"আসল"
সাবমডিউল

9
এটি .git/configআমার জন্য গিট ২.১.০ ব্যবহার করে আপডেট হয়নি । আমার সাবমোডিয়াল রিমোটটি আপডেট করার জন্য চালনার আগে আমাকে .gitmodulesএবং .git/configম্যানুয়ালি উভয়ই git submodule sync --recursiveআপডেট করতে হয়েছিল।
ডেসিম

7
এটি মূল পদক্ষেপটি হারিয়ে যাচ্ছে বলে মনে হচ্ছে git submodule update --init --recursive --remoteযা প্রকৃতপক্ষে নতুন
রিমোটারে

154

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

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

স্ক্রিনশটগুলির জন্য দয়া করে ব্লগটি দেখুন: জিআইটি সাবমডিউলগুলি ইউআরএল / শাখা একই সংগ্রহস্থলের অন্যান্য ইউআরএল / শাখায় পরিবর্তন করা হচ্ছে


8
এটি কাজ করেছে তবে আমাকে রিমোটের পরিবর্তনগুলি মনে করতে হবে remember git add .gitmodules git commit -m "modified submodule URL" git push origin master
skulz00

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

5
শেষ কমান্ডটি কিছুটা চরম ... যদি আপনার ভিতরে সাবমডিউলগুলি সহ সাবমডিউল থাকে তবে এটি উপ-সাবমোডিয়ুলগুলি দূরবর্তীভাবে আপডেট করবে, যা আপনার প্রয়োজন সম্ভবত unlikely
ব্যাপটিস্ট উইচট

7
নোট করুন যে আপনার সাবমোডের নামটি আপনার সাবমোডিয়ালের নামের সাথে প্রতিস্থাপন করা দরকার!
শীতল শাহ

133

সাধারণ কথায়, আপনাকে কেবল .git মডুলগুলি ফাইল সম্পাদনা করতে হবে, তারপরে পুনরায় সংযোগ স্থাপন এবং আপডেট করতে হবে:

গিট কমান্ডের মাধ্যমে অথবা সরাসরি ফাইলটি সম্পাদনা করুন:

git config --file=.gitmodules -e

বা শুধু:

vim .gitmodules

তারপরে পুনরায় সিঙ্ক করুন এবং আপডেট করুন:

git submodule sync
git submodule update --init --recursive --remote

6
git submodule update --initআমার পক্ষে কাজ করেছে --remoteবলে মনে হচ্ছে এটি রিমোট রেপোর হেডের সাথে বাঁধা আছে।
চেইম এলিয়াহ

95

গিট 2.25 (কিউ 12020) এর সাহায্যে আপনি এটিকে সংশোধন করতে পারেন ।
" গিট সাবমডিউল ইউআরএল পরিবর্তিত হয়েছে " এবং নতুন কমান্ডটি দেখুন

git submodule set-url [--] <path> <newurl>

আসল উত্তর (মে ২০০৯, দশ বছর আগে)

প্রকৃতপক্ষে, ভূমিকা স্পষ্ট করার জন্য একটি প্যাচ এপ্রিল ২০০৯ এ জমা দেওয়া হয়েছেgitmodule

সুতরাং এখন গিটমডিউল ডকুমেন্টেশনে এখনও অন্তর্ভুক্ত নেই:

.gitmodulesGit-কনফিগ: ফাইল, একটি Git কাজ গাছের টপ লেভেল ডিরেক্টরিতে অবস্থিত, প্রয়োজনীয়তা -of linkgit মিলে একটি বাক্য গঠন সহ একটি পাঠ্য ফাইল 1
[নতুন]:
যেহেতু এই ফাইলটি গিট দ্বারা পরিচালিত হয়, এটি কোনও প্রকল্পের সাবমডিউলগুলির + রেকর্ডগুলি সন্ধান করে।
এই ফাইলটিতে সঞ্চিত তথ্য প্রকল্প কনফিগারেশন ফাইলে সঞ্চিত রেকর্ডের অনুমোদনের সংস্করণটিকে ইঙ্গিত হিসাবে ব্যবহার করা হয়।
ব্যবহারকারীর সুনির্দিষ্ট রেকর্ড পরিবর্তন (উদাহরণস্বরূপ নেটওয়ার্কিং পরিস্থিতির কারণে সাবমোডিয়াল ইউআরএলগুলির মধ্যে পার্থক্যের জন্য অ্যাকাউন্ট) কনফিগারেশন ফাইলে তৈরি করতে হবে, এবং রেকর্ড পরিবর্তনগুলি প্রচার করতে হবে (উদাহরণস্বরূপ + সাবমডিউল উত্সের স্থানান্তরের কারণে) এই ফাইলটিতে করা উচিত ।

এটি বেশ জিমের উত্তর নিশ্চিত করে ।


আপনি যদি এই গিট সাবমডিউল টিউটোরিয়ালটি অনুসরণ করেন তবে আপনি দেখতে পাবেন git submodule initযে .git / কনফিগারেশনে সাবমডিউল সংগ্রহস্থল URL গুলি যুক্ত করতে " " আপনার প্রয়োজন ।

ইউআরএল পরিবর্তিত হলে (বিশেষত সাবমোডিয়ুলের সংখ্যা গুরুত্বপূর্ণ হলে) কাজটি আরও সহজ করার জন্য অগস্ট ২০০৮ সালে " git submodule sync" যোগ করা হয়েছিল been
এই আদেশের সাথে সহযোগী স্ক্রিপ্টটি যথেষ্ট সোজা for

module_list "$@" |
while read mode sha1 stage path
do
    name=$(module_name "$path")
    url=$(git config -f .gitmodules --get submodule."$name".url)
    if test -e "$path"/.git
    then
    (
        unset GIT_DIR
        cd "$path"
        remote=$(get_default_remote)
        say "Synchronizing submodule url for '$name'"
        git config remote."$remote".url "$url"
    )
    fi
done

লক্ষ্যটি রয়ে গেছে: git config remote."$remote".url "$url"


আমি কেবল এই মেশিনে সাবমডিউলের URL পরিবর্তন করতে চেয়েছিলাম। প্যারেন্ট প্রজেক্ট থেকে আমি রেকর্ডটি সম্পাদন করে তা করতে পেরেছিলাম .git/config: git config submodule."$submodule_name".url "$new_url" যা এখানেও বর্ণিত
জোয়েটউইডল

Alচ্ছিক ডাবল ড্যাশগুলি কী করে git submodule set-url [--] <path> <newurl>?
জেভার্লিং

1
@jeverling তারা পরামিতি থেকে পৃথক অপশন সাহায্য: দেখুন stackoverflow.com/a/1192194/6309
VonC

1
মনে রাখবেন যে
ওবুন্টু

69

আমার জন্য কী কাজ করেছে (উইন্ডোজে, গিট সংস্করণ 1.8.3.msysgit.0 ব্যবহার করে):

  • নতুন সংগ্রহস্থলের পাথ সহ .gitmodules আপডেট করুন
  • ".Git / কনফিগারেশন" ফাইল থেকে সংশ্লিষ্ট লাইনটি সরান
  • ".Git / মডিউল / বাহ্যিক" ডিরেক্টরিতে সংশ্লিষ্ট ডিরেক্টরি মুছুন
  • চেক আউট সাবমডিউল ডিরেক্টরি নিজেই মুছুন (এটি প্রয়োজনীয় কিনা তা নিশ্চিত না)
  • চালান git submodule initএবংgit submodule update
  • নিশ্চিত করা আছে যে সাবমডিউলটি সঠিক প্রতিশ্রুতিতে রয়েছে এবং তা প্রতিশ্রুতিবদ্ধ, যেহেতু হ্যাশটি আলাদা হবে likely

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


2
এই জন্য আপনাকে অনেক ধন্যবাদ. আমি ইতিমধ্যে একটি চালানোর পরে এটিই আমার পক্ষে কাজ করেছে git submodule update। অন্যান্য উত্তর অনুসরণ করে ./git/modules/externalদির মধ্যে যা ছিল তা পরিবর্তিত হবে না তাই আপডেট করার চেষ্টা করার ফলে এটি এখনও ভুল url টানতে পারে।
এনটিএসকোবাল্ট

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

না, এটি প্রায় অবশ্যই জানেন না - আপনাকে প্রথমটির পরে আবার সমস্ত পদক্ষেপগুলি করতে হবে। এটি আমি পঠনবিদ্যার বর্তমান অবস্থাকে অনুধাবন করার জন্য কাজ করেছিলাম। আমি জানি না যেহেতু আমি এই লেখার পর থেকে পরিস্থিতিগুলির
বেন হাইমার

আপনি যদি পূর্ববর্তী সাবমডিউল ইতিহাসটি রাখার প্রয়োজন হয় তবে এটি সম্পর্কে আমি নিশ্চিত নই তবে @ মোটিশিওনর সত্যিই বিপজ্জনক বলে মনে হচ্ছে। আমার ক্ষেত্রে এটিই একমাত্র সমাধান যা কাজ করেছিল, আমি যা চেয়েছিলাম তা মূলত আমার নিজের কাঁটাচামচ দিয়ে মূল
উপকেন্দ্রটি

1
এই পদক্ষেপগুলি অনুসরণ করে দেখা গেছে যে "চেক আউট সাবমডিউল ডিরেক্টরি নিজেই মুছুন (এটি প্রয়োজনীয় কিনা তা নিশ্চিত নাও)" অন্যথায় আপনার মুখোমুখি হবে "মারাত্মক: গিট রিপোজিটরি নয়: ..." গিট
সাবমডিউল

10

আপনার .git / কনফিগার ফাইলটি সম্পাদনা করুন। উদাহরণ স্বরূপ; আপনার যদি একটি "সাধারণ" সাবমডিউল থাকে তবে আপনি সুপার-মডিউলটিতে এটি করতে পারেন:

git config submodule.common.url /data/my_local_common

আপনি যদি সুপার প্রকল্পে স্থায়ীভাবে না হয়ে এক সময় ব্যবহারের জন্য URL পরিবর্তন করার চেষ্টা করছেন তবে এটি কেবলমাত্র সেরা উপায় the যেমন আপনি ডিস্কে স্থানীয় কপিগুলি থেকে সাবমডিউলগুলি ক্লোন করতে চান।
অ্যান্ডি

4

git config --file=.gitmodules -e ডিফল্ট সম্পাদক খুলুন যেখানে আপনি পথ আপডেট করতে পারবেন

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