গিট সাবমডিউল হেড 'রেফারেন্স গাছ নয়' ত্রুটি


305

আমার একটি সাবমডিউল সহ একটি প্রকল্প রয়েছে যা একটি অবৈধ অঙ্গীকারের দিকে ইঙ্গিত করছে: সাবমডিউল কমিট স্থানীয় থাকবে এবং যখন আমি অন্য রেপো থেকে এটি আনার চেষ্টা করি তখন:

$ git submodule update
fatal: reference is not a tree: 2d7cfbd09fc96c04c4c41148d44ed7778add6b43
Unable to checkout '2d7cfbd09fc96c04c4c41148d44ed7778add6b43' in submodule path 'mysubmodule'

আমি জানি কি submodule মস্তক হওয়া উচিত, কোন উপায় আছে আমি স্থানীয়ভাবে এটিকে পরিবর্তন করতে পারেন হয়, রেপো থেকে ঠেলাঠেলি ছাড়া করে কমিট আছে 2d7cfbd09fc96c04c4c41148d44ed7778add6b43?

আমি স্পষ্ট হয়ে উঠছি কিনা তা নিশ্চিত নই ... এখানেও একই রকম পরিস্থিতি পাওয়া গেছে।


11
"মারাত্মক: রেফারেন্স একটি গাছ নয়" সাবমোডিয়ালগুলির উল্লেখের সাথে সাধারণত বোঝা যায় যে পিতা-মাতার রেপো প্রত্যাশা করে যে সাবমোডিয়াল কমিট এখনও ধাক্কা দেয়নি বা অন্য কোনও উপায়ে বিভ্রান্ত হয়েছে। আমাদের জন্য এই বিভ্রান্তিকর ত্রুটি বার্তাটি কেবলমাত্র একটি সাবমডিউলকে চাপ দিয়ে সমাধান করা হয়েছিল যে কেউ ধাক্কা দিতে ভুলে গেছে।
ক্রিস মোসচিনি

1
@ ক্রিসমোসচিনি - আমার কেবল এই সমস্যাটি ছিল, এবং এটিই ছিল আমার "সমাধান", আমি মূল রেপোটিকে ধাক্কা মেরে টানলাম, তবে আমি সাবডমুলেলের রেপোতে আমার শেষ প্রতিশ্রুতিটি চাপিয়ে দিতে ভুলে গিয়েছিলাম। ধন্যবাদ!
রোটেম

হতে পারে আপনি সর্বশেষতম
সাবমডিউল কমিটগুলি

উত্তর:


378

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

প্রথমটির জন্য আপনাকে যে সাবডমডিউলটি ব্যবহার করতে চান তা থেকে ইতিমধ্যে কমিট জানতে হবে। এটি সরাসরি সাব-মডেলটি সামঞ্জস্য করে তারপরে সুপার-প্রজেক্টটি আপডেট করে "ভিতরে, আউট" থেকে কাজ করে। দ্বিতীয়টি "বাইরের, ইন" থেকে সুপার-প্রোজেক্টের প্রতিশ্রুতি সন্ধান করে যা সাবমডিউলটি সংশোধন করে এবং তারপরে সুপার-প্রোজেক্টের সূচকটি পুনরায় নির্ধারণ করে একটি ভিন্ন সাব-মডুল কমিটকে বোঝায় works

ওলটানো

সাবমডিউলে আপনি কোন কমিটিকে ব্যবহার করতে চান তা যদি আপনি ইতিমধ্যে জানেন তবে আপনি যে প্রতিশ্রুতিটি চান তা cdপরীক্ষা করে দেখুন git addএবং git commitএটি সুপার-প্রোজেক্টে ফিরে আসে।

উদাহরণ:

$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'

ওহো, কেউ একটি সুপার-প্রকল্প প্রতিশ্রুতিবদ্ধ যা সাবমডিউলে একটি অপ্রকাশিত প্রতিশ্রুতি বোঝায় sub। একরকম, আমরা ইতিমধ্যে জানি যে আমরা সাব-মডিউলটি কমিট করতে চাই 5d5a3ee314476701a20f2c6ec4a53f88d651df6c। সেখানে যান এবং সরাসরি এটি পরীক্ষা করে দেখুন।

