আমি গিট সাবট্রি ব্যবহার করে পরীক্ষা নিরীক্ষা করেছি এবং নিম্নলিখিত পরিস্থিতিতে চলে এসেছি।
আমি আমার রেপোতে একটি বাহ্যিক প্রকল্প যুক্ত করতে গিট সাবট্রি ব্যবহার করেছি, আমি ইচ্ছাকৃতভাবে ইতিহাসের সবগুলি প্রবাহ প্রকল্পের জন্য রেখেছি কারণ আমি প্রকল্পের ইতিহাস উল্লেখ করতে সক্ষম হতে চাই এবং পরে প্রবাহের প্রকল্পেও আবার অবদান রাখতে পারি।
দেখা যাচ্ছে যে, প্রবাহ প্রকল্পের আরেকটি অবদানকারী দুর্ঘটনাক্রমে মাস্টার শাখায় একটি বড় ফাইল ঠেলে দিয়েছে। এটি ঠিক করার জন্য, প্রবাহ প্রকল্পটি পুনর্লিখনের ইতিহাস এবং জোরকে মাস্টারের দিকে ঠেলে দেয়। আমার "মনোরেপো" তৈরি করার সময়, আমি এই প্রতিশ্রুতি অন্তর্ভুক্ত করেছি এবং আমি এটি অপসারণ করতেও চাই।
সাবট্রির নতুন ইতিহাস প্রতিবিম্ব করতে আমি কীভাবে আমার সংগ্রহস্থল আপডেট করতে পারি?
আমার প্রথম প্রচেষ্টা ছিল সাবট্রি এবং সমস্ত ইতিহাস সম্পূর্ণরূপে মুছে ফেলার জন্য ফিল্টার-শাখা ব্যবহার করা।
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch upstream-project-dir' --prune-empty HEAD
সাবট্রির পুরানো সংস্করণটি সরিয়ে ফেলার পরে, আমি নতুন প্রবাহের মাস্টারটি ব্যবহার করে সাবট্রিটিকে পুনরায় যুক্ত করতে পারি। তবে এটি কার্যকর হয়নি কারণ কোনও কারণে কমিটের ইতিহাস এখনও গিট লগ আউটপুটে প্রদর্শিত হয়।
হালনাগাদ
আমি একটি ন্যূনতম প্রজননযোগ্য উদাহরণ তৈরি করার পদক্ষেপগুলি লিখেছি।
প্রথমে একটি খালি গিট রেপো তৈরি করুন।
git init test-monorepo cd ./test-monorepo
একটি প্রাথমিক প্রতিশ্রুতি তৈরি করুন।
echo hello world > README git add README git commit -m 'initial commit'
একটি বাহ্যিক প্রকল্পের জন্য এখন একটি সাবট্রি যুক্ত করুন।
git remote add thirdparty git@github.com:teivah/algodeck.git git fetch thirdparty git subtree add --prefix algodeck thirdparty master
মনোরপোতে কিছু কমিট করুন
echo dont panic >> algodeck/README.md git commit -a -m 'test commit'
সাবট্রিটি সরানোর জন্য এখন গিট ফিল্টার-শাখা ব্যবহারের চেষ্টা করুন।
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch algodeck' --prune-empty HEAD
গিট লগ আউটপুট পরীক্ষা করুন, আমি কেবলমাত্র আমার প্রাথমিক প্রতিশ্রুতি দেখার আশা করছি am
git log
git gc --prune=now
কেবল উপস্থিত না হওয়া কমিটগুলি মুছে ফেলব না git log
?
git log
, কোনও যুক্তি নেই এবং আমি এখনও পুরানো প্রতিশ্রুতিগুলি দেখতে পাচ্ছি।