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


149

আমি গিতের সাবমডিউলগুলিতে অনাকাঙ্ক্ষিত সামগ্রী থেকে মুক্তি পাবে বলে মনে হচ্ছে না। চলমান git statusফলন:

# শাখা মাস্টারে
# পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ হওয়ার জন্য মঞ্চস্থ নয়:
# (প্রতিশ্রুতিবদ্ধ হবে তা আপডেট করতে "গিট অ্যাড ..." ব্যবহার করুন)
# (কার্যনির্বাহী ডিরেক্টরিতে পরিবর্তনগুলি বাতিল করতে "গিট চেকআউট - ..." ব্যবহার করুন)
# (সাবমডিউলগুলিতে অপ্রকাশিত বা সংশোধিত সামগ্রী প্রতিশ্রুতিবদ্ধ বা বাতিল করুন)
#
# সংশোধিত: বান্ডেল / স্নিপমেট (অচিহ্নবদ্ধ সামগ্রী)
# সংশোধিত: বান্ডিল / চারপাশে (অবরুদ্ধ সামগ্রী)
# সংশোধিত: বান্ডেল / ট্রেইলিং-হোয়াইটস্পেস (অবিরত সামগ্রী)
# সংশোধিত: বান্ডেল / জেনকোডিং (চিহ্নবিহীন সামগ্রী)
#
প্রতিশ্রুতিতে কোনও পরিবর্তন যুক্ত করা হয়নি ("গিট অ্যাড" এবং / অথবা "গিট কমিট -a" ব্যবহার করুন)

--ignore-submodulesপ্যারামিটার যুক্ত করা এই বার্তাগুলি গোপন করে; তবে আমি অবাক হই যে আরও উপযুক্ত, মূল-ইশ, পদ্ধতিতে এই ময়লা থেকে মুক্তি পাওয়ার কোনও উপায় আছে কিনা।


3
এই উত্তর: স্ট্যাকওভারফ্লো . com / a / 5127213/ 199649 আরও বিকল্প দাবি করে।
চার্লাক্স

উত্তর:


95

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

  • চিহ্নবিহীন সামগ্রীগুলি যুক্ত করুন এবং প্রতিশ্রুতিবদ্ধ করুন,
  • বা .gitignoreপ্রতিটি মডিউলের জন্য একটি নির্দিষ্ট ক্ষেত্রে অচিহ্নযুক্ত সামগ্রীগুলি উল্লেখ করুন ।
  • অথবা আপনি সাবমডিউলে একই উপেক্ষিত সামগ্রী যুক্ত করতে পারেন .git/info/exclude, মন্তব্যে peci1 প্রতিবেদন হিসাবে ।
  • বা ইজরাস্পেক্টরের জবাব ( upvated ) হিসাবে উল্লিখিত হিসাবে submodule স্পেসিফিকেশন নোংরা যোগ করুন ।

    git config -f .gitmodules submodule.<path>.ignore untracked
    
  • অথবা একটি বিশ্বব্যাপী .gitignore ফাইল যুক্ত করুন (প্রায়শই ~/.gitignore-global)। উদাহরণস্বরূপ মতো .DS_Storeবা আমার ক্ষেত্রে Carthage/Buildযেমন দ্বারা রিপোর্ট মারিয়ান Cerny মধ্যে মন্তব্য.gitginoreম্যান পৃষ্ঠা দেখুন :

যে পরিস্থিতিগুলি ব্যবহারকারী কোনও পরিস্থিতিতে গিটকে উপেক্ষা করতে চায় সেগুলি (উদাহরণস্বরূপ, ব্যবহারকারীর সম্পাদকের দ্বারা সম্পাদিত ব্যাকআপ বা অস্থায়ী ফাইলগুলি) সাধারণত core.excludesFileব্যবহারকারীর দ্বারা নির্দিষ্ট করা একটি ফাইলে যায় ~/.gitconfig। এর ডিফল্ট মান $XDG_CONFIG_HOME/git/ignore। যদি $XDG_CONFIG_HOMEহয় সেট না হয় বা খালি থাকে $HOME/.config/git/ignoreতবে পরিবর্তে ব্যবহৃত হয়।


5
+1, আমি এটি না পাওয়া পর্যন্ত আমি চিৎকার করতে প্রস্তুত ছিলাম ... তখন বুঝতে পেরে আমার একটি সাবমডিউলে একটি .DS_Storeফাইল স্বয়ংক্রিয়ভাবে তৈরি হয়েছিল (ওএস এক্স দ্বারা) আমাকে মূল প্রকল্পটি প্রতিরোধ করতে বাধা দিয়েছে। ARG! আপডেট করার সময় .gitignore...
কোর্টনি ক্রিস্টেনসেন

এক্সকোড ব্যবহার করে, আমি .gitignore- গ্লোবাল ফাইলে * .xcuserdatad যুক্ত করাও দরকারী বলে মনে করেছি। এটি স্থানীয় এক্সকোড পছন্দগুলি ট্র্যাক করার চেষ্টা থেকে গিটকে বাধা দেয়।
রায় শ্যারন

আপনার যদি সাবমডিউলে ধাক্কা দেওয়ার অধিকার না থাকে তবে আপনি প্যারেন্ট রেপোর অন্যান্য ব্যবহারকারীর সাথে সাবমডিউলে আপনার পরিবর্তনগুলি ভাগ করতে পারবেন না। @ কুইন্সিগ্লেনের সমাধান মনে হয় এমন ক্ষেত্রে কাজ করে।
ড্রয় নোকস 21

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