সাবমডিউলে চেকআউট

$ cd sub
$ git checkout 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
Note: moving to '5d5a3ee314476701a20f2c6ec4a53f88d651df6c' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b <new_branch_name>
HEAD is now at 5d5a3ee... quux
$ cd ..

যেহেতু আমরা একটি প্রতিশ্রুতি পরীক্ষা করছি, এটি সাবমডিউলে একটি পৃথক হেড উত্পাদন করে। আপনি যদি নিশ্চিত করতে চান যে সাবমডিউলটি একটি শাখা ব্যবহার git checkout -b newbranch <commit>করছে , তবে কমিটে একটি শাখা তৈরি এবং চেকআউট ব্যবহার করুন বা আপনি যে শাখাটি চান তা চেকআউট করুন (যেমন ডগায় পছন্দসই প্রতিশ্রুতিযুক্ত একটি)।

সুপার-প্রকল্প আপডেট করুন

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

$ git add sub

ফলাফলগুলি পরীক্ষা করুন

$ git submodule update
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c

সাব-মডুল আপডেটটি নিরব ছিল কারণ সাবমডিউলটি ইতিমধ্যে নির্দিষ্ট প্রতিশ্রুতিতে রয়েছে। প্রথম পার্থক্য দেখায় যে সূচক এবং ওয়ার্কট্রি একই রকম। তৃতীয় তফাতটি দেখায় যে একমাত্র পর্যায়ের পরিবর্তনটি subসাবমডিউলটিকে একটি ভিন্ন অঙ্গীকারের দিকে নিয়ে যাচ্ছে moving

সমর্পণ করা

git commit

এটি স্থির-আপ সাব-মডিউল এন্ট্রি করে।


বাইরে

সাবমডিউলটি থেকে আপনার কোন প্রতিশ্রুতি ব্যবহার করা উচিত তা যদি আপনি নিশ্চিত না হন তবে আপনি গাইড করার জন্য সুপারপজেক্টের ইতিহাসটি দেখতে পারেন। আপনি সরাসরি সুপার-প্রকল্প থেকে রিসেট পরিচালনা করতে পারেন।

$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'

এটি উপরের মতো একই অবস্থা। তবে এবার আমরা সাবমডিউলে ডুবানোর পরিবর্তে সুপার-প্রকল্প থেকে এটি ঠিক করার দিকে মনোনিবেশ করব।

সুপার-প্রকল্পের এরেন্ট কমিট সন্ধান করুন

$ git log --oneline -p -- sub
ce5d37c local change in sub
diff --git a/sub b/sub
index 5d5a3ee..e47c0a1 160000
--- a/sub
+++ b/sub
@@ -1 +1 @@
-Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
+Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
bca4663 added sub
diff --git a/sub b/sub
new file mode 160000
index 0000000..5d5a3ee
--- /dev/null
+++ b/sub
@@ -0,0 +1 @@
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c

ঠিক আছে, দেখে মনে হচ্ছে এটি খারাপ হয়ে গেছে ce5d37c, তাই আমরা এর পিতা-মাতার কাছ থেকে সাব-মডিউলটি পুনঃস্থাপন করব ce5d37c~

বিকল্পভাবে, আপনি প্যাচ পাঠ্য ( 5d5a3ee314476701a20f2c6ec4a53f88d651df6c) থেকে সাবমডিউলের প্রতিশ্রুতি নিতে পারেন এবং তার পরিবর্তে উপরের "অভ্যন্তরীণ, আউট" প্রক্রিয়াটি ব্যবহার করতে পারেন।

সুপার-প্রকল্পে চেকআউট

$ git checkout ce5d37c~ -- sub

এটি সুপার-প্রোজেক্টে subকমিট করার জন্য সাবমোডুল এন্ট্রিটিকে পুনরায় সেট করে ce5d37c~

সাবমডিউল আপডেট করুন

$ git submodule update
Submodule path 'sub': checked out '5d5a3ee314476701a20f2c6ec4a53f88d651df6c'

সাবমডিউল আপডেট ঠিক আছে (এটি একটি বিচ্ছিন্ন হেড নির্দেশ করে)।

