একটি গিট সাবমডিউলটির নতুন নাম দিন


156

কিছু সহজ উপায় একটি Git submodule ডিরেক্টরি (সমগ্র গতি মাধ্যমে চালু ছাড়া অন্য নামান্তর করতে হয় মোছার এটি এবং এটি একটি নতুন গন্তব্য নাম দিয়ে পুনরায় যোগ)।

এবং যখন আমরা এটিতে আছি, কেন এটি কেন আমি কেবল পিতামাতার ডিরেক্টরিতে নিম্নলিখিতটি করতে পারি না: git mv old-submodule-name new-submodule-name


6
.gitmodulesসাবমডিউলটি সরানোর সময় আপনাকে আর ম্যানুয়ালি আপডেট করার প্রয়োজন হবে না । দেখতে নীচের আমার উত্তর
VonC

@ ভনসির উত্তরটি আমার কাছে
মনোমুগ্ধের

গিট মডিউলগুলি খুব জটিল। npmকীভাবে সহজ কাজ করে তা দেখায়। একদিন ... সম্ভবত ... কেউ ... এটি আবার লিখবে ... এর মধ্যে ...
রোল্ফ

@ ভনসির উত্তরটি আজকের মতো পুরো গল্প নয়: এটি প্রকৃতপক্ষে পরিবর্তিত হবে it গিটমডিউলগুলি, তবে কেবল পথটির নাম পরিবর্তন করবে, মডিউলটির নাম নয়। আপনাকে সংশোধন করার জন্য .gitmodule এ একটি অতিরিক্ত সম্পাদনা এবং সম্পূর্ণ প্রক্রিয়াটি সম্পূর্ণ করতে একটি 'গিট সাবমডিউল সিঙ্ক' দরকার
জেরটিজ

@ জেরটিজ: সম্পত্তি [সাবমডিউল "নাম_ফ_সুবমডিউল"] একটি গিট অভ্যন্তরীণ নাম, নিজেকে বিভ্রান্ত না করার জন্য আপনি এটির নাম পরিবর্তন করতে পারেন তবে এটি কেবল একটি লেবেল।
এমকেস্পার

উত্তর:


101

আমি নিম্নলিখিত ওয়ার্কফ্লো কাজ করছে:

  • .Gitmodules আপডেট করুন
  • mv oldpath newpath
  • git rm oldpath
  • git add newpath
  • git submodule sync

দ্রষ্টব্য: জিআইটি-র 2018 সংস্করণগুলিতে এই পদ্ধতিটি সূচক এবং .gitmodules সঠিকভাবে আপডেট করে না।

টীকা: আপনি এখন শুধু করতে সক্ষম হতে পারে git mv oldpath newpathএখন, মধ্যে সরু আউট হিসাবে VonC এর উত্তর । (নিশ্চিত করুন আপনি গিটের সর্বশেষ সংস্করণটি ব্যবহার করছেন)


22
স্ব git add newpath
স্বতে

10
এই ধরনের একটি কার্যপ্রবাহের সাহায্যে আপনি কেবলমাত্র সাব-মডিউল হিসাবে যে সাব-ডিরেক্টরিটি ব্যবহার করেন সেগুলিতে কেবলমাত্র একটি সিমলিংক তৈরি করবেন। সিমলিংক বিশ্বব্যাপী সাবমডিউল কার্যকারিতার মাত্র একটি অংশ। এর অর্থ এই যে আপনি যখন রেপো নামক সাবমডিউলগুলি ব্যবহার করেন এমন রেপো ক্লোন করলে আপনি নিম্নলিখিত ত্রুটিটি দিয়ে শেষ করতে পারেন: 'আপনার-ওল্ডপাথ'-এর পথের জন্য গিটমডিউলগুলিতে কোনও সাবমোডিয়াল ম্যাপিং পাওয়া যায় নি (আপনি * গিটার আরএম পুরাতনপথ ) সরানোর পরে আপনার উচিত ব্যবহার Git submodule অ্যাড রেপো-URL টি newpath পরিবর্তে "Git অ্যাড newpath * এটি করা হলে, Git অবস্থা ভালো কিছু প্রদর্শন করা হবে: নতুন নামকরণ। oldpath -> newpath
বারট্রান্ড

5
এই সমাধানগুলি আমার পক্ষে কাজ করে না কারণ গিট অ্যাড কমান্ড ব্যবহার করার সময় সাবমোডিয়ালটি একটি সাধারণ ডিরেক্টরি হিসাবে প্রজেক্টে অন্তর্ভুক্ত করা হয়েছিল সাবডমডিউল হিসাবে নয়। চেষ্টা করুন $ এমভি সাবমডিউল-ওল্ডপথ ~ / অন্য কোনও অবস্থান $ গিট আরএম সাবমডিউল-ওল্ডপাথ $ গিট সাবমোডুল সাবমডিউল-রিপোজিটরি-ইউআরএল সাবমডিউল-নিউপাথ বিসিচেট.
মাহমুদ আদম

