বিস্তারিত সমাধান
এনপিএম ব্যবহার করে গিট সাবমোডিয়ুলের দ্রুত বিকল্পের জন্য এই উত্তরের শেষে শেষ নোটটি দেখুন (শেষ অনুচ্ছেদ);)
নিম্নলিখিত উত্তরে আপনি কীভাবে একটি সংগ্রহস্থল থেকে একটি ফোল্ডারটি বের করতে এবং সেখান থেকে একটি গিটার সংগ্রহস্থল তৈরি করতে এবং তারপরে এটি ফোল্ডারের পরিবর্তে সাবমোডিয়াল হিসাবে অন্তর্ভুক্ত করবেন know
জার্গ বায়ারের নিবন্ধ থেকে অনুপ্রাণিত হয়ে একটি গিট রিপোজিটরি থেকে অন্যটিতে ফাইল সংরক্ষণ করা, ইতিহাস সংরক্ষণ করা
শুরুতে, আমাদের এর মতো কিছু রয়েছে:
<git repository A>
someFolders
someFiles
someLib <-- we want this to be a new repo and a git submodule!
some files
পদক্ষেপে নম্র, আমি এটি someLib
হিসাবে উল্লেখ করব <directory 1>
।
শেষে, আমাদের এর মতো কিছু থাকবে:
<git repository A>
someFolders
someFiles
@submodule --> <git repository B>
<git repository B>
someFolders
someFiles
অন্য সংগ্রহস্থলের একটি ফোল্ডার থেকে একটি নতুন গিট সংগ্রহস্থল তৈরি করুন
ধাপ 1
বিভাজনের জন্য সংগ্রহস্থলের একটি নতুন কপি পান।
git clone <git repository A url>
cd <git repository A directory>
ধাপ ২
বর্তমান ফোল্ডারটি নতুন সংগ্রহস্থল হবে সুতরাং বর্তমানের রিমোটটি সরিয়ে ফেলুন।
git remote rm origin
ধাপ 3
পছন্দসই ফোল্ডারের ইতিহাস বের করুন এবং এটি প্রতিশ্রুতিবদ্ধ
git filter-branch --subdirectory-filter <directory 1> -- --all
directory 1
আপনার রেপোর মূল থেকে সমস্ত সম্পর্কিত কমিটের ইতিহাস সহ ফাইলগুলির সাথে এখন একটি গিট সংগ্রহস্থল থাকা উচিত ।
পদক্ষেপ 4
আপনার অনলাইন সংগ্রহস্থল তৈরি করুন এবং আপনার নতুন ভান্ডারটি পুশ করুন!
git remote add origin <git repository B url>
git push
upstream
আপনার প্রথম ধাক্কার জন্য আপনাকে শাখাটি স্থাপন করতে হবে
git push --set-upstream origin master
পরিষ্কার <git repository A>
(alচ্ছিক, মন্তব্য দেখুন)
আমরা এই ফোল্ডারের জন্য ইতিহাস <git repository B>
থেকে এর ট্রেস (ফাইল এবং ইতিহাস প্রতিশ্রুতিবদ্ধ) মুছে ফেলতে চাই <git repository A>
there
এটি গিথুব থেকে সংবেদনশীল ডেটা অপসারণের উপর ভিত্তি করে ।
একটি নতুন ফোল্ডারে যান এবং
git clone <git repository A url>
cd <git repository A directory>
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <directory 1> -r' --prune-empty --tag-name-filter cat -- --all
<directory 1>
আপনি যে ফোল্ডারটি সরাতে চান সেটি দ্বারা প্রতিস্থাপন করুন । -r
এটি নির্দিষ্ট ডিরেক্টরি ভিতরে পুনরাবৃত্তভাবে কাজ করবে :)। এখন থেকে ধাক্কা origin/master
দিয়ে--force
git push origin master --force
বস স্টেজ (নীচের নোট দেখুন)
একটি তৈরি করুন submodule থেকে <git repository B>
মধ্যে<git repository A>
git submodule add <git repository B url>
git submodule update
git commit
সবকিছু প্রত্যাশা অনুযায়ী কাজ করেছে কিনা তা যাচাই করুন push
git push origin master
বিঃদ্রঃ
এই সমস্ত কিছু করার পরে, আমি আমার ক্ষেত্রে বুঝতে পারি যে তার পরিবর্তে নিজের নির্ভরতাগুলি পরিচালনা করতে এনপিএম ব্যবহার করা আরও উপযুক্ত । আমরা গিট ইউআরএল এবং সংস্করণগুলি নির্দিষ্ট করতে পারি, প্যাকেজ.জসন গিট ইউআরএলকে নির্ভরতা হিসাবে দেখি ।
আপনি এটি এই ভাবে না, সংগ্রহস্থলের আপনি একটি প্রয়োজন হিসাবে ব্যবহার করতে চান একটি হওয়া আবশ্যক npm মডিউল তাই এটি একটি থাকা আবশ্যক package.json
ফাইল বা এই ত্রুটি পাবেন: Error: ENOENT, open 'tmp.tgz-unpack/package.json'
।
tldr (বিকল্প সমাধান)
আপনি এনএমপি ব্যবহার এবং গিট ইউআরএলগুলির সাথে নির্ভরতা পরিচালনা করা আরও সহজ পেতে পারেন :
- ফোল্ডারটিকে একটি নতুন ভাণ্ডারে সরান
npm init
উভয় ভান্ডার ভিতরে চালান
npm install --save git://github.com/user/project.git#commit-ish
আপনি যেখানে নির্ভরতা ইনস্টল করতে চান সেখানে চালান