ফলাফলগুলি পরীক্ষা করুন

$ git diff ce5d37c~ -- sub
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c

প্রথম ডিফ দেখায় যা subএখন একই রকম ce5d37c~। দ্বিতীয় পার্থক্য দেখায় যে সূচক এবং ওয়ার্কট্রি একই are তৃতীয় ভিন্নতা দেখায় যে একমাত্র পর্যায়ের পরিবর্তনটি subসাবমডিউলটিকে একটি ভিন্ন অঙ্গীকারের দিকে নিয়ে যাচ্ছে moving

সমর্পণ করা

git commit

এটি স্থির-আপ সাব-মডিউল এন্ট্রি করে।


"বাইরের দিকে, ইন" পদ্ধতির মধ্যে আপনি কী ব্যাখ্যা করতে পারেন "কেন মনে হচ্ছে এটি ce5d37c তে খারাপ হয়েছে?" খারাপ আঙ্গুল হিসাবে যে আঙ্গুলের এটি?
গ্যারেট অ্যালব্রাইট

5
@ গ্যারেট: অনুমানটি এমন e47c0aএকটি প্রতিশ্রুতি যা স্থানীয় ভাণ্ডারে বিদ্যমান নেই sub, তবুও সেই প্রকল্পের জন্য সুপার-প্রকল্পের subপয়েন্টগুলি points এটি সম্ভবত ঘটেছে কারণ অন্য কেউ e47c0aতাদের অনুলিপি তৈরি করেছেন sub, তাদের সুপার-প্রজেক্টটি সেই প্রতিশ্রুতিটির দিকে নির্দেশ করতে আপডেট e47c0aকরেছেন এবং এর জন্য কেন্দ্রীয় / ভাগ করা সংগ্রহস্থলের দিকে না ধাক্কা দিয়ে সুপার-প্রকল্পটিকে ধাক্কা দিয়েছেন sub। যখন আমরা কেন্দ্রীয় / ভাগ করা সুপার-প্রকল্প থেকে টানতে পারি তখন আমরা একটি প্রতিশ্রুতি পাই যা পয়েন্ট subকরে e47c0aতবে আমরা সেই প্রতিশ্রুতি "দেখতে" পারি না। ce5d37cসন্দেহ হয় কারণ, ভিন্নতার ভিত্তিতে, এটি চালু হয়েছিল e47c0a
ক্রিস জনসেন

এটি এখনও অস্পষ্ট রেখে গেছে যেখানে subপিতা-মাতার রেপোতে এটির সাবডিউড হিসাবে রাখা নির্দিষ্ট হ্যাশ কোথায় রয়েছে এবং প্যারেন্টের subপুরানো অবস্থার উপর নির্ভর না করে সরাসরি সরাসরি বর্তমান হেডের সাথে চালিত করা যায় কি না রেপো, যা সর্বদা সাহায্য নাও করতে পারে।
ম্যাটানস্টার


187

এটা চেষ্টা কর:

git submodule sync
git submodule update

2
দুর্ভাগ্যক্রমে আমার জন্য নয়, আমাদের একটি সাবমোডিয়াল অ্যাড কমান্ডের সাহায্যে মূল গিট সংগ্রহস্থল দ্বারা চিহ্নিত হয়েছিল, এখন এটি পূর্বাবস্থায় ফেলাতে সমস্যা হচ্ছে
ড্যানিয়েল

9
আমার জন্যও কাজ করেছেন। যদিও জানতে আগ্রহী।
বেনবিটিজি

12
দেখা যাচ্ছে যে git submodule syncপ্রদত্ত সাবমডিউলের জন্য রিমোটের ইউআরএল পরিবর্তিত হয়েছে এমন পরিস্থিতিতে পরিস্থিতিগুলিতে একটি কাজ করা প্রয়োজনীয়। আমাদের ক্ষেত্রে আমরা সর্বজনীন রেপো থেকে আমাদের সাবমডিউল যুক্ত করেছি এবং তারপরে ইউআরএলটিকে একটি ব্যক্তিগত কাঁটাচামচে পরিণত করেছি - এবং এই বিশেষ আচারে নিজেকে নিয়ে এসেছি।
স্যামস্ক্যাম

