Kích hoạt bảo trì tự động trong 30 giây
Đừng đợi đến khi gõ git status mà đủ thời gian để pha xong tách cà phê mới tìm cách tối ưu. Nếu anh em đang ôm một dự án vài năm tuổi với file .git nặng hàng GB, hãy để Git tự dọn dẹp đống lộn xộn đó. Chỉ cần một lệnh duy nhất tại thư mục root:
git maintenance start
Lệnh này cực kỳ lợi hại vì nó sẽ:
- Đưa repository vào danh sách chăm sóc đặc biệt của Git.
- Tự động cài đặt
crontab(macOS/Linux) hoặcTask Scheduler(Windows) để chạy các tác vụ dọn rác ngầm.
Muốn biết Git đã thực sự “lên lịch hẹn” chưa? Anh em gõ lệnh này để check:
git maintenance status
Tại sao dự án lớn bắt buộc phải dùng lệnh này?
Thực tế tại một dự án Monorepo mình từng tham gia, file .git đã phình lên tới 15GB. Mỗi lần git fetch mất gần 3 phút, cực kỳ ức chế. Sau khi bật maintenance, thời gian này giảm xuống chỉ còn khoảng 30 giây.
Thông thường, cơ chế git gc (garbage collection) chỉ chạy khi lượng file rác vượt quá ngưỡng nhất định. Ngặt nỗi, nó thường chọn đúng lúc bạn đang vội push code để nhảy ra làm treo terminal. git maintenance (có từ bản Git 2.29) giải quyết triệt để việc này bằng cách chia nhỏ các tác vụ nặng và chạy chúng vào khung giờ máy nghỉ.
Điểm mặt các tác vụ “vàng” chạy ngầm
Khi bật chế độ này, Git sẽ âm thầm thực hiện 3 việc quan trọng sau:
1. Prefetch (Chạy mỗi giờ)
Thay vì đợi bạn gõ lệnh, Git tự động tải trước các object mới từ server về một vùng đệm (refs/prefetch/). Khi bạn thực sự git fetch, dữ liệu đã nằm sẵn ở local. Tốc độ lúc này gần như tức thì.
2. Commit-graph (Chạy mỗi giờ)
Đây là “bản đồ” giúp Git duyệt lịch sử commit nhanh hơn. Nếu không có nó, các tool như GitKraken hay lệnh git log --graph phải quét toàn bộ object rất tốn CPU. Có commit-graph, việc hiển thị nhánh (branch) mượt mà hơn hẳn.
3. Loose-objects (Chạy hàng ngày)
Nó gom các file rời rạc vào các packfiles nén. Việc này không chỉ giải phóng dung lượng ổ cứng mà còn giúp các thao tác đọc ghi file nhanh hơn rõ rệt.
# Chạy thử thủ công để cảm nhận tốc độ
git maintenance run --task=commit-graph
Tùy biến cho nhu cầu “hardcore”
Cấu hình mặc định thường là đủ, nhưng đôi khi bạn cần can thiệp sâu hơn qua file .config.
Tắt tính năng fetch tự động
Nếu lo ngại về băng thông hoặc bảo mật khi Git tự ý kết nối server, anh em có thể tắt riêng task prefetch:
git config maintenance.prefetch.enabled false
git config maintenance.commit-graph.enabled true
Dọn dẹp triệt để với Incremental Repack
Với repo chứa nhiều file binary (như ảnh, video), task incremental-repack sẽ gom các gói dữ liệu nhỏ thành gói lớn để tối ưu chỉ mục. Bạn có thể ép nó chạy bằng lệnh:
git maintenance run --task=incremental-repack
Vài lưu ý “xương máu” sau 6 tháng áp dụng
Triển khai cho cả team không khó, nhưng cần nhớ vài điểm sau:
- Không lo lag máy: Các task này chạy với độ ưu tiên thấp nhất (low priority). Nếu bạn đang render video hay chiến game, OS sẽ tự động bắt Git xếp hàng chờ.
- Lỗi trên Windows: Một số máy công ty bị chặn quyền
Task Scheduler. Nếu lệnhstartbáo lỗi, bạn cần nhờ IT cấp quyền hoặc tự thêm task thủ công. - Cứu tinh cho CI/CD: Với các con server chạy Jenkins hay GitLab Runner, bật maintenance giúp tránh lỗi “Disk full” do tích tụ dữ liệu rác lâu ngày.
Tóm lại, nếu thấy Git bắt đầu ì ạch, đừng vội xóa repo đi clone lại. Hãy thử git maintenance trước. Nếu muốn hủy bỏ vì dự án đã kết thúc, chỉ cần gõ:
git maintenance stop
Lệnh này sẽ dọn sạch các lịch trình đã cài đặt, trả lại trạng thái nguyên bản cho hệ thống của bạn.