2
এমনকি .gitignore (যা নিজেই তালাবিহীন হয়ে যায়) তৈরি না করেও আপনি এটি করতে পারেন। .git/info/excludeসাবমডিউলটি খুলুন এবং সেখানে উপেক্ষা লাইনগুলি যুক্ত করুন (এটি একটি .gitignore এর মতো কাজ করে তবে এটি ভাগ করা সংগ্রহস্থলের অংশ নয়)।
মার্টিন পেকা 21

144

সামগ্রিকভাবে কাজ করার জন্য এই ব্লগ পোস্টটি পেয়েছি । ফাইলের ignore = dirtyপ্রতিটি প্রবেশের বিকল্প যুক্ত করে By.gitmodules

[submodule "zen-coding-gedit3"]
    path = zen-coding-gedit3
    url = git://github.com/leafac/zen-coding-gedit3.git
    ignore = dirty

আমার পছন্দসই সমাধান, এটি সহজে স্বয়ংক্রিয়ভাবে হ'ল।
প্রাণঘাতী-গিটার

24
উল্লেখযোগ্য যে ignore = untrackedএটিও বিদ্যমান এবং সংশোধিত ট্র্যাকযুক্ত ফাইলগুলি দেখায়, তবে তালিকৃত ফাইলগুলি নয়। সমস্ত
সাবমডিউলগুলির

12

আপনি প্রতিটি সাবমডিউল দির যেতে পারেন এবং পৃথক গিট হিসাবেও কাজ করতে পারেন। উদাহরণ স্বরূপ:

cd my/project/submodule
git status

... / সংশোধিত ফাইলগুলির তালিকা পেয়েছে /

git add .  //to add all of them to commit into submodule
git commit -m "message to your submodule repo"

আপনি আপনার রিমোট সাবমডিউল রেপোও আপডেট করতে পারেন

git submodule update

সর্বোপরি


5
আপনি সম্ভবত git add .পরিবর্তিত ফাইল পর্যালোচনা না করে করতে চান না । বেশিরভাগ সময়, যে পরিবর্তনগুলি করা হয়েছিল তা হ'ল যুক্ত .DS_Storeফাইলগুলি - এটি সম্ভবত আপনার দ্বারা ধরা উচিত .gitignore, কারণ জোর্টনি উত্তরটির প্রথম মন্তব্যে উল্লেখ করেছেন।
গ্রেগলটসভ

আপনি প্রকৃতপক্ষে সাবমডিউলগুলি আপডেট করতে চান না এবং মূল অবস্থায় ফিরে যেতে চান না যদি আপনি চালনা করতে চান git submodule update --force
টম

4

এটি detached HEADআপনার সাবমডিউল শাখায় থাকার কারণে হতে পারে । যদি এটি হয় তবে আপনার সাব-মডিউল পথে (যেমন ./bundle/snipmate:) যান, তবে চালান git checkout master


2

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

git status আউটপুট দেখাচ্ছে।

# On branch master
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   proj1 (untracked content)
#   modified:   proj1 (modified content, untracked content)
#   ...

চিহ্নবিহীন সামগ্রীর ত্রুটিটি সমাধান করার জন্য, আমাকে একটি ব্যবহার করে সমস্ত সাবমোডিয়াল (সমস্ত ছিল *.pyc, *.pyoপাইথন দ্বারা উত্পন্ন ফাইলগুলি) থেকে ট্রেড করা ফাইলগুলি সরিয়ে ফেলতে হয়েছিল .gitignore

অন্যটির সমাধানের জন্য, আমাকে চালাতে হয়েছিল git submodule updateযা প্রতিটি সাবমডিউলকে আপডেট করেছে।


1

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

এই ক্ষেত্রে সমাধান হ'ল .git ফোল্ডারটি মুছে ফেলা (এটি দেখার জন্য আপনার সম্ভবত লুকানো ফাইলগুলি দেখাতে হবে)।


1

এটি সম্ভবত তখন ঘটে যখন আপনি নির্দিষ্ট ফোল্ডারের ভিতরে অন্য একটি .git [লুকানো ফোল্ডার] রাখবেন ..

সংশোধিত: ./../ .. (পরিবর্তিত সামগ্রী, চিহ্নবিহীন সামগ্রী)

আপনার সাব-ডিরেক্টরিতে এটি .git ফোল্ডার না রয়েছে তা নিশ্চিত করুন।

যদি এটি হয় তবে সাব ডিরেক্টরি থেকে .git ফোল্ডারটি ম্যানুয়ালি মুছে ফেলাতে সমস্যাটি সমাধান করা যেতে পারে।


1

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

আমি এটি করতে পেরেছিলাম কারণ আমি জানতাম যে সমস্ত অনতিযুক্ত ফাইলগুলি আসলে প্রয়োজন হয় না।


1

এটি আমার পক্ষে ঠিক কাজ করেছে:

git update-index --skip-worktree <path>

যদি এটির সাথে কাজ না pathnameকরে তবে ফাইলটির নাম ব্যবহার করে দেখুন। এটি যদি আপনার পক্ষে কাজ করে তবে আমাকে জানান।


-1

এটি যদি কোনও অস্থায়ী সমস্যা হয় git reset HEAD --hardতবে আপনি সাবমডিউল ফোল্ডারে যেতে পারেন এবং চালাতে পারেন তবে আপনি সাবমডিউলের অভ্যন্তরে আপনার সমস্ত পরিবর্তন হারাবেন।

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