ইতিহাস রক্ষণাবেক্ষণের জন্য কীভাবে আমি গিটার সংগ্রহশালা থেকে নতুন একটি সংগ্রহস্থলের একক ডিরেক্টরিতে স্থানান্তর করতে পারি?


110

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

আমি প্রতিটি প্রকল্পের জন্য ভান্ডারটি ক্লোন করতে এবং অন্যান্য সমস্ত প্রকল্প প্রতিবারই মুছে ফেলতে পারতাম, তবে প্রতিটি নতুন প্রকল্পের ভাণ্ডারে ক্লোন করা ইতিহাস এড়ানো ভাল উপায় কি?


2
গিটার-সাবমডিউলগুলি ট্যাগ যুক্ত করা হয়েছে যেহেতু এটি কোনও রেপোর অংশকে সাবমোডিয়ালে রূপান্তর করার জন্য খুব কার্যকর।
idbrii

উত্তর:


99

আপনি git filter-branchকোনও প্রকল্পের ইতিহাস পুনর্লিখন করতে ব্যবহার করতে পারেন । ডকুমেন্টেশন থেকে:

ভান্ডার / এর প্রকল্পের মূল হয়ে গেছে যেন দেখতে এই সংগ্রহস্থলটি পুনরায় লেখার জন্য এবং অন্যান্য সমস্ত ইতিহাস বাতিল করে দিন:

git filter-branch --subdirectory-filter foodir -- --all

আপনার রেপোর কয়েকটি অনুলিপি তৈরি করুন, প্রতিটি উপ-ডিরেক্টরিতে যা আপনি বিভক্ত করতে চান তার জন্য এটি করুন এবং আপনি যা সন্ধান করছেন তা শেষ করে দেওয়া উচিত।


1
আমি যদি খাদ্যতাকে বাদ দিতে এবং তার সমস্ত ইতিহাস সরিয়ে দিতে চাই তবে কী হবে?
সৈয়দগনু

1
দ্রষ্টব্য: আপনি যদি বেশ কয়েকটি ডিরেক্টরি চান তবে আপনার --subdirectory-filterএকাধিকবার নির্দিষ্ট করতে হবে । ইজি git filter-branch --subdirectory-filter foodir --subdirectory-filter bardirইত্যাদি --subdirectoryএকাধিক ডায়ার নিবে না, তবে একাধিকবার নির্দিষ্ট করা যাবে।
এনাব্রেনটেন

3
@ অ্যাডাম আপনি যদি foodirমূল প্রকল্পে ইতিহাসের ইতিহাস পুনর্লিখন না করে রাখতে চান তবে কেবল git rm -r foodirপর্যাপ্ত পরিমাণে থাকা উচিত (এটি আপনার কার্যকারী গাছের অনুলিপিটি মুছে ফেলবে; আপনি যদি তা না চান তবে ব্যবহার করুন --cached)। আপনি যদি ইতিহাস থেকে এটি পুরোপুরি সরিয়ে ফেলতে চেয়েছিলেন (@ ইলিয়াসের প্রশ্নের উত্তরও), আপনি এমন কিছু চানgit filter-branch --index-filter 'git rm -r --cached --ignore-unmatched foodir' -- --all
ব্রায়ান ক্যাম্পবেল

2
@ ইলিয়াস দুঃখিত, আমি আপনার প্রশ্নটি আগে মিস করেছি, কোনও ডিরেক্টরি এবং এর ইতিহাস কীভাবে মুছবেন তার উত্তরের জন্য উপরে আমার উত্তরটি দেখুন।
ব্রায়ান ক্যাম্পবেল

2
@ মিলিয়াস হ্যাঁ, এটিও কার্যকর। একটি বড় প্রকল্পের জন্য --index-filterসমাধানটি এর চেয়ে দ্রুততর হয় --tree-filter, কারণ এটি আসলে ফাইলগুলি পরীক্ষা করে দেখতে হয় না, এটি কেবল সূচকটি সরাসরি পরিচালনা করতে পারে। --tree-filterতবে ব্যবহার করতে, যেমন আপনি বরং সূচক ম্যানিপুলেশন অপারেশন সঙ্গে কাজ করতে থাকার চেয়ে সাধারণ filsystem অপারেশন ব্যবহার করতে পারেন একটু সহজ হতে পারে।
ব্রায়ান ক্যাম্পবেল

4

কোনও ফোল্ডারকে নতুন সংগ্রহস্থল হিসাবে রফতানি করতে আপনার প্রয়োজন:

  1. আপনি যে ফোল্ডারটি রফতানি করতে চান তা যেখানে সংগ্রহস্থলটি ক্লোন করতে।
  2. রফতানীত ফোল্ডারটি সঞ্চয় করতে আপনার হোস্টিং সরবরাহকারীকে গিটহাব হিসাবে একটি খালি সংগ্রহস্থল তৈরি করতে।
  3. ক্লোন করা সংগ্রহস্থল ফোল্ডারটি খুলুন এবং এই আদেশটি চালান:

    git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master
    

1
git subtreeসাইগউইন প্যাকেজ হিসাবে উপলভ্য নয়। আপনার যদি এটির প্রয়োজন হয়: stackoverflow.com/a/27116828/2484903
জ্যাক মিলার

2

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

অতীতে আমি কেবল এটি ক্লোন করে এগিয়ে চলেছি। এটি জিনিসগুলিকে আরও বড় করে তোলে তবে ডিস্কের স্থানটি সস্তা; আমার সময় ব্যয়বহুল।

কোনও ডিরেক্টরি ছড়িয়ে দেওয়ার জন্য আমি কোনও সরঞ্জামও জানিনা। আমি মনে করি আপনি ডিরেক্টরিতে গিট-লগ করে সমস্ত কমিটগুলি খুঁজে পেতে পারেন তবে গিট-ফাস্ট-এক্সপোর্টের মতো কিছু দিয়ে কমিটগুলি পুনরায় খেলবেন?


আমি উজ্জীবিত হয়েছিল কারণ এটি নেতিবাচক হওয়ার যোগ্য নয় - আমি অবশ্যই এই পদ্ধতির অনুসরণ করব না তবে দেখতে পাচ্ছি তিনি চেষ্টা করছেন
অ্যালভিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.