පහසු මාර්ගය
මෙය එතරම් පොදු සහ ප්රයෝජනවත් ක්රියාවක් බව පෙනේ, Git හි අධිපතීන් එය සැබවින්ම පහසු කර ඇත, නමුත් ඔබට Git හි නවතම අනුවාදයක් තිබිය යුතුය (> = 1.7.11 මැයි 2012). නවතම Git ස්ථාපනය කරන්නේ කෙසේද යන්න සඳහා උපග්රන්ථය බලන්න . එසේම, පහත ඇවිදීමේ දී සැබෑ ලෝක උදාහරණයක් තිබේ .
පැරණි repo සූදානම් කරන්න
cd <big-repo>
git subtree split -P <name-of-folder> -b <name-of-new-branch>
සටහන: <name-of-folder>
ප්රමුඛ හෝ පසුපස අක්ෂර අඩංගු නොවිය යුතුය. උදාහරණයක් ලෙස, subproject
MUST නම් ෆෝල්ඩරය සම්මත subproject
නොකළ යුතුය./subproject/
වින්ඩෝස් භාවිතා කරන්නන් සඳහා සටහන: ඔබේ ෆෝල්ඩරයේ ගැඹුර> 1 වන විට, <name-of-folder>
* නික්ස් ස්ටයිල් ෆෝල්ඩර බෙදුම්කරු (/) තිබිය යුතුය. උදාහරණයක් ලෙස, path1\path2\subproject
MUST නම් ෆෝල්ඩරය ලෙස සම්මත කළ යුතුයpath1/path2/subproject
නව repo එක සාදන්න
mkdir ~/<new-repo> && cd ~/<new-repo>
git init
git pull </path/to/big-repo> <name-of-new-branch>
නව repo එක GitHub හෝ ඕනෑම තැනකට සම්බන්ධ කරන්න
git remote add origin <git@github.com:user/new-repo.git>
git push -u origin master
පිරිසිදු කිරීමේ තුළ <big-repo>
, අවශ්ය නම්
git rm -rf <name-of-folder>
සටහන : මෙය ගබඩාවේ ඇති සියලුම reference තිහාසික යොමු කිරීම් අතහැර දමයි. මුරපදයක් සිදු කිරීම ගැන ඔබ සැබවින්ම සැලකිලිමත් වන්නේ නම් හෝ ඔබේ ෆෝල්ඩරයේ ගොනු ප්රමාණය අඩු කිරීමට අවශ්ය නම් පහත උපග්රන්ථය බලන්න .git
.
...
පාගමන
මේවා ඉහත පියවරයන්ම වේ , නමුත් භාවිතා කිරීම වෙනුවට මගේ ගබඩාව සඳහා මගේ නිශ්චිත පියවර අනුගමනය කරන්න <meta-named-things>
.
ජාවාස්ක්රිප්ට් බ්රව්සර් මොඩියුල නෝඩ් තුළ ක්රියාත්මක කිරීම සඳහා මා සතුව ඇති ව්යාපෘතියක් මෙන්න:
tree ~/node-browser-compat
node-browser-compat
├── ArrayBuffer
├── Audio
├── Blob
├── FormData
├── atob
├── btoa
├── location
└── navigator
මට තනි ෆෝල්ඩරයක් btoa
වෙනම Git ගබඩාවකට බෙදීමට අවශ්යයි
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
ඊළඟට මම GitHub හෝ Bitbucket හෝ වෙනත් ඕනෑම දෙයක් මත නව repo එකක් නිර්මාණය කර එය ලෙස එකතු කරමි origin
git remote add origin git@github.com:node-browser-compat/btoa.git
git push -u origin master
සුබ දවසක්!
සටහන: ඔබ a සමඟ repo එකක් නිර්මාණය කළේ නම් README.md
, .gitignore
සහ LICENSE
, ඔබට පළමුව ඇද ගැනීමට අවශ්ය වනු ඇත:
git pull origin master
git push origin master
අවසාන වශයෙන්, මට විශාල repo වෙතින් ෆෝල්ඩරය ඉවත් කිරීමට අවශ්ය වනු ඇත
git rm -rf btoa
...
උපග්රන්ථය
මැකෝස් හි නවතම Git
භාවිතා Git නවතම අනුවාදය ලබා ගැනීමට බරපැනක් :
brew install git
උබුන්ටු හි නවතම 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 ට ස්තූතියි.
ඔබේ ඉතිහාසය හිස් කිරීම
පෙරනිමියෙන් Git වෙතින් ලිපිගොනු ඉවත් කිරීම ඇත්ත වශයෙන්ම ඒවා ඉවත් නොකරයි, එයින් කියවෙන්නේ ඒවා තවදුරටත් එහි නොමැති බවයි. ඔබට historical තිහාසික යොමු ඉවත් කිරීමට අවශ්ය නම් (එනම් ඔබට මුරපදයක් තිබේ නම්), ඔබ මෙය කළ යුතුය:
git filter-branch --prune-empty --tree-filter 'rm -rf <name-of-folder>' HEAD
ඊට පසු ඔබගේ ගොනුව හෝ ෆෝල්ඩරය Git ඉතිහාසයේ කිසිසේත් නොපෙන්වන බව ඔබට පරීක්ෂා කළ හැකිය
git log -- <name-of-folder> # should show nothing
කෙසේ වෙතත්, ඔබට GitHub සහ ඒ හා සමාන මකාදැමීම් "තල්ලු" කළ නොහැක . ඔබ උත්සාහ කළහොත් ඔබට දෝෂයක් ඇති වන අතර ඔබට එය කිරීමට git pull
පෙර ඔබට සිදුවනු ඇත git push
- ඉන්පසු ඔබ ඉතිහාසයේ සෑම දෙයක්ම ලබා ගැනීමට නැවත පැමිණේ.
එබැවින් ඔබට "සම්භවය" වෙතින් ඉතිහාසය මකා දැමීමට අවශ්ය නම් - එය GitHub, Bitbucket යනාදියෙන් මකාදැමීමට අදහස් කරයි - ඔබට repo මකා දමා repo හි කප්පාදු කළ පිටපතක් නැවත තල්ලු කළ යුතුය. නමුත් රැඳී සිටින්න - තවත් බොහෝ දේ ඇත ! - මුරපදයක් හෝ ඒ හා සමාන දෙයක් ඉවත් කිරීම ගැන ඔබ සැබවින්ම සැලකිලිමත් වන්නේ නම් ඔබට උපස්ථය කප්පාදු කිරීමට අවශ්ය වේ (පහත බලන්න).
කිරීම .git
කුඩා
ඉහත සඳහන් මකාදැමීමේ ඉතිහාස විධානය තවමත් උපස්ථ ලිපිගොනු රාශියක් අතහැර දමා ඇත - මන්ද යත්, ඔබේ ගබඩාව අහම්බෙන් විනාශ නොකිරීමට 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
එයින් කියැවුණේ, ඔබට අවශ්ය බව ඔබ දන්නේ නැත්නම් මෙම පියවරයන් නොකිරීමට මම නිර්දේශ කරමි - ඔබ වැරදි උප බහලුම කප්පාදු කළහොත් පමණක් ද? ඔබ repo තල්ලු කරන විට උපස්ථ ලිපිගොනු ක්ලෝන නොවිය යුතුය, ඒවා ඔබගේ දේශීය පිටපතෙහි ඇත.
ණය
git filter-branch
පහත මගේ පිළිතුර බලන්න.