Xog xasaasi ah ama isticmaalka xusuusta oo aad u badan: Waxaa jira sababo wanaagsan oo lagu doonayo in la beddelo taariikhda Git. Boostada blog-ga , waxaan ku sharaxay sida loo nadiifiyo faylasha taariikhda Git iyadoo la adeegsanayo BFG . Meesha daciifka ah ee BFG waa taageero la'aanta waddooyinka tooska ah , markaa si gaar ah kama saari kartid faylasha ama faylalka ku jira fayl-hoosaadyada taariikhda. Taas, waa waqtigii la eegi lahaa xalal kale.
Marka lagu daro laanta miiraha git ee aan si rasmi ah loogu talin , git-filter-repo waa mid ka mid ah qalabka lagu nadiifiyo taariikhda. Ka dib markii la rakibo gaaban, waxaan marka hore falanqeyneynaa kaydka oo aan helnaa, tusaale ahaan, galka ugu weyn taariikhda:
git filter-repo --analyze
Waa hagaag gal gal .git/filter-repo/analysis
soo saaray dhammaan noocyada faylalka TXT:
directories-all-sizes.txt
extensions-all-sizes.txt
path-all-sizes.txt
- ...
Way mudan tahay faylka directories-all-sizes.txt
si dhow u fiirso:
=== All directories by reverse size ===
Format: unpacked size, packed size, date deleted, directory name
4624417043 3796607988 <present> <toplevel>
4475940396 3778033787 <present> wp-content
4060236681 3694449320 <present> wp-content/uploads
305163809 70576241 <present> wp-content/plugins
123818107 15442735 <present> wp-includes
...
Badanaa waxay dhacdaa in aad muddo dheer iska indho-tirtay oo aad ka saartay xogta HEAD ee taariikhda (tusaale, galka warbaahinta WordPress wp-content/uploads/
ama mid si lama filaan ah loo riixay node_modules
- ama vendor
-Binder).
Guud ahaan waxay ku talinaysaa git-filter-repo
nadiifinta ka dib, riixaya meel cusub oo madhan. Waxaa jira sababo badan oo halkan ku qoran, sababta ay tani macno samaynayso ugana ilaalinayso dhibaatooyin badan. Si kastaba ha ahaatee, way dhici kartaa inaad rabto inaad ku riixdo bakhaar isku mid ah taasina waxay sidoo kale suurtogal u tahay dhowr tilmaamood.
Muhiimad ahaan, meelaha ugu weyn ee martigelinta koodka GitHub iyo GitLab ku talin habab kala duwan, kuwaas oo qaarkood ka duwan midba midka kale. Tusaale ahaan, GitHub waxaan ka saareynaa wp-content/uploads/
iyadoo la adeegsanayo tillaabooyinka soo socda git-filter-repo
laga bilaabo taariikhda:
mkdir tmp-repo
cd tmp-repo
git clone git@github.com:foo/bar.git .
cp .git/config /tmp/config-backup
git filter-repo --invert-paths --path wp-content/uploads/
# option 1: same repo
mv /tmp/config-backup .git/config
git push origin --force --all
# option 2: new repo
git remote add origin git@github.com:foo/bar-new.git
git push origin --force --all
cd ..
rm -rf tmp-repo
Waxaan hadda sidoo kale ka hubin karnaa cabbirka meel fog (beddelka cabbirka API iyo gudaha UI waxay qaadan kartaa ilaa 24 saacadood). Si tan loo sameeyo, fur goobaha kaydka (haddii kaydka uu leeyahay urur, waa inaad marka hore ku dartaa akoonkaaga ururka). Hadda waxaan aragnaa cabbirka:
Nidaamku wax yar ayuu kaga duwan yahay GitLab:
mkdir tmp-repo
cd tmp-repo
# option 1: same repo
# Settings > General > Advanced > Export project > download tar.gz file into tmp-repo
tar xzf 20*.tar.gz
git clone --bare --mirror project.bundle
cd project.git
git filter-repo --invert-paths --path wp-content/uploads/
cp ./filter-repo/commit-map /tmp/commit-map-1
# copying the commit-map has to be done after every single command from git filter-repo
# you need the commit-map files later
git remote remove origin
git remote add origin git@gitlab.com:foo/bar.git
# Settings > Repository > Protected branches/Protected branches >
# enable "Allowed to force push to main/master"
git push origin --force 'refs/heads/*'
git push origin --force 'refs/tags/*'
git push origin --force 'refs/replace/*'
# Settings > Repository > Protected branches/Protected branches >
# disable "Allowed to force push to main/master"
date
# wait 30 minutes (😱)
date
# Settings > Repository > upload /tmp/commit-map-X
# option 2: new repo
git clone git@gitlab.com:foo/bar.git .
git filter-repo --invert-paths --path wp-content/uploads/
git remote add origin git@gitlab.com:foo/bar-new.git
# Settings > Repository > Protected branches/Protected branches >
# enable "Allowed to force push to main/master"
git push origin --force --all
# Settings > Repository > Protected branches/Protected branches >
# disable "Allowed to force push to main/master"
cd ..
rm -rf tmp-repo
Sugitaan kale oo ~ 5 daqiiqo ah ka dib waan hoos geli karnaa Settings > Usage Quotas
fiiri booska kaydinta:
Ka saarista ka dib, waxaa muhiim ah in dhammaan horumariyayaasha ku lugta leh ay ku lug yeeshaan tallaabooyinka ugu dambeeya: Haddii isticmaaluhu hadda sameeyo riixitaan caadi ah oo wata nuqulkooda maxalliga ah, tani waxay keeni doontaa in faylasha waaweyni ay dib ugu noqdaan kaydka dhexe. Sidaa darteed, 3 doorasho ee soo socda ayaa lagu talinayaa:
- "nin miskiin ah oo cusub"
rm -rf .git && git clone xxx temp && mv temp/.git ./.git && rm -rf temp
- Wixii faylasha la beddelay (waxay kuxirantahay codsiga):
git checkout -- .
ama.git add -A . && git commit -m "Push obscure file changes." && git push
- "meel eber ka soo bilow"
rm -rf repo && git clone xxx .
- "jiid fool xun oo dib u dhis ah"
git pull -r
- Halkan waxa aad weli ku haysaa taariikhda aan nadiifka ahayn, laakiin inta badan kiisaska si lama filaan ah uguma qori kartid kaydka fog ee kala duwanaanshiyaha maxalliga ah
Inta lagu jiro kootada hadda jirta (gaar ahaan iyadoo ay ugu wacan tahay xannibaadaha cusub ee GitLab ), had iyo jeer waxaa habboon in la hubiyo cabbirka taariikhda bakhaarkaaga oo aad nadiifiso haddii loo baahdo:
GitHub Bilaash | GitLab bilaash ah | |
Xadka cabbirka ugu badan ee faylka | 100MB | ∞ |
Xadka cabbirka ugu badan ee repo | 5,000MB | ∞ |
Xadka ugu badan ee tirinta repo | ∞ | ∞ |
Xadka cabbirka guud ee ugu badan | ∞ | 5,000MB |
Ugu dambayntii, waxa kale oo mudan in la eego is-martigeliyay, kala duwanaanshiyaha xorta ah sida Gitea tuurid. Dadaal yar oo aad samayn karto a server aad caato ah tusaale Git iskiis u martigeliyay (GUI per SSL la hubsaday, Gurmad ka mid ah, xakamaynta API awood leh) martigeliyaha, kuwaas oo sidoo kale aad u fiican habayn sidoo kale wuu ka sarreeyaa xagga ilaalinta xogta. Halkan, habka, waxaad sidoo kale isticmaali kartaa git-filter-repo
Si fudud u hagaaji meelaha kaydka ah:
mkdir tmp-repo
cd tmp-repo
git clone git@git.tld.com:foo/bar.git .
cp .git/config /tmp/config-backup
git filter-repo --invert-paths --path wp-content/uploads/
# option 1: same repo
mv /tmp/config-backup .git/config
git push origin --mirror
# login on the remote command line and run in the repo-folder
sudo -u git git reflog expire --expire=now --all
sudo -u git git gc --aggressive --prune=now
# if you face memory limit issues, modify the git configuration
sudo -u git git config --global pack.windowMemory "100m"
sudo -u git git config --global pack.packSizeLimit "100m"
sudo -u git git config --global pack.threads "1"
# if in web ui the size does not change, make a slight
# modification to a file and push again normally
# option 2: new repo
git remote add origin git@git.tld.com:foo/bar-new.git
git push origin --force --all
cd ..
rm -rf tmp-repo
Halkan si gaar ah waa amarka sudo -u git git gc --aggressive --prune=now
muhiim ah (kor u kaca git gc
haddii kale mid aad u dheer buu leeyahay waqti goyn 2 toddobaad).