সহজ উপায় ™
দেখা যাচ্ছে যে এটি এমন একটি সাধারণ এবং দরকারী অনুশীলন যা গিটের ওভারলর্ডরা এটি সত্যই সহজ করে তুলেছে তবে আপনার কাছে গিট (> = 1.7.11 মে 2012) এর একটি নতুন সংস্করণ থাকতে হবে। সর্বশেষ গিটটি কীভাবে ইনস্টল করতে হয় তার জন্য পরিশিষ্ট দেখুন । এছাড়াও, নীচের ওয়াকথ্রোতে একটি বাস্তব-বিশ্বের উদাহরণ রয়েছে ।
পুরানো রেপো প্রস্তুত
cd <big-repo>
git subtree split -P <name-of-folder> -b <name-of-new-branch>
দ্রষ্টব্য: <name-of-folder>
অবশ্যই শীর্ষস্থানীয় বা পিছনে অক্ষর থাকা উচিত নয়। উদাহরণস্বরূপ, নামকৃত ফোল্ডারটি subproject
অবশ্যই পাস করা হবে subproject
, না./subproject/
উইন্ডোজ ব্যবহারকারীদের জন্য নোট: আপনার ফোল্ডারের গভীরতা> 1 এর ক্ষেত্রে <name-of-folder>
অবশ্যই * নিক্স স্টাইলের ফোল্ডার বিভাজক (/) থাকতে হবে। উদাহরণস্বরূপ, path1\path2\subproject
MUST নামের ফোল্ডারটি হিসাবে পাস করা উচিতpath1/path2/subproject
নতুন রেপো তৈরি করুন
mkdir ~/<new-repo> && cd ~/<new-repo>
git init
git pull </path/to/big-repo> <name-of-new-branch>
নতুন রেপোকে গিটহাব বা অন্য যে কোনও জায়গায় লিঙ্ক করুন
git remote add origin <git@github.com:user/new-repo.git>
git push -u origin master
পরিষ্কারের ভিতরে <big-repo>
, ইচ্ছা হলে
git rm -rf <name-of-folder>
দ্রষ্টব্য : এটি সংগ্রহস্থলের সমস্ত .তিহাসিক তথ্যসূত্র রেফার করে। নীচের পরিশিষ্ট দেখুন যদি আপনি সত্যিকার অর্থে পাসওয়ার্ড নিয়ে উদ্বিগ্ন হন বা আপনার .git
ফোল্ডারের ফাইলের আকার হ্রাস করতে হবে ।
...
walkthrough
এগুলি উপরের মতো একই পদক্ষেপ , তবে ব্যবহারের পরিবর্তে আমার সংগ্রহশালার জন্য আমার সঠিক পদক্ষেপগুলি অনুসরণ করে <meta-named-things>
।
নোডে জাভাস্ক্রিপ্ট ব্রাউজার মডিউলগুলি প্রয়োগ করার জন্য আমার এখানে একটি প্রকল্প রয়েছে:
tree ~/node-browser-compat
node-browser-compat
├── ArrayBuffer
├── Audio
├── Blob
├── FormData
├── atob
├── btoa
├── location
└── navigator
আমি একটি একক ফোল্ডারকে btoa
আলাদা গিট ভাণ্ডারে বিভক্ত করতে চাই
cd ~/node-browser-compat/
git subtree split -P btoa -b btoa-only
আমার এখন একটি নতুন শাখা রয়েছে, btoa-only
এটির জন্য কেবল প্রতিশ্রুতি রয়েছে btoa
এবং আমি একটি নতুন সংগ্রহশালা তৈরি করতে চাই।
mkdir ~/btoa/ && cd ~/btoa/
git init
git pull ~/node-browser-compat btoa-only
এরপরে আমি গিটহাব বা বিটবকেট, বা যা কিছুতে একটি নতুন রেপো তৈরি করি এবং এটি হিসাবে যুক্ত করি origin
git remote add origin git@github.com:node-browser-compat/btoa.git
git push -u origin master
শুভ দিন!
দ্রষ্টব্য: আপনি যদি একটি সঙ্গে একটি রেপো নির্মিত তাহলে README.md
, .gitignore
এবং LICENSE
, আপনাকে প্রথমে টান করতে হবে:
git pull origin master
git push origin master
শেষ অবধি, আমি বড় রেপো থেকে ফোল্ডারটি সরাতে চাই
git rm -rf btoa
...
উপাঙ্গ
ম্যাকোজে সর্বশেষ গিট
হোমব্রিউ ব্যবহার করে গিটের সর্বশেষতম সংস্করণটি পেতে :
brew install git
উবুন্টুতে সর্বশেষ গিট
sudo apt-get update
sudo apt-get install git
git --version
যদি এটি কাজ না করে (আপনার কাছে উবুন্টুর একটি খুব পুরানো সংস্করণ রয়েছে), চেষ্টা করুন
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
যদি এটি এখনও কাজ করে না, চেষ্টা করুন
sudo chmod +x /usr/share/doc/git/contrib/subtree/git-subtree.sh
sudo ln -s \
/usr/share/doc/git/contrib/subtree/git-subtree.sh \
/usr/lib/git-core/git-subtree
মন্তব্য থেকে rui.araujo ধন্যবাদ।
আপনার ইতিহাস সাফ করা হচ্ছে
ডিফল্টরূপে গিট থেকে ফাইলগুলি সরানো আসলে সেগুলি সরাবে না, কেবলমাত্র তারা বাধ্য হয় যে তারা আর নেই। আপনি যদি আসলে theতিহাসিক তথ্যসূত্রগুলি মুছতে চান (যেমন আপনার কাছে একটি পাসওয়ার্ড রয়েছে) তবে আপনার এটি করতে হবে:
git filter-branch --prune-empty --tree-filter 'rm -rf <name-of-folder>' HEAD
এর পরে আপনি পরীক্ষা করতে পারেন যে আপনার ফাইল বা ফোল্ডারটি এখন আর গিট ইতিহাসে দেখাবে না
git log -- <name-of-folder> # should show nothing
তবে, আপনি গিটহাব এবং অন্যর মতো মুছে ফেলতে "পুশ" করতে পারবেন না । যদি আপনি চেষ্টা করেন তবে একটি ত্রুটি পাবেন এবং যা করার git pull
আগে আপনাকে তা করতে হবে git push
- এবং তারপরে আপনি নিজের ইতিহাসে সমস্ত কিছু ফিরে পেয়ে যাবেন ।
সুতরাং আপনি যদি ইতিহাসটি "উত্স" থেকে মুছে ফেলতে চান - যার অর্থ এটি গিটহাব, বিটবুকিট, ইত্যাদি থেকে মুছতে পারে - আপনাকে রেপো মুছতে হবে এবং রেপোর একটি ছাঁটাই অনুলিপিটি আবার চাপ দিতে হবে। তবে অপেক্ষা করুন - আরও আছে ! - আপনি যদি সত্যিই কোনও পাসওয়ার্ড বা এমন কিছু থেকে মুক্তি পাওয়ার বিষয়ে উদ্বিগ্ন হন তবে আপনাকে ব্যাকআপ ছাঁটাই করতে হবে (নীচে দেখুন)।
আরও .git
ছোট করা
পূর্বোক্ত মুছে ফেলা ইতিহাসের কমান্ডটি এখনও একগুচ্ছ ব্যাকআপ ফাইলের পিছনে ফেলেছে - কারণ গিট আপনাকে দুর্ঘটনাক্রমে আপনার রেপো নষ্ট না করতে সহায়তা করার ক্ষেত্রে অত্যন্ত বিনয়ী। এটি শেষ পর্যন্ত অনাথ ফাইলগুলি দিন এবং মাসগুলিতে মুছে ফেলা হবে, তবে আপনি যদি বুঝতে পারেন যে আপনি দুর্ঘটনাক্রমে এমন কিছু মুছলেন যা আপনি চান না।
তাই আপনি যদি সত্যিই চাই ট্র্যাশ খালি করার ক্লোন আকার হ্রাস একটি রেপো এর অবিলম্বে আপনার এই সত্যিই অদ্ভুত জিনিস সব করতে হবে:
rm -rf .git/refs/original/ && \
git reflog expire --all && \
git gc --aggressive --prune=now
git reflog expire --all --expire-unreachable=0
git repack -A -d
git prune
এটি বলেছিল, আমি এই পদক্ষেপগুলি সম্পাদন না করার পরামর্শ দিচ্ছি যদি না আপনি জানেন যে আপনার প্রয়োজন - ঠিক যদি আপনি ভুল সাব-ডিরেক্টরিকে ছাঁটাই করে থাকেন, তাই আপনি? আপনি রেপো চাপ দেওয়ার সময় ব্যাকআপ ফাইলগুলি ক্লোন করা উচিত নয়, সেগুলি কেবল আপনার স্থানীয় অনুলিপিটিতে থাকবে।
ধার
git filter-branch
আমার উত্তর নীচে দেখুন এখন এটি তুচ্ছ ।