在使用gitlab進行版本管理的過程中,我們可能會遇到一個問題:git庫中存儲了太多大文件,導致gitlab的儲存空間不足。此時,我們就需要刪除git中的git大文件夾來騰出一些空間。但是,由于git的特殊性質,刪除文件夾不是和其他文件一樣刪除,而是需要一些額外操作。本文將介紹如何在gitlab上刪除git大文件夾的方法。
1、確認Git大文件夾
首先,我們需要確認在GitLab上庫中的哪個文件夾占用了最多的空間,進而決定哪個文件夾是Git大文件夾。我們可以通過以下命令來確定:
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | sed -n 's/^blob //p' | sort --numeric-sort --key=2 | cut -c 1-12,41- | # 此時應該得到一個類似如下的輸出 # 6fb171?9336398 vendor/assets/bower_components/bootstrap/dist/js/bootstrap.min.js # 8cf6f9?9430549 vendor/assets/bower_components/jquery/jquery.js # 45babf?11219868 vendor/assets/bower_components/angular/angular.js # … awk '$2 >= 1000000 { print }'
此命令的作用是列舉出當前庫中所有所有提交中的 blob 對象,并按照 size 從小到大排序。最后的 awk ‘$2 >= 1000000 { print }’ 表示只輸出文件大小大于等于 1000000 字節的文件。這個命令中的數字可以自行更改成你所需要的大小。
2、從GitLab數據庫中刪除Git大文件夾
在確認了Git大文件夾之后,我們可以通過以下命令從GitLab的數據庫中刪除該文件夾:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql -d gitlabhq_production
此命令會進入GitLab的數據庫中。在這里,我們需要注意以下幾點:
- 在執行這條命令之前,請確保你已經備份了整個gitlabhq_production數據庫;
- 進入數據庫后,你需要輸入明確的SQL指令,請謹慎操作;
- 請確認你所登錄的用戶有權限進行數據庫的操作。
在進入數據庫之后,我們可以通過以下命令進入出我們所需要刪除的文件夾所在的項目:
x SELECT * FROM projects;
此命令會列舉出數據庫中所包含的所有項目,我們可以用這個命令找到我們需要刪除的Git大文件夾所在的項目。
接下來,我們需要根據項目的ID,進入該項目的repositories表中。
SELECT * FROM repositories WHERE project_id = <project_id>;
此命令會在repositories表中找到在指定項目中的repository記錄。我們需要記下這個記錄的ID,以便后續操作。
接下來,我們需要進入該repository記錄所對應的repository_storages表中。
SELECT * FROM repository_storages WHERE repository_id = <repository_id>;
在上述命令中,
現在,我們需要確定我們需要刪除的大文件夾所在的存儲路徑。如果你不確定這個路徑是什么,可以打開GitLab的頁面,到存儲空間管理頁面,找到對應項目的存儲路徑。
最后,我們就可以通過以下命令從數據庫中刪除指定的大文件夾了:
DELETE FROM repository_uploads WHERE path LIKE '<path>/%';
在上述命令中,
3、刪除服務器上的Git大文件夾
在數據庫中刪除Git大文件夾后,我們還需要在服務器上將這些文件從磁盤上徹底刪除。你可以直接通過rm命令刪除大文件夾,例如:
sudo rm -rf <path>
在上述命令中,
完畢!你已經成功地在GitLab上刪除了Git大文件夾。
總結
本文介紹了如何在GitLab上刪除Git大文件夾。要刪除文件夾主要需要進行兩個步驟:從數據庫中刪除文件夾記錄,然后從磁盤上徹底刪除文件夾。刪掉Git大文件夾之后,我們可以為GitLab騰出更多的空間來存儲其他文件。