উদাহরণস্বরূপ: আমার গিথুব রেপো (বি) এর দিকে ইঙ্গিত করে একটি উপ-মডেল সহ আমার একটি রেপো (এ) সেট আপ ছিল। আমি রেপো এ-তে একটি শাখা তৈরি করেছি কারণ আমি অন্য কারও গিথুব রেপোতে বি নির্দেশ করতে চেয়েছিলাম। এর সাথে কিছুটা লড়াই করার পরে এবং শাখাটি প্রতিশ্রুতিবদ্ধ হওয়ার পরে, আমি আমার রেপো এটিকে মাস্টারে ফিরে এলাম এবং রেপো বি নিয়ে এই সমস্যাটি ছিল @ @ লোনরে ওয়াং এর সমাধানটি এটি ঠিক করে দিয়েছে।
fbicknel

2
ধরে নিই কেউ আসলেই বিভ্রান্ত হয় না (এই ক্ষেত্রে আপনার ক্রিস জনসনের দুর্দান্ত উত্তর দরকার ছিল) লোনরে ওয়াংয়ের উত্তরটি সমস্যার সমাধান করা উচিত, ... আপনার সাবমডিউলগুলির নিজস্ব সাবমডিউল থাকতে পারে (এবং সমস্যাটি একটি সাবমডিউলের অভ্যন্তরে রয়েছে)। সেক্ষেত্রে আপনাকে সাবমডিউলে সিডি করতে হবে যা সমস্যার সাথে সাবমডিউল রয়েছে এবং উপরের কমান্ডগুলি কার্যকর করতে হবে। নোট করুন যে আপডেটের একটি --recursive বিকল্প রয়েছে (গিট সাবমডিউল আপডেট --recursive), তবে সিঙ্ক হয় না; আপনাকে প্রকৃতপক্ষে সমস্যাযুক্ত সাব (সাব) মডিউল থাকা সাবমোডিয়ুলের ভিতরে ম্যানুয়ালি 'গিট সাবমডিউল সিঙ্ক' চালাতে হবে। এটি আমার সমস্যা ছিল;)।
কার্লো উড

16

এই ত্রুটির অর্থ এই হতে পারে যে একটি কমিট সাবমডিউডে অনুপস্থিত। অর্থাৎ, সংগ্রহস্থল (এ) এর একটি সাবমডিউল (বি) রয়েছে। এ বি কে লোড করতে চায় যাতে এটি একটি নির্দিষ্ট কমিটের প্রতি নির্দেশ করে (বিতে)। যদি সেই প্রতিশ্রুতিটি কোনওভাবে অনুপস্থিত থাকে তবে আপনি সেই ত্রুটিটি পেয়ে যাবেন। একবার সম্ভাব্য কারণ: প্রতিশ্রুতির রেফারেন্সটি A তে চাপ দেওয়া হয়েছিল, তবে আসল প্রতিশ্রুতি বি থেকে ঠেকানো হয়নি, তাই আমি সেখানেই শুরু করেছিলাম।

কম সম্ভাবনা রয়েছে, অনুমতিগুলির সমস্যা আছে এবং প্রতিশ্রুতিবদ্ধতা টানা যাবে না (যদি আপনি গিট + এসএসএস ব্যবহার করছেন তবে)।

.Git / কনফিগারেশন এবং .gitmodules এ সাবমোডুল পাথগুলি ঠিক আছে কিনা তা নিশ্চিত করুন।

চেষ্টা করার জন্য একটি শেষ জিনিস - সাবমডিউল ডিরেক্টরিটির ভিতরে: গিট রিসেট হেড --হাড়্ড


3
আমি ইতিমধ্যে প্রশ্নের মধ্যে ব্যাখ্যা করেছি ... প্রশ্ন নিজেই এটি সমাধান করার উপায় ছিল। এবং এটি ইতিমধ্যে প্রায় দুই বছর আগে সাফল্যের সাথে উত্তর দেওয়া হয়েছে ... এর সাথে অনুমতিগুলির কোনও যোগ নেই।
মৌরিসিও শেফার

