git gc --aggressive vs git repack


88

Tôi đang tìm cách để giảm kích thước của một gitkho lưu trữ. Tìm kiếm đưa tôi đến git gc --aggressivehầu hết các lần. Tôi cũng đã đọc rằng đây không phải là cách tiếp cận ưa thích.

Tại sao? tôi nên biết những gì nếu tôi đang chạy gc --aggressive?

git repack -a -d --depth=250 --window=250được khuyến khích hơn gc --aggressive. Tại sao? Làm thế nào để repackgiảm kích thước của một kho lưu trữ? Ngoài ra, tôi không hoàn toàn rõ ràng về các lá cờ --depth--window.

Tôi nên chọn cái gì giữa gcrepack? Khi nào tôi nên sử dụng gcrepack?

Câu trả lời:


76

Ngày nay không có sự khác biệt: git gc --aggressivehoạt động theo đề xuất của Linus vào năm 2007; xem bên dưới. Kể từ phiên bản 2.11 (Q4 2016), git mặc định ở độ sâu 50. Cửa sổ có kích thước 250 là tốt vì nó quét một phần lớn hơn của mỗi đối tượng, nhưng độ sâu ở 250 là xấu vì nó làm cho mọi chuỗi tham chiếu rất sâu cũ. đối tượng, làm chậm tất cả các hoạt động git trong tương lai để sử dụng đĩa thấp hơn một chút.


Bối cảnh lịch sử

Linus đề xuất (xem bên dưới để biết bài đăng danh sách gửi thư đầy đủ) git gc --aggressivechỉ sử dụng khi bạn có, theo cách nói của anh ấy, "một nhóm thực sự tồi tệ" hoặc "thực sự tồi tệ khủng khiếp", tuy nhiên "hầu như luôn luôn, trong các trường hợp khác, nó thực sự rất tệ điều cần làm. ” Kết quả thậm chí có thể khiến kho lưu trữ của bạn trong tình trạng tồi tệ hơn so với khi bạn bắt đầu!

Lệnh mà anh ấy gợi ý để thực hiện việc này đúng cách sau khi đã nhập "một lịch sử lâu dài và có liên quan" là

git repack -a -d -f --depth=250 --window=250

Nhưng điều này giả định rằng bạn đã loại bỏ phần dữ liệu không mong muốn khỏi lịch sử kho lưu trữ của mình và bạn đã làm theo danh sách kiểm tra để thu nhỏ kho lưu trữ được tìm thấy trong git filter-branchtài liệu .

git-filter-branch có thể được sử dụng để loại bỏ một tập hợp con của các tệp, thường là với một số kết hợp của --index-filter--subdirectory-filter. Mọi người mong đợi kho lưu trữ kết quả sẽ nhỏ hơn so với ban đầu, nhưng bạn cần thêm một vài bước để thực sự làm cho nó nhỏ hơn, bởi vì Git đã cố gắng không làm mất các đối tượng của bạn cho đến khi bạn yêu cầu. Trước tiên hãy đảm bảo rằng:

  • Bạn thực sự đã xóa tất cả các biến thể của tên tệp, nếu một đốm màu đã bị di chuyển trong suốt thời gian tồn tại của nó. git log --name-only --follow --all -- filenamecó thể giúp bạn tìm đổi tên.

  • Bạn thực sự đã lọc tất cả các ref: sử dụng --tag-name-filter cat -- --allkhi gọi điện git filter-branch.

Sau đó, có hai cách để có được một kho lưu trữ nhỏ hơn. Một cách an toàn hơn là sao chép để giữ nguyên bản gốc của bạn.

  • Sao chép nó với git clone file:///path/to/repo. Bản sao sẽ không có các đối tượng bị loại bỏ. Xem git-clone. (Lưu ý rằng sao chép với một đường dẫn đơn giản chỉ liên kết cứng mọi thứ!)

Nếu bạn thực sự không muốn sao chép nó, vì bất kỳ lý do gì, hãy kiểm tra các điểm sau (theo thứ tự này). Đây là một cách tiếp cận rất phá hoại, vì vậy hãy tạo một bản sao lưu hoặc quay lại sao chép nó. Bạn đã được cảnh báo.

  • Xóa các tham chiếu ban đầu được sao lưu bởi git-filter-branch: say

    git for-each-ref --format="%(refname)" refs/original/ |
      xargs -n 1 git update-ref -d
    
  • Hết hạn tất cả các nhật ký với git reflog expire --expire=now --all.

  • Garbage thu thập tất cả các đối tượng không được tham chiếu với git gc --prune=now(hoặc nếu của bạn git gckhông đủ mới để hỗ trợ các đối số --prune, hãy sử dụng git repack -ad; git prunethay thế).


