Git: Git gc


Đăng ký nhận thông báo về những video mới nhất
Git LFS

Lệnh git gc là một lệnh duy trì kho. "Gc" là viết tắt của bộ sưu tập rác. Thực thi theo git gcnghĩa đen là bảo Git dọn dẹp mớ hỗn độn mà nó tạo ra trong kho lưu trữ hiện tại. Bộ sưu tập rác là một khái niệm bắt nguồn từ các ngôn ngữ lập trình được giải thích, phân bổ bộ nhớ động. Bộ sưu tập rác trong các ngôn ngữ được giải thích được sử dụng để khôi phục bộ nhớ đã không thể truy cập được vào chương trình thực thi.

Kho Git tích lũy nhiều loại rác. Một loại rác Git là mồ côi hoặc cam kết không thể truy cập. Cam kết Git có thể không truy cập được khi thực hiện các lệnh thay đổi lịch sử như git resets hoặc git rebase. Trong nỗ lực bảo tồn lịch sử và tránh mất dữ liệu, Git sẽ không xóa các xác nhận đã tách rời. Một cam kết tách rời vẫn có thể được kiểm tra, chọn anh đào và kiểm tra thông qua git log.

Ngoài việc xóa sạch cam kết, git gccũng sẽ thực hiện nén trên các Đối tượng Git được lưu trữ, giải phóng không gian đĩa quý giá. Khi Git xác định một nhóm các đối tượng tương tự, nó sẽ nén chúng thành một "gói". Các gói giống như các tệp zip của Git bjects và nằm trong ./git/objects/packthư mục trong kho lưu trữ.

Git gc thực sự làm gì?

Trước khi thực hiện, git gcđầu tiên kiểm tra một số git config giá trị. Những giá trị này sẽ giúp làm rõ phần còn lại của git gctrách nhiệm.

cấu hình git gc

gc.reflogExpire

Một biến tùy chọn mặc định là 90 ngày. Nó được sử dụng để thiết lập thời gian lưu giữ các bản ghi trong một nhánh.

gc.reflogExpireUnreachable

Một biến tùy chọn mặc định là 30 ngày. Nó được sử dụng để thiết lập thời gian lưu trữ hồ sơ reflog không thể truy cập được.

gc.aggressiveWindow

Một biến tùy chọn mặc định là 250. Nó kiểm soát thời gian dành cho giai đoạn nén delta của việc đóng gói đối tượng khi git gcđược thực hiện với --aggressivetùy chọn.

gc.aggressiveDepth

Biến tùy chọn mặc định là 50. Nó kiểm soát độ sâu của việc git-repacksử dụng nén trong khi git gc --aggresivethực hiện

gc.pruneExpire

Biến tùy chọn mặc định là "2 tuần trước". Nó đặt thời gian một vật thể không thể tiếp cận sẽ được bảo quản trước khi cắt tỉa

gc.worktreePruneExpire

Biến tùy chọn mặc định là "3 tháng trước". Nó đặt thời gian một cây làm việc cũ sẽ được bảo tồn trước khi bị xóa.

thực hiện git gc

Đằng sau hậu trường git gcthực sự thực hiện một bó lệnh con nội bộ khác như git prune, git repack, git pack và git rerere. Trách nhiệm cấp cao của các lệnh này là xác định bất kỳ đối tượng Git nào nằm ngoài các ngưỡng ngưỡng được đặt từ git gccấu hình. Sau khi xác định, các đối tượng này sau đó được nén hoặc cắt tỉa tương ứng.

git gc thực hành tốt nhất và FAQS

Bộ sưu tập rác được chạy tự động trên một số lệnh được sử dụng thường xuyên:

  • git pull
  • git merge
  • git rebase
  • git commit

Tần suất git gcnên được thực hiện thủ công tương ứng với mức độ hoạt động của kho lưu trữ. Một kho lưu trữ với một nhà phát triển đóng góp duy nhất sẽ cần phải thực thi git gcít thường xuyên hơn so với kho lưu trữ nhiều người dùng được cập nhật thường xuyên.

git gc vs git prune

git gclà một lệnh cha mẹ và git prunelà một đứa trẻ. git gcsẽ kích hoạt trong nội bộ git prune. git pruneđược sử dụng để loại bỏ các đối tượng Git đã được git gccấu hình coi là không thể truy cập được . Tìm hiểu thêm về git prune.

Git gc hung hăng là gì?

git gccó thể được gọi với --aggressivetùy chọn dòng lệnh. Các --aggressivetùy chọn nguyên nhân git gcđể dành nhiều thời gian hơn vào nỗ lực tối ưu hóa của nó. Điều này gây ra git gcchạy chậm hơn nhưng sẽ tiết kiệm nhiều dung lượng đĩa hơn sau khi hoàn thành. Các tác động của --aggressivelà liên tục và chỉ cần được chạy sau một khối lượng lớn các thay đổi đối với một kho lưu trữ.

Git gc tự động là gì?

Các git gc --autolệnh biến thể kiểm tra đầu tiên nếu có vệ sinh được yêu cầu trên repo trước khi thực hiện. Nếu nó tìm thấy vệ sinh là không cần thiết, nó thoát ra mà không làm bất kỳ công việc. Một số lệnh Git ngầm chạy git gc --autosau khi thực thi để dọn sạch mọi đối tượng lỏng lẻo mà chúng đã tạo.

Trước khi thực hiện git gc --autosẽ kiểm tra gitcấu hình cho các giá trị ngưỡng trên các đối tượng lỏng lẻo và kích thước nén đóng gói. Những giá trị này có thể được đặt với git config. Nếu kho lưu trữ vượt quá bất kỳ ngưỡng vệ sinh nào git gc --autosẽ được thực thi.

Bắt đầu với git gc

Có lẽ bạn đã sử dụng git gcmà không nhận thấy. Như đã thảo luận trong phần thực hành tốt nhất, nó được tự động gọi thông qua các lệnh được sử dụng thường xuyên. Nếu bạn muốn gọi thủ công, chỉ cần thực hiện git gc và bạn sẽ thấy một đầu ra cho biết công việc mà nó đã thực hiện.

Đăng ký nhận thông báo về những video mới nhất
« Prev: Git: Git LFS
» Next: Git: Git brune
Copied !!!