1
আপনি এটি বলেছেন, আপনি অবশ্যই এটি ব্যাখ্যা করেন নি।
ড্যানিয়েল স্যাসডোক

আমার বক্তব্যটি হ'ল, এই উত্তরটি কোনও মূল্যবান তথ্য যুক্ত করে না, আমি এটি মুছে ফেলব।
মৌরিসিও শেফার

4
"গিট রিসেট হেড -হার্ড" আমাকেও সহায়তা করেছিল ... অন্য কিছুই কিছুই কাজ করে নি। আমি আগের সমাধানগুলিও চেষ্টা করেছিলাম, কোনও পাশা নেই। ধন্যবাদ!
ভার্জিল

1
প্রতিটি থ্রেড অনলাইনে তার নিজস্ব ছোট্ট বিশ্ব। আপনি যা বলছেন তা আপনাকে প্রতিনিধিত্ব করে - আপনি আশা করতে পারবেন না যে লোকেরা আপনার ব্যক্তিগত ইতিহাস অধ্যয়ন করবে এমন প্রসঙ্গে আপনার মন্তব্যগুলি ফ্রেম করার চেষ্টা করবে যা আপনাকে পছন্দসই সম্মান দেয়। সদয় হন, শ্রদ্ধাশীল হন এবং আপনার ব্যক্তিগত প্রশ্নগুলি সম্পর্কে লোকদের বোঝার জন্য আপনাকে বলার দরকার পড়বে না। যদি আপনি বিদেশী হিসাবে আপনার মন্তব্যটি একটি নিরপেক্ষ প্রসঙ্গ থেকে পড়তে পারেন তবে আপনি আমার সমালোচনা বুঝতে পারবেন।
স্টেলেডোগ

10

সম্ভাব্য কারণ

এটি তখন ঘটতে পারে যখন:

  1. সাবমডিউল (গুলি) জায়গায় সম্পাদনা করা হয়েছে
  2. সাবমডিউল (গুলি) প্রতিশ্রুতিবদ্ধ, যা সাবমোডিয়ুলের হ্যাশ আপডেট করে being
  3. সাবমডিউল (গুলি) ধাক্কা দেয় না

যেমন এরকম কিছু ঘটেছিল:

$ cd submodule
$ emacs my_source_file  # edit some file(s)
$ git commit -am "Making some changes but will forget to push!"

এই বিন্দুতে সাবমডিউলটি চাপানো উচিত।

$ cd .. # back to parent repository
$ git commit -am "updates to parent repository"
$ git push origin master

ফলস্বরূপ, অনুপস্থিত কমিটগুলি সম্ভবত দূরবর্তী ব্যবহারকারীর দ্বারা সন্ধান করা যায়নি কারণ তারা এখনও স্থানীয় ডিস্কে রয়েছে।

সমাধান

ধাক্কা দেওয়ার জন্য সাবমোডিয়ালটি সংশোধনকারী ব্যক্তিকে অবহিত করুন, যেমন

$ cd submodule
$ git push

6

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

$ git submodule update --init --depth 1

তবে মূল প্রকল্পের প্রতিশ্রুতিটি পূর্বের প্রতিশ্রুতিতে নির্দেশ করেছিল।

সাবমডিউল ফোল্ডার মোছা এবং চলছে:

$ git submodule update --init

সমস্যাটি সমাধান করেনি। আমি রেপো মোছা করেছি এবং গভীরতার পতাকা ছাড়াই আবার চেষ্টা করেছি এবং এটি কার্যকর হয়েছে।

এই ত্রুটিটি উবুন্টু ১.0.০৪ গিট ২.7.৪ এ ঘটে তবে উবুন্টু ১৮.০৪ গিট ২.১17-তে নয়, টোডো সঠিক ফিক্সিং প্রতিশ্রুতি বা সংস্করণ সন্ধান করে।


আমার দল তার পর থেকে সাব কোডগুলি সাব কোডগুলিকে পরিত্যাগ করেছে খুব বেশি ঝামেলা-রীতি
প্লাটো

1
আপনার বিকল্প কি ছিল?
nizzolilo

