আপনি vendor/plugins/open_flash_chart_2
"গিটলিংক" এন্ট্রি হিসাবে যুক্ত করেছেন, তবে কখনও এটিকে উপ-মডেল হিসাবে সংজ্ঞায়িত করেন নি। কার্যকরভাবে আপনি অভ্যন্তরীণ বৈশিষ্ট্যটি ব্যবহার করছেন যা গিট সাবমডিউল ব্যবহার করে (গিটলিংক এন্ট্রি) তবে আপনি নিজেই সাবমডিউল বৈশিষ্ট্যটি ব্যবহার করছেন না।
আপনি সম্ভবত এরকম কিছু করেছেন:
git clone git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
git add vendor/plugins/open_flash_chart_2
এই শেষ আদেশটিই সমস্যা। ডিরেক্টরিটি vendor/plugins/open_flash_chart_2
একটি স্বাধীন গিট সংগ্রহস্থল হিসাবে শুরু হয়। সাধারণত এ জাতীয় সাব- रिपোরিটরিগুলি উপেক্ষা করা হয়, তবে আপনি যদি গিট অ্যাডটিকে স্পষ্টভাবে যোগ করার জন্য বলেন তবে এটি একটি গিটলিংক এন্ট্রি তৈরি করবে যা ডিরেক্টরিটির বিষয়বস্তু যুক্ত করার পরিবর্তে সাব-রেপোজিটরির হেড কমিটকে নির্দেশ করে। গিট অ্যাড এই জাতীয় "আধা-সাবমডিউল" তৈরি করতে অস্বীকৃতি জানালে এটি দুর্দান্ত হতে পারে ।
সাধারণ ডিরেক্টরিগুলি গিতে গাছের বস্তু হিসাবে প্রতিনিধিত্ব করা হয়; ট্রি অবজেক্টগুলি তাদের ধারণকৃত বস্তুর নাম দেয় এবং অনুমতি দেয় (সাধারণত অন্যান্য গাছ এবং ব্লব অবজেক্টগুলি respectively ডিরেক্টরি এবং ফাইলগুলি যথাক্রমে)। সাবমডিউলগুলি "গিটলিংক" এন্ট্রি হিসাবে উপস্থাপিত হয়; গিটলিংক এন্ট্রিগুলিতে কেবল সাব-মডুলের হেড কমিটের অবজেক্টের নাম (হ্যাশ) থাকে। গিটলিংকের কমিটের জন্য "উত্স সংগ্রহস্থল" .gitmodules
ফাইলটিতে সুনির্দিষ্ট করা হয় (এবং ফাইলটি সাবমোডিয়াল .git/config
শুরু হওয়ার পরে)।
আপনার কাছে যা রয়েছে তা হল একটি প্রতিশ্রুতি যা সেই প্রতিশ্রুতিটির জন্য সোর্স সংগ্রহস্থলটি রেকর্ড না করে একটি বিশেষ প্রতিশ্রুতি দেয়। আপনি আপনার গিটলিংককে একটি উপযুক্ত সাবমোডিয়ালে পরিণত করে বা গিটলিংকটি সরিয়ে এবং "সাধারণ" বিষয়বস্তু (প্লেইন ফাইল এবং ডিরেক্টরি) দিয়ে এটি প্রতিস্থাপন করে সমাধান করতে পারেন।
এটি একটি যথাযথ সাবমডিউলে পরিণত করুন
vendor/plugins/open_flash_chart_2
সাবডমডিউল হিসাবে সঠিকভাবে সংজ্ঞায়িত করতে আপনি একমাত্র বিট হারিয়ে যাচ্ছেন এটি একটি .gitmodules
ফাইল। সাধারণত (আপনি যদি ইতিমধ্যে এটি বেয়ার গিটলিংক এন্ট্রি হিসাবে যুক্ত না করেন), আপনি কেবল ব্যবহার করবেন git submodule add
:
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
যেমন আপনি খুঁজে পেয়েছেন, পথটি ইতিমধ্যে সূচকে উপস্থিত থাকলে এটি কাজ করবে না। সমাধানটি হ'ল সাময়িকভাবে সূচি থেকে গিটলিংক এন্ট্রি সরিয়ে ফেলুন এবং তারপরে সাবমডিউলটি যুক্ত করুন:
git rm --cached vendor/plugins/open_flash_chart_2
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
এটি আপনার বিদ্যমান সাব-রিপোজিটরিটি ব্যবহার করবে (অর্থাত্ এটি উত্স সংগ্রহস্থলিকে পুনরায় ক্লোন করবে না) এবং .gitmodules
এমন একটি ফাইল মঞ্চস্থ করবে :
[submodule "vendor/plugins/open_flash_chart_2"]
path = vendor/plugins/open_flash_chart_2
url = git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
এটি আপনার মূল সংগ্রহস্থলগুলিতে .git/config
( বিন্যাস ছাড়াই path
) অনুরূপ প্রবেশ করবে ।
এটি প্রতিশ্রুতিবদ্ধ এবং আপনার একটি উপযুক্ত সাবমডিউল থাকবে। আপনি যখন সংগ্রহস্থলটি ক্লোন করে (বা গিটহাবের দিকে এগিয়ে যান এবং সেখান থেকে ক্লোন করেন), আপনার মাধ্যমে সাবমডিউলটি পুনরায় আরম্ভ করতে সক্ষম হওয়া উচিত git submodule update --init
।
এটি সরল সামগ্রী দিয়ে প্রতিস্থাপন করুন
পরবর্তী পদক্ষেপটি অনুমান করে যে আপনার সাব-রিপোজিটরিতে vendor/plugins/open_flash_chart_2
এমন কোনও স্থানীয় ইতিহাস নেই যা আপনি সংরক্ষণ করতে চান (অর্থাত্ আপনার যত্ন নেওয়া সমস্ত হ'ল উপ-সংগ্রহস্থলের বর্তমান কার্যকারী গাছ, ইতিহাস নয়)।
আপনি যে সাব-रिपোজিটরিটির বিষয়ে আগ্রহী সেগুলির স্থানীয় ইতিহাস যদি থাকে তবে আপনার .git
নীচের দ্বিতীয় কমান্ডে সাব-সংগ্রহস্থলের ডিরেক্টরিটি মুছে ফেলার আগে ব্যাকআপ করা উচিত । ( নীচে গিট সাবট্রি উদাহরণ বিবেচনা করুন যা উপ-সংগ্রহস্থলের হেডের ইতিহাস সংরক্ষণ করে)
git rm --cached vendor/plugins/open_flash_chart_2
rm -rf vendor/plugins/open_flash_chart_2/.git # BACK THIS UP FIRST unless you are sure you have no local changes in it
git add vendor/plugins/open_flash_chart_2
এবার ডিরেক্টরি যুক্ত করার সময় এটি কোনও উপ-সংগ্রহস্থল নয়, তাই ফাইলগুলি সাধারণত যুক্ত করা হবে। দুর্ভাগ্যক্রমে, যেহেতু আমরা .git
ডিরেক্টরিটি মুছে ফেলেছি উত্স সংগ্রহস্থলের সাথে জিনিসগুলি আপ টু ডেট রাখার কোনও সহজ-সহজ উপায় নেই।
পরিবর্তে আপনি একটি সাবট্রি মার্জ ব্যবহার বিবেচনা করতে পারেন । এটি করার ফলে আপনি সহজেই আপনার সংগ্রহস্থলটিতে "ফ্ল্যাট" ফাইল রাখার পরে উত্স সংগ্রহস্থল থেকে পরিবর্তনগুলি সহজেই টানতে পারবেন (কোনও সাবমডিউল নেই)। তৃতীয় পক্ষের গিট সাবট্রি কমান্ডটি সাবট্রি মার্জ কার্যকারিতা চারপাশের একটি দুর্দান্ত মোড়ক।
git rm --cached vendor/plugins/open_flash_chart_2
git commit -m'converting to subtree; please stand by'
mv vendor/plugins/open_flash_chart_2 ../ofc2.local
git subtree add --prefix=vendor/plugins/open_flash_chart_2 ../ofc2.local HEAD
#rm -rf ../ofc2.local # if HEAD was the only tip with local history
পরবর্তীতে:
git remote add ofc2 git://github.com/korin/open_flash_chart_2_plugin.git
git subtree pull --prefix=vendor/plugins/open_flash_chart_2 ofc2 master
git subtree push --prefix=vendor/plugins/open_flash_chart_2 git@github.com:me/my_ofc2_fork.git changes_for_pull_request
গিট সাবট্রির একটি --squash
বিকল্প রয়েছে যা আপনাকে সোর্স সংগ্রহস্থলের ইতিহাসকে আপনার ইতিহাসে অন্তর্ভুক্ত করা এড়াতে দেয় তবে তবুও আপনাকে আপ স্ট্রিম পরিবর্তনগুলি টানতে দেয়।