Date: Wed, 5 Dec 2007 22:09:12 -0800 (PST)
From: Linus Torvalds <torvalds at linux-foundation dot org>
To: Daniel Berlin <dberlin at dberlin dot org>
cc: David Miller <davem at davemloft dot net>,
    ismail at pardus dot org dot tr,
    gcc at gcc dot gnu dot org,
    git at vger dot kernel dot org
Subject: Re: Git and GCC
In-Reply-To: <4aca3dc20712052111o730f6fb6h7a329ee811a70f28@mail.gmail.com>
Message-ID: <alpine.LFD.0.9999.0712052132450.13796@woody.linux-foundation.org>
References: <4aca3dc20712051947t5fbbb383ua1727c652eb25d7e@mail.gmail.com>
            <20071205.202047.58135920.davem@davemloft.net>
            <4aca3dc20712052032n521c344cla07a5df1f2c26cb8@mail.gmail.com>
            <20071205.204848.227521641.davem@davemloft.net>
            <4aca3dc20712052111o730f6fb6h7a329ee811a70f28@mail.gmail.com>

Vào ngày 6 tháng 12 năm 2007, Daniel Berlin đã viết:

Trên thực tế, đôi khi nó git-gc --aggressivethực hiện điều ngu ngốc này khi đóng gói tệp bất kể bạn có chuyển đổi từ repo SVN hay không.

Chắc chắn rồi. git --aggressivehầu hết là câm. Nó thực sự chỉ hữu ích cho trường hợp “Tôi biết tôi có một gói hàng thực sự tồi tệ và tôi muốn vứt bỏ tất cả các quyết định đóng gói tồi tệ mà tôi đã làm.”

Để giải thích điều này, cần phải giải thích (có thể bạn đã biết về nó, nhưng hãy để tôi đi qua những điều cơ bản) cách git delta-chain hoạt động và chúng khác biệt như thế nào so với hầu hết các hệ thống khác.

Trong các SCM khác, một chuỗi đồng bằng thường cố định. Nó có thể là "tiến" hoặc "ngược" và nó có thể phát triển một chút khi bạn làm việc với kho lưu trữ, nhưng nhìn chung đó là một chuỗi các thay đổi đối với một tệp được biểu thị dưới dạng một số loại thực thể SCM duy nhất. Trong CVS, rõ ràng đó là *,vtệp và rất nhiều hệ thống khác làm những việc tương tự.

Git cũng thực hiện chuỗi đồng bằng, nhưng nó thực hiện chúng “lỏng lẻo” hơn nhiều. Không có thực thể cố định. Deltas được tạo dựa trên bất kỳ phiên bản ngẫu nhiên nào khác mà git được coi là một ứng cử viên delta tốt (với nhiều phương pháp phỏng đoán khá thành công khác nhau) và hoàn toàn không có quy tắc nhóm cứng.

Đây nói chung là một điều rất tốt. Nó tốt vì nhiều lý do khái niệm khác nhau ( tức là , git nội bộ thậm chí không bao giờ thực sự cần quan tâm đến toàn bộ chuỗi sửa đổi - nó không thực sự nghĩ về delta cả), nhưng nó cũng tuyệt vời vì việc loại bỏ các quy tắc delta không linh hoạt có nghĩa là Ví dụ: git không có bất kỳ vấn đề nào với việc hợp nhất hai tệp với nhau - đơn giản là không có *,v“tệp sửa đổi” tùy ý nào có ý nghĩa ẩn nào đó.

Điều đó cũng có nghĩa là sự lựa chọn của các delta là một câu hỏi mở hơn nhiều. Nếu bạn giới hạn chuỗi delta chỉ trong một tệp, bạn thực sự không có nhiều lựa chọn về việc phải làm gì với delta, nhưng trong git, nó thực sự có thể là một vấn đề hoàn toàn khác.