@nuzzolilo আমরা প্যাকেজ.জেসনে যুক্ত username/repo#shaকরেছি, আরও অনেক নমনীয় বিকল্প হ'ল আপনার সিস্টেমকে ডকার পাত্রে একটি সেট দিয়ে সাজানো
প্লেটো

3
এটি তাই বিরক্তিকর। --depth=1আমার যখন রেপো ইতিহাসের প্রয়োজন হয় না তখন অনেক বেশি ব্যান্ডউইথটি সংরক্ষণ করে। কেউ যদি কখনও খুঁজে পায় বা জেনে থাকে যে কেন এমন হচ্ছে আমি জানতে চাই।
i336_

@ i336_ যদিও আমি তা ব্যাখ্যা করতে পারছি না, আমি একটি চটকের সাহায্যকারী লিখেছি যা সমস্যাটি প্রশমিত করতে এখানে সহায়তা করে: github.com/LMMS/lmms/blob/… । এটি এমন একটি deinitপদ্ধতির ব্যবহার করে যা বেশিরভাগ সময় সমস্যার সমাধান করে। যখন কোনও বিল্ড সিস্টেমের সাথে বান্ডিল করা হয়, শেষ-ব্যবহারকারী কেবল বিল্ড সিস্টেমটিকে সাবমোডিয়ুলগুলি আনতে এবং ভাঙ্গা recursiveকমান্ডটি পুরোপুরি খনন করতে পারে । এখনও এমন পরিস্থিতিতে রয়েছে যেখানে এই বিরতি যেমন সাবমডিউল একটি জোর ধাক্কা দিয়েছে এবং প্রতিশ্রুতিটি পুরোপুরি মুছে ফেলেছে।
tresf

5

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


5

আপনার শাখাটি আপ টু ডেট নাও হতে পারে, একটি সহজ সমাধান তবে চেষ্টা করুন git fetch


2

এই উত্তরটি সীমিত টার্মিনাল গিট অভিজ্ঞতা সহ উত্সট্রি ব্যবহারকারীদের জন্য for

গিট প্রকল্পের (সুপার-প্রকল্প) এর মধ্যে থেকেই সমস্যাযুক্ত সাবমডিউলটি খুলুন।

আনুন এবং নিশ্চিত করুন 'সমস্ত ট্যাগ আনুন' চেক করা হয়েছে।

রিবেস আপনার গিট প্রকল্পটি টানুন।

এটি দশবারের মধ্যে 9 বার 'রেফারেন্স কোনও গাছ নয়' সমস্যার সমাধান করবে। যে 1 বার এটি হবে না, এটি শীর্ষ উত্তরের বর্ণনা অনুসারে একটি টার্মিনাল ফিক্স।


1

আপনার সাব-মডুলের ইতিহাস যাইহোক উপ-মডেল গিটে নিরাপদে সংরক্ষিত।

সুতরাং, কেন কেবল সাবমডিউলটি মুছুন এবং এটি আবার যুক্ত করবেন না?

অন্যথায়, আপনি নিজে নিজে HEADবা refs/master/headসাবমোডুলের মধ্যে সম্পাদনা করার চেষ্টা করেছিলেন?.git


1
এটি কাজ করবে না, কারণ কোথাও কোথাও 2d7cfbd09fc96c04c4c41148d44ed7778add6b43 এর রেফারেন্স রয়েছে যা কেবল অন্য কোথাও স্থানীয় রেপোতে রয়েছে তবে প্রকাশিত হয়নি
মরিসিও শ্যাফার

1

নিশ্চিত হতে, আপনার gitবাইনারি আপডেট করার চেষ্টা করুন ।

উইন্ডোজের জন্য গিটহাবের সংস্করণটি রয়েছে git version 1.8.4.msysgit.0যা আমার ক্ষেত্রে সমস্যা ছিল। আপডেট করা এটি সমাধান করেছে।


1