3
যদি আপনার কাজের গাছের সমস্যা হয় তবে আপনি .git/modules/SUBMODULE/configফাইলটিও সম্পাদনা করতে পারবেন যেমন worktreeডান নির্দেশিকাটির দিকে আবার নির্দেশ করে।
ভিনসেন্ট কেটেলারস 14

3
এটি আমার পক্ষে গিট দিয়ে কাজ করেনি 2.13.1। তবে কেবল git mv old newকবজির মতো কাজ করা। পরিবর্তনগুলি সম্পূর্ণ করতে আমার কেবল গিট কমিট করা দরকার।
ব্যবহারকারী 23

226

Git1.8.5 (অক্টোবর 2013) প্রক্রিয়াটি সহজসাধ্য করা উচিত । কেবল একটি করুন:

git mv A B

" git mv A B", যখন একটি সাবমডিউলটি সরানো হয় তখন তার কার্যকরী গাছটিকে স্থানান্তরিত করতে এবং ফাইলের পাথগুলিকে সামঞ্জস্য করতেA শেখানো হয়েছিল ।.gitmodules


কমিট 0656781fadca1 এ আরও দেখুন :

বর্তমানে git mvএকটি সাবমডিউলে " " ব্যবহার করে সুপার মডেলের সাবমডিউলের কাজের গাছটিকে সরানো হয়। তবে সাবমোডিয়ুলের পাথের বিন্যাসটি অদৃশ্য হয়ে .gitmodulesগেছে, যা এখন কাজের গাছের সাথে অসঙ্গতিপূর্ণ এবং গিট কমান্ডগুলি তৈরি করে যা যথাযথভাবে path -> name mapping(যেমন statusএবং diff) অদ্ভুত আচরণ করে।

git mvএখানে " " সাবমডিউলের কার্যক্ষেত্রটি কেবল স্থানান্তরিত না submodule.<submodule name>.pathকরে .gitmodulesফাইল এবং সেটিংস উভয় পর্যায় থেকে আপডেট করে " " এখানে সহায়তা করুন।
কোনও .gitmodulesফাইল পাওয়া না গেলে এটি ঘটে না এবং যখন এই সাবমোডুলের কোনও বিভাগ না থাকে কেবল তখনই একটি সতর্কতা জারি করে। এটি কারণ .gitmodulesফাইলটি ছাড়াই ব্যবহারকারী কেবল প্লেইন গিটলিংকগুলি ব্যবহার করতে পারে বা "গিট এমভি" কমান্ড জারির আগেই হাতের দ্বারা প্যাথ সেটিং আপডেট করেছে (এই ক্ষেত্রে সতর্কতা তাকে স্মরণ করিয়ে দেয় যে mvতার জন্য এটি করেছিল)।
কেবলমাত্র যখন .gitmodulesমার্জ দ্বন্দ্বগুলি পাওয়া যায় এবং mvকমান্ডটি ব্যর্থ হয় এবং ব্যবহারকারীকে আবার চেষ্টা করার আগে সংঘাতের সমাধান করতে বলে।


গিট ২.৯ (জুন git mv২০১ )) উপ-মডুলের জন্য উন্নতি করবে :

দেখুন a127331 কমিট (19 এপ্রিল 2016) দ্বারা স্টিফান Beller ( stefanbeller)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 9cb50a3 , 29 এপ্রিল 2016)

mv: নেস্টেড সাবমডিউলগুলি চলার অনুমতি দিন

" git mv old new" একটি সাবমডিউলের জন্য পথটি সামঞ্জস্য করে নি যা ভিতরে ভিতরে উপ-ডিরেক্টরি হিসাবে বাস করেold/ সঠিকভাবে ডিরেক্টরি হিসাবে সঠিকভাবে থাকে।

সাবমোডিয়ুলগুলিকে গিট ডিরেক্টরিতে তাদের লিঙ্কের পাশাপাশি .gitmodulesফাইলের আপডেটগুলি আপডেট করতে হবে।


স্বরে নোট করুন: 1.8.4 এ চেষ্টা করুন এবং আপনার কাছে থাকবে fatal: source directory is empty, source=my_source, destination=my_destination। 1.8.5 এর স্থিতিশীল প্রকাশ হলে আবার এটি চেষ্টা করবে।
চেকসাম

@ চেকসাম তবে 1.8.5 এর একটি স্থিতিশীল রিলিজ রয়েছে, কমপক্ষে কিছু ... ঘন্টা;) github.com/git/git/relayss/tag/v1.8.5
ভোনসি

আমাকে উত্স কোড থেকে গিট সংস্করণ 1.8.5.GIT তৈরি করতে হয়েছিল কারণ উবুন্টু সংগ্রহস্থলে Git v.1.7.5 রয়েছে। উত্স কোড থেকে গিট কীভাবে তৈরি করবেন
মাকসিম দিমিত্রিভ