Và đây là nơi mà cái tên thực sự tồi tệ --aggressivexuất hiện. Mặc dù git thường cố gắng sử dụng lại thông tin delta (vì đó là một ý tưởng hay và nó không lãng phí thời gian CPU tìm lại tất cả các delta tốt mà chúng tôi đã tìm thấy trước đó), đôi khi bạn muốn nói "hãy bắt đầu lại từ đầu, với một phương tiện chặn trống và bỏ qua tất cả thông tin về delta trước đó và cố gắng tạo một tập hợp delta mới."

Vì vậy, --aggressivekhông thực sự là về việc tích cực, mà là lãng phí thời gian CPU để thực hiện lại quyết định mà chúng tôi đã làm trước đó!

Đôi khi đó là một điều tốt. Một số công cụ nhập cụ thể có thể tạo ra các delta thực sự tồi tệ. git fast-importChẳng hạn, bất kỳ thứ gì sử dụng đều có khả năng không có nhiều bố cục delta tuyệt vời, vì vậy có thể đáng để nói rằng “Tôi muốn bắt đầu từ một phương tiện chặn sạch sẽ”.

Nhưng hầu như luôn luôn, trong những trường hợp khác, đó thực sự là một điều thực sự tồi tệ. Nó sẽ lãng phí thời gian của CPU, và đặc biệt là nếu bạn đã thực sự làm tốt công việc delta trước đó, kết quả cuối cùng sẽ không sử dụng lại tất cả những delta tốt mà bạn đã tìm thấy, vì vậy bạn sẽ thực sự kết thúc với rất nhiều kết quả cuối cùng tệ hơn quá!

Tôi sẽ gửi một bản vá cho Junio ​​để xóa git gc --aggressive tài liệu. Nó có thể hữu ích, nhưng nhìn chung nó chỉ hữu ích khi bạn thực sự hiểu ở mức độ rất sâu về những gì nó đang làm và tài liệu đó không giúp bạn làm điều đó.

Nói chung, làm tăng dần git gclà cách tiếp cận đúng và tốt hơn là làm git gc --aggressive. Nó sẽ sử dụng lại các delta cũ và khi không thể tìm thấy những delta cũ đó (lý do để thực hiện GC gia tăng ngay từ đầu!), Nó sẽ tạo ra những cái mới.

Mặt khác, chắc chắn đúng rằng “quá trình nhập ban đầu của một lịch sử lâu dài và có liên quan” là một điểm mà có thể đáng để dành nhiều thời gian tìm kiếm các châu thổ thực sự tốt . Sau đó, mọi người dùng mãi mãi về sau (miễn là họ không sử dụng git gc --aggressiveđể hoàn tác!) Sẽ nhận được lợi thế của sự kiện một lần đó. Vì vậy, đặc biệt là đối với các dự án lớn có lịch sử lâu đời, có lẽ bạn nên thực hiện thêm một số công việc, bảo mã tìm kiếm delta trở nên hoang dã.

Vì vậy, tương đương với git gc --aggressive- nhưng được thực hiện đúng cách - là làm (qua đêm) một cái gì đó như

git repack -a -d --depth=250 --window=250

trong đó vấn đề về độ sâu chỉ là về độ sâu của các chuỗi delta (làm cho chúng dài hơn theo lịch sử cũ - nó đáng giá trên không gian) và vấn đề cửa sổ là về mức độ lớn của cửa sổ đối tượng mà chúng tôi muốn mỗi ứng viên delta quét.

Và ở đây, bạn có thể muốn thêm -fcờ (đó là "bỏ tất cả các delta cũ", vì bây giờ bạn thực sự đang cố gắng đảm bảo rằng cái này thực sự tìm thấy các ứng cử viên tốt.

Và sau đó nó sẽ mất mãi mãi và một ngày ( tức là một việc “làm qua đêm”). Nhưng kết quả cuối cùng là tất cả mọi người hạ nguồn từ kho lưu trữ đó sẽ nhận được các gói tốt hơn nhiều mà không cần phải tự mình bỏ ra bất kỳ nỗ lực nào.

          Linus

2
Nhận xét của bạn về độ sâu là một chút khó hiểu. Lúc đầu, tôi sẽ phàn nàn rằng bạn đã nhầm, rằng sự hung hăng có thể tăng tốc đáng kể một kho lưu trữ git. Sau khi thực hiện thu gom rác tích cực, một repo HUGE mất năm phút để thực hiện trạng thái git giảm xuống còn giây. Nhưng sau đó tôi nhận ra bạn không có nghĩa là gc hung hăng làm chậm repo, mà chỉ là kích thước độ sâu cực lớn.
user6856

57

Khi nào tôi nên sử dụng gc & repack?

Như tôi đã đề cập trong " Git Garbage collection dường như không hoạt động hoàn toàn ", a git gc --aggressivelà không đủ hoặc thậm chí là đủ.
Và, như tôi giải thích bên dưới , thường không cần thiết.

Sự kết hợp hiệu quả nhất sẽ là thêm git repack, nhưng cũng có thể git prune:

git gc
git repack -Ad      # kills in-pack garbage
git prune           # kills loose garbage

Lưu ý: Git 2.11 (Q4 2016) sẽ đặt gc aggressiveđộ sâu mặc định là 50

Xem cam kết 07e7dbf (11 tháng 8, 2016) bởi Jeff King ( peff) .
(Merged bởi Junio C Hamano - gitster- trong phạm 0952ca8 , 21 tháng 9 năm 2016)

gc: độ sâu tích cực mặc định thành 50

" git gc --aggressive" được sử dụng để giới hạn độ dài chuỗi tam giác ở mức 250, quá sâu để tiết kiệm thêm không gian và gây bất lợi cho hiệu suất thời gian chạy.
Giới hạn đã được giảm xuống 50.

Tóm lại là: mặc định hiện tại là 250 không tiết kiệm nhiều dung lượng và tốn CPU. Đó không phải là một sự đánh đổi tốt.

Các " --aggressive" cờ để git-gcthực hiện ba điều:

  1. sử dụng " -f" để loại bỏ các delta hiện có và tính toán lại từ đầu
  2. sử dụng "--window = 250" để tìm delta khó hơn
  3. sử dụng "--depth = 250" để tạo chuỗi delta dài hơn

Mục (1) và (2) phù hợp nhất cho một gói đóng gói "tích cực".
Họ yêu cầu repack thực hiện nhiều công việc tính toán hơn với hy vọng nhận được một pack tốt hơn. Bạn phải trả chi phí trong quá trình đóng gói lại và các hoạt động khác chỉ thấy lợi ích.

Mục (3) không rõ ràng như vậy.
Cho phép các chuỗi dài hơn có nghĩa là ít hạn chế hơn đối với các đồng bằng, có nghĩa là có khả năng tìm thấy các chuỗi tốt hơn và tiết kiệm một số không gian.
Nhưng nó cũng có nghĩa là các hoạt động truy cập vào delta phải tuân theo chuỗi dài hơn, điều này ảnh hưởng đến hiệu suất của chúng.
Vì vậy, đó là một sự đánh đổi, và không rõ ràng rằng sự đánh đổi thậm chí là tốt.

(Xem cam kết học tập )

Bạn có thể thấy rằng việc tiết kiệm CPU cho các hoạt động thường xuyên được cải thiện khi chúng tôi giảm độ sâu.
Nhưng chúng ta cũng có thể thấy rằng không gian tiết kiệm được không nhiều khi chiều sâu càng tăng. Tiết kiệm 5-10% trong khoảng từ 10 đến 50 có lẽ đáng để đánh đổi CPU. Tiết kiệm 1% để tăng từ 50 lên 100, hoặc 0,5% khác để tăng từ 100 lên 250 có lẽ là không.


Nói về tiết kiệm CPU, " git repack" đã học cách chấp nhận --threads=<n>tùy chọn và chuyển nó cho các đối tượng đóng gói.

Xem cam kết 40bcf31 (26 tháng 4 năm 2017) bởi Junio ​​C Hamano ( gitster) .
(Hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết 31fb6f4 , ngày 29 tháng 5 năm 2017)

đóng gói lại: chấp nhận --threads=<n>và chuyển nó xuốngpack-objects

Chúng tôi đã làm như vậy vì --window=<n>--depth=<n>; điều này sẽ hữu ích khi người dùng muốn bắt buộc --threads=1kiểm tra có thể tái tạo mà không bị ảnh hưởng bởi việc chạy nhiều luồng.


3
Tôi đã đề cập đến chuỗi Linus trong liên kết "Git Garbage collection dường như không hoạt động hoàn toàn"
VonC

1
Cảm ơn cho bản cập nhật hiện đại này! Mọi câu trả lời khác ở đây đều cũ. Bây giờ chúng ta có thể thấy điều đó git gc --aggressiveđã được sửa hai lần: Thứ nhất, thực hiện những gì Linus đề xuất vào năm 2007 như một "phương pháp đóng gói tốt hơn". Và sau đó trong Git 2.11 để tránh độ sâu đối tượng quá mức mà Linus đã đề xuất nhưng lại có hại (làm chậm tất cả các hoạt động Git trong tương lai và không tiết kiệm bất kỳ không gian nào đáng nói).
gw0

git gc, tiếp theo là git repack -Ad và git trimne làm tăng kích thước kho lưu trữ của tôi ... tại sao?
devops

@devops Không chắc: bạn đang sử dụng phiên bản Git nào? Bạn có thể đặt một câu hỏi mới cho điều đó (với nhiều chi tiết hơn như hệ điều hành, kích thước chung của kho lưu trữ của bạn, ...)
VonC

man git-repackcho biết -d: `Cũng chạy git trimne-pack để loại bỏ các tệp đối tượng lỏng lẻo dư thừa. 'Hay git prunecũng làm điều đó? man git-prunenói In most cases, users should run git gc, which calls git prune., vậy việc sử dụng sau đó là git gcgì? Nó sẽ không tốt hơn hoặc đủ để sử dụng git repack -Ad && git gc?
Jakob

14

Vấn đề git gc --aggressivelà tên tùy chọn và tài liệu bị sai lệch.

Như chính Linus giải thích trong thư này , điều git gc --aggressivecơ bản là:

Mặc dù git thường cố gắng sử dụng lại thông tin delta (vì đó là một ý tưởng hay và nó không lãng phí thời gian của CPU khi tìm lại tất cả các delta tốt mà chúng tôi đã tìm thấy trước đó), đôi khi bạn muốn nói "hãy bắt đầu lại từ đầu, với một phương tiện chặn trống và bỏ qua tất cả thông tin về delta trước đó và cố gắng tạo một tập hợp delta mới ".

Thông thường, không cần phải tính toán lại các delta trong git, vì git xác định các delta này rất linh hoạt. Nó chỉ có ý nghĩa nếu bạn biết rằng bạn có delta thực sự, thực sự xấu. Như Linus giải thích, chủ yếu là các công cụ được sử dụng thuộc git fast-importloại này.

Hầu hết thời gian git thực hiện công việc khá tốt trong việc xác định các delta hữu ích và việc sử dụng git gc --aggressivesẽ để lại cho bạn những delta có khả năng còn tồi tệ hơn trong khi lãng phí nhiều thời gian của CPU.


Linus kết thúc thư của mình với kết luận rằng git repackvới số lượng lớn --depth--windowlà sự lựa chọn tốt hơn trong hầu hết thời gian; đặc biệt là sau khi bạn nhập một dự án lớn và muốn đảm bảo rằng git tìm thấy các delta tốt.

Vì vậy, tương đương với git gc --aggressive- nhưng được thực hiện đúng cách - là làm (qua đêm) một cái gì đó như

git repack -a -d --depth=250 --window=250

trong đó vấn đề về độ sâu chỉ là về độ sâu của các chuỗi delta (làm cho chúng dài hơn theo lịch sử cũ - nó đáng giá trên không gian) và vấn đề cửa sổ là về mức độ lớn của một cửa sổ đối tượng mà chúng tôi muốn mỗi ứng viên delta quét.

Và ở đây, bạn cũng có thể muốn thêm -fcờ (là "bỏ tất cả các delta cũ", vì bây giờ bạn thực sự đang cố gắng đảm bảo rằng cái này thực sự tìm thấy các ứng cử viên tốt.


8

Thận trọng. Không chạy git gc --agressivevới kho lưu trữ không được đồng bộ hóa với điều khiển từ xa nếu bạn không có bản sao lưu.

Thao tác này sẽ tạo lại các delta từ đầu và có thể dẫn đến mất dữ liệu nếu bị gián đoạn một cách khéo léo.

Đối với máy tính 8GB của tôi, gc tích cực đã hết bộ nhớ trên kho lưu trữ 1Gb với 10k cam kết nhỏ. Khi kẻ giết người OOM chấm dứt quy trình git - nó để lại cho tôi kho lưu trữ gần như trống rỗng, chỉ có cây làm việc và một số delta sống sót.

Tất nhiên, nó không phải là bản sao duy nhất của kho lưu trữ vì vậy tôi chỉ tạo lại nó và kéo từ xa (tìm nạp không hoạt động trên repo bị hỏng và bị kẹt ở bước 'giải quyết deltas' vài lần tôi đã cố gắng làm như vậy), nhưng nếu kho của bạn repo cục bộ của một nhà phát triển duy nhất không có điều khiển từ xa - hãy sao lưu nó trước.


5

Lưu ý: cẩn thận khi sử dụng git gc --aggressive , như Git 2.22 (Quý 2 năm 2019) đã làm rõ.

Xem cam kết 0044f77 , cam kết daecbf2 , cam 7.384.504 , cam kết 22d4e3b , cam kết 080a448 , cam kết 54d56f5 , cam kết d257e0f , cam kết b6a8d09 (07 tháng 4 năm 2019), và cam kết fc559fb , cam kết cf9cd77 , cam kết b11e856 (ngày 22 tháng 3 2019) bởi Ævar Arnfjord Bjarmason ( avar) .
(Hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết ac70c53 , ngày 25 tháng 4 năm 2019)

gc tài liệu: hạ thấp tính hữu ích của --aggressive

Các gc --aggressivetài liệu "" hiện có chỉ đề xuất với người dùng rằng họ nên chạy nó thường xuyên.
Cá nhân tôi đã nói chuyện với nhiều người dùng đã xem những tài liệu này như một lời khuyên để sử dụng tùy chọn này, và thường là (hầu hết) lãng phí thời gian .

Vì vậy, hãy làm rõ những gì nó thực sự làm, và để người dùng tự rút ra kết luận.

Hãy cũng làm rõ "Các tác động [...] là dai dẳng" để diễn giải một phiên bản ngắn gọn của lời giải thích của Jeff King .

Điều đó có nghĩa là tài liệu git-gc hiện bao gồm :

XÂM LƯỢC

Khi --aggressivetùy chọn được cung cấp,git-repack sẽ được gọi với -fcờ, đến lượt nó sẽ được chuyển --no-reuse-deltađến git-pack-objects .
Thao tác này sẽ loại bỏ mọi delta hiện có và tính toán lại chúng, với chi phí là tốn nhiều thời gian hơn cho việc đóng gói lại.

Các tác động của điều này chủ yếu là dai dẳng, ví dụ: khi các gói và các đối tượng rời được kết hợp với nhau thành một gói khác, các delta hiện có trong gói đó có thể được sử dụng lại, nhưng cũng có nhiều trường hợp chúng ta có thể chọn một delta phụ tối ưu từ một delta mới hơn đóng gói thay thế.

Hơn nữa, cung cấp --aggressivesẽ điều chỉnh --depth--windowcác tùy chọn được chuyển đến git-repack.
Xem các cài đặt gc.aggressiveDepthgc.aggressiveWindowcài đặt bên dưới.
Bằng cách sử dụng kích thước cửa sổ lớn hơn, chúng tôi có nhiều khả năng tìm thấy các delta tối ưu hơn.

Có lẽ không đáng để sử dụng tùy chọn này trên một kho lưu trữ nhất định mà không chạy các điểm chuẩn hiệu suất phù hợp trên đó .
Nó mất nhiều thời gian hơn và kết quả là tối ưu hóa không gian / delta có thể có giá trị hoặc không. Hoàn toàn không sử dụng điều này là sự đánh đổi đúng đắn đối với hầu hết người dùng và kho lưu trữ của họ.

Và ( cam kết 080a448 ):

gc tài liệu: lưu ý cách --aggressive tác động của --window&--depth

Từ 07e7dbf ( gc: độ sâu hoạt động mặc định là 50, 2016-08-11, Git v2.10.1), chúng tôi hơi khó hiểu khi sử dụng cùng độ sâu dưới--aggressive mặc định.

Như đã lưu ý trong cam kết có ý nghĩa đó, đã sai khi đặt độ sâu hơn làm mặc định cho "hung hăng" và do đó tiết kiệm dung lượng ổ đĩa với chi phí hiệu suất thời gian chạy, điều này thường ngược lại với một người thích "hung hăng gc" muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.