আমার ক্ষেত্রে, উপরের উত্তরের কোনওটিই সমস্যার সমাধান করেনি এমনকি তারা ভাল উত্তরও রয়েছে। সুতরাং আমি আমার সমাধান পোস্ট করি (আমার ক্ষেত্রে দুটি গিট ক্লায়েন্ট, ক্লায়েন্ট এ এবং বি রয়েছে):

  1. সাবমডিউলের দির যাও:

    cd sub
    
  2. মাস্টার চেকআউট:

    git checkout master
    
  3. উভয় ক্লায়েন্ট দেখতে পাবে এমন প্রতিশ্রুতিবদ্ধ কোডটি পুনরায় করুন

  4. ফিরে পিতামাতার dir যাও:

  5. মাস্টার প্রতিশ্রুতিবদ্ধ

  6. অন্য ক্লায়েন্ট পরিবর্তন - rebaseআবার করতে।

  7. অবশেষে এখন এটি ঠিক কাজ করে! কিছু কমিট হারিয়ে যেতে পারে তবে এটি কার্যকর হয়।

  8. এফওয়াইআই, আপনার .git/modulesসাবমডিউলটি সরিয়ে দেওয়ার চেষ্টা করবেন না, এটি সেখানেই থাকবে এবং প্রতিক্রিয়াশীল স্থানীয় না হলে এই সাবমোডিয়ুলটি আর পড়তে পারবে না।


1

সাবমডিউলের মাথার সাথে গিট রেপো সিঙ্ক করার জন্য, আপনি যা চান তা যদি সত্যি হয় তবে আমি খুঁজে পেলাম যে সাবমডিউলটি সরিয়ে ফেলা এবং তারপরে পড়াটি ইতিহাসের সাথে সংঘাতকে এড়িয়ে চলে। দুর্ভাগ্যক্রমে সাবমডিউলটি সরিয়ে ফেলার জন্য একক গিট কমান্ড না হয়ে হ্যাকিংয়ের প্রয়োজন হয়, তবে তা সম্ভব।

Https://gist.github.com/kyleturner/1563153 দ্বারা অনুপ্রাণিত হয়ে সাবমডিউলটি সরাতে আমি অনুসরণ করা পদক্ষেপগুলি :

  1. গিট আরএম চালাও - ক্যাচড
  2. .Gitmodules ফাইল থেকে প্রাসঙ্গিক লাইনগুলি মুছুন।
  3. .Git / কনফিগার থেকে প্রাসঙ্গিক বিভাগটি মুছুন।
  4. এখনই ট্রেড করা সাবমডিউল ফাইলগুলি মুছুন।
  5. ডিরেক্টরি .git / মডিউল / সরান

আবার, এটি কার্যকর হতে পারে যদি আপনি যা চান তা সবই সাবমডিউলের মাথার দিকে আবার লক্ষ্য করা উচিত, এবং সাবমডিউলের স্থানীয় অনুলিপি অক্ষত রাখার প্রয়োজনে জটিল জিনিসগুলি আপনার নেই। এটি ধরে নিয়েছে যে সাবমোডুলটির নিজস্ব রেপো হিসাবে "ডান" রয়েছে, যেখানেই এর উত্স, এবং আপনি কেবল এটি সাবমডিউল হিসাবে সঠিকভাবে অন্তর্ভুক্ত করতে ফিরে যেতে চান।

দ্রষ্টব্য: সর্বদা আপনার প্রজেক্টের এই জাতীয় ধরণের কারসাজি বা সাধারণ প্রতিশ্রুতি বা ধাক্কা ছাড়িয়ে কোনও গিট কমান্ডে নিযুক্ত হওয়ার আগে সম্পূর্ণ কপি করুন। আমি অন্যান্য সমস্ত উত্তরের পাশাপাশি এবং সাধারণ গিট গাইডলাইন হিসাবে পরামর্শ দেব।


1

এই সমস্যাটির জন্য কেবল হোঁচট খেয়েছে, এবং এর সমাধানগুলির কোনওটিই আমার পক্ষে কার্যকর হয়নি। আমার সমস্যার সমাধান হয়ে উঠেছে তা আসলে অনেক সহজ: আপগ্রেড গিট। খনিটি ছিল 1.7.1, এবং আমি এটি 2.16.1 (সর্বশেষ) এ আপগ্রেড করার পরে, সমস্যাটি কোনও চিহ্ন ছাড়াই চলে গেল! অনুমান করুন আমি এটিকে এখানে রেখে চলেছি, আশা করি এটি কারও সাহায্য করবে।

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