2
@MaksimDmitriev কিন্তু একটি পিপিএ (ব্যক্তিগত প্যাকেজ আর্কাইভ) যে আমি উল্লেখ সম্পর্কে কি stackoverflow.com/a/20918469/6309 ?
ভনসি 17'14

1
গিট এমভি কেবল আমার মেশিনে এই উদ্দেশ্যে কাজ করে না।
আলেকজান্ডার ডায়াগিলেভ

13

সঠিক সমাধানটি হ'ল:

mv oldpath ~/another-location
git rm oldpath
git submodule add submodule-repository-URL newpath

সূত্র: গিট সাবমডিউলটির নতুন নামকরণ করুন


2
আপনি কি এই অবস্থান থেকে শব্দটির জন্য এই শব্দটি টানলেন? bcachet.github.io/de વિકાસment/2012/05/25/rename-git-submodule যদি তা হয় তবে দয়া করে আপনার উত্তরে সেই সাইটটির জন্য অ্যাট্রিবিউশন দেওয়ার বিষয়টি নিশ্চিত করুন।
জর্জ স্টকার 16

11

আমি উপরের প্রস্তাবিত কয়েকটি চেষ্টা করেছি। আমি দৌড়াচ্ছি:

$ git --version
git version 1.8.4

আমি খুঁজে পেলাম যে সাবমডিউলটি ডি-ইন করা, ডিরেক্টরিটি সরিয়ে এবং একটি নতুন সাবমডিউল তৈরি করা ভাল।

git submodule deinit <submodule name>

git rm <submodule folder name>

git submodule add <address to remote git repo> <new folder name>

কমপক্ষে এটিই আমার পক্ষে সবচেয়ে ভাল কাজ করেছে। YMMV!


7

এটির নামকরণ করা সম্ভব নয়, সুতরাং আপনাকে প্রথমে এটি মুছে ফেলা হবে ( deinit) এবং এটি আবার যুক্ত করতে হবে।

সুতরাং এটি অপসারণের পরে:

git submodule deinit <path>
git rm --cached <path>

আপনি এটিতে ডাবল চেক এবং এর উল্লেখগুলি মুছে ফেলতে পারেন:

  • .gitmodules
  • .git/config
  • .git/modules/<name>(ব্যাকআপ তৈরি করা ভাল) থেকে রেফারেন্স ফোল্ডারটি সরিয়ে ফেলুন , কারণ প্রতিটি ফোল্ডারে এমন configফাইল রয়েছে যেখানে এটি তার রেফারেন্সটিকে এতে রাখেworktree

তারপরে আপনার রেপোতে যে কোনও পরিবর্তন সম্পাদন করে আপনার পরিবর্তনগুলি পর্যায়ক্রমে:

git commit -am 'Removing submodule.'

এবং আপনার যদি কোনও অসামান্য সমস্যা না থেকে ডাবল চেক করুন:

git submodule update
git submodule sync
git submodule status

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

git submodule add --name <custom_name> git@github.com:foo/bar.git <my/path>

এটি আজকের দিনেও রয়েছে
আলেক্সি

প্রশ্নগুলির শিরোনাম একটি ভুল ধারণা, এটি পথের সাথে সম্পর্কিত, নাম নয়
ম্যাক্স রবার্টজ

3

সাবমডিউলটির নতুন নামকরণের জন্য .gitmodules ফাইলটি সম্পাদনা করুন এবং তারপরে সাবমড্যুল ডিরেক্টরিটি নতুন নামকরণ করুন।

আমি মনে করি এর git submodule syncপরে আপনার কিছু করার দরকার হতে পারে তবে আমি এখনই চেক করার মতো অবস্থানে নেই।


এর ফলে নতুন সাবমডিউলটির নাম নতুন প্রতিশ্রুতি হিসাবে দেখাবে, নাম পরিবর্তন হিসাবে নয়। তবে সম্ভবত এভাবেই চলতে হবে?
লারস ট্যাকম্যান

1
@ লার্স: পুরানো সাবমডিউল ডিরেক্টরিটিও মুছে ফেলতে ভুলবেন না!
ক্যাসাবেল

3

ম্যাকোস : যখন আমি সাব মড্যুল ফোল্ডারটিকে Commonছোট হাতের অক্ষরে পরিবর্তন করতে ভনসি সমাধানটি ব্যবহার করতে চাই :

git mv Common common

আমি পাই

মারাত্মক: 'সাধারণ' নামকরণ ব্যর্থ হয়েছে: অবৈধ যুক্তি

সমাধান - কিছু অস্থায়ী ফোল্ডারের নাম ব্যবহার করুন এবং দু'বার সরান:

git mv Common commontemp
git mv commontemp common

এখানেই শেষ :)

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