Tìm kích thước của kho Git


283

Cách đơn giản để tìm kích thước của kho Git của tôi là gì?

Và tôi không có nghĩa là du -htrên thư mục gốc của kho lưu trữ của tôi. Tôi có rất nhiều tệp bị bỏ qua, vì vậy kích thước đó sẽ khác với tổng kích thước kho lưu trữ của tôi. Về cơ bản tôi muốn biết bao nhiêu dữ liệu sẽ được chuyển khi nhân bản kho lưu trữ của tôi.


Câu trả lời:


260

CẬP NHẬT git 1.8.3 đã giới thiệu một cách hiệu quả hơn để có được kích thước thô: git count-objects -vH(xem câu trả lời của @VonC)

Đối với các ý tưởng khác nhau về "kích thước hoàn chỉnh", bạn có thể sử dụng:

git bundle create tmp.bundle --all
du -sh tmp.bundle

Đóng (nhưng không chính xác :)

git gc
du -sh .git/

Với cái sau, bạn cũng sẽ được tính:


Cảm ơn! Hành vi đầu tiên phản ánh chính xác hơn tổng kích thước nhân bản nhưng lần thứ hai cũng khá gần.
mschallert

7
Lưu ý: câu trả lời này đã hết hạn. Thay vào đó, hãy xem câu trả lời của VonC cho các phiên bản git> = 1.8.3.
John Dibling

Cũng lưu ý câu trả lời của tôi là một cách đầy đủ hơn, có thể có giá trị riêng của nó.
sehe

Bạn có thể vui lòng thêm những gì git bundlegit gcthực sự làm gì? nó sẽ tạo một kho lưu trữ (không mong muốn) khác và sau đó đo kích thước?
Ramesh Pareek

1
@RameshPareek có. Điều này khá rõ ràng vì tôi đang sử dụng duđể đo kích thước của tệp đó.
sehe

252

Lưu ý rằng, kể từ git 1.8.3 (tháng 4, 22d 2013) :

Tùy chọn " git count-objects" đã học " --human-readable" aka " -H" để hiển thị số lượng lớn khác nhau trong Ki/ Mi/ GiBtỷ lệ nếu cần.

Điều đó có thể được kết hợp với -vtùy chọn được đề cập bởi Jack Morrison trong câu trả lời của ông .

git gc
git count-objects -vH

( git gcRất quan trọng, như đã đề cập bởi ABB 's câu trả lời )

Thêm vào đó (vẫn là git 1.8.3), đầu ra hoàn thiện hơn:

" git count-objects -v" Học cách báo cáo các gói tạm thời còn sót lại và rác khác trong kho đối tượng .


116

Lệnh git

git count-objects -v

sẽ cung cấp cho bạn một ước tính tốt về kích thước của kho git. Không có cờ -v, nó chỉ cho bạn biết kích thước của các tệp được giải nén của bạn. Lệnh này có thể không có trong $ PATH của bạn, bạn có thể phải theo dõi nó (ví dụ trên Ubuntu tôi đã tìm thấy nó trong / usr / lib / git-core /).

Từ trang Git man:

-v, --verbose

Ngoài số lượng đối tượng lỏng lẻo và không gian đĩa được tiêu thụ, nó báo cáo số lượng đối tượng trong gói, số lượng gói, không gian đĩa được tiêu thụ bởi các gói đó và số lượng đối tượng có thể được loại bỏ bằng cách chạy git prune-pack.

Đầu ra của bạn sẽ trông giống như sau:

count: 1910
size: 19764
in-pack: 41814
packs: 3
size-pack: 1066963
prune-packable: 1
garbage: 0

Dòng bạn đang tìm kiếm là size-pack. Đó là kích thước của tất cả các đối tượng cam kết được đóng gói hoặc kích thước nhỏ nhất có thể cho kho lưu trữ nhân bản mới.


4
Theo kinh nghiệm của tôi, git count-objects -vhoạt động khi git-count-objects -vkhông (vì nó không nằm trong ĐƯỜNG của tôi).
mwolfetech

5
@psihodelia Có vẻ như bạn có thể phải chạy git gctrước khi chạy git count-objects -vvì kho lưu trữ của bạn có thể chưa được đóng gói. Xem câu trả lời đầu tiên tại đây để biết bằng chứng: stackoverflow.com/questions35332740/ trên
Jack Morrison

5
Bạn có thể sử dụng grep để chỉ nhận dòng mong muốn : git count-objects -vH | grep 'size-pack'. Điều Hnày là để hiển thị nó ở định dạng có thể đọc được, như @VonC đã nói trong câu trả lời của mình.
alko989

git count-objects --help: size-pack: không gian đĩa được tiêu thụ bởi các gói, trong KiB (trừ khi -H được chỉ định)
auralbee

5

Bạn có thể sử dụng git-sizer. Trong --verbosecài đặt, đầu ra ví dụ là (bên dưới). Hãy tìm Total size of filesdòng.

$ git-sizer --verbose
Processing blobs: 1652370
Processing trees: 3396199
Processing commits: 722647
Matching commits to trees: 722647
Processing annotated tags: 534
Processing references: 539
| Name                         | Value     | Level of concern               |
| ---------------------------- | --------- | ------------------------------ |
| Overall repository size      |           |                                |
| * Commits                    |           |                                |
|   * Count                    |   723 k   | *                              |
|   * Total size               |   525 MiB | **                             |
| * Trees                      |           |                                |
|   * Count                    |  3.40 M   | **                             |
|   * Total size               |  9.00 GiB | ****                           |
|   * Total tree entries       |   264 M   | *****                          |
| * Blobs                      |           |                                |
|   * Count                    |  1.65 M   | *                              |
|   * Total size               |  55.8 GiB | *****                          |
| * Annotated tags             |           |                                |
|   * Count                    |   534     |                                |
| * References                 |           |                                |
|   * Count                    |   539     |                                |
|                              |           |                                |
| Biggest objects              |           |                                |
| * Commits                    |           |                                |
|   * Maximum size         [1] |  72.7 KiB | *                              |
|   * Maximum parents      [2] |    66     | ******                         |
| * Trees                      |           |                                |
|   * Maximum entries      [3] |  1.68 k   | *                              |
| * Blobs                      |           |                                |
|   * Maximum size         [4] |  13.5 MiB | *                              |
|                              |           |                                |
| History structure            |           |                                |
| * Maximum history depth      |   136 k   |                                |
| * Maximum tag depth      [5] |     1     |                                |
|                              |           |                                |
| Biggest checkouts            |           |                                |
| * Number of directories  [6] |  4.38 k   | **                             |
| * Maximum path depth     [7] |    13     | *                              |
| * Maximum path length    [8] |   134 B   | *                              |
| * Number of files        [9] |  62.3 k   | *                              |
| * Total size of files    [9] |   747 MiB |                                |
| * Number of symlinks    [10] |    40     |                                |
| * Number of submodules       |     0     |                                |

[1]  91cc53b0c78596a73fa708cceb7313e7168bb146
[2]  2cde51fbd0f310c8a2c5f977e665c0ac3945b46d
[3]  4f86eed5893207aca2c2da86b35b38f2e1ec1fc8 (refs/heads/master:arch/arm/boot/dts)
[4]  a02b6794337286bc12c907c33d5d75537c240bd0 (refs/heads/master:drivers/gpu/drm/amd/include/asic_reg/vega10/NBIO/nbio_6_1_sh_mask.h)
[5]  5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c (refs/tags/v2.6.11)
[6]  1459754b9d9acc2ffac8525bed6691e15913c6e2 (589b754df3f37ca0a1f96fccde7f91c59266f38a^{tree})
[7]  78a269635e76ed927e17d7883f2d90313570fdbc (dae09011115133666e47c35673c0564b0a702db7^{tree})
[8]  ce5f2e31d3bdc1186041fdfd27a5ac96e728f2c5 (refs/heads/master^{tree})
[9]  532bdadc08402b7a72a4b45a2e02e5c710b7d626 (e9ef1fe312b533592e39cddc1327463c30b0ed8d^{tree})
[10] f29a5ea76884ac37e1197bef1941f62fda3f7b99 (f5308d1b83eba20e69df5e0926ba7257c8dd9074^{tree})

1
Điều này là tốt bởi vì nó hiển thị nhiều thông tin hơn chỉ là tổng kích thước nhân bản. Một điều nó không cho thấy rằng tôi vẫn muốn biết là ZIP sẽ lớn như thế nào nếu được tải xuống (nó không chứa tất cả các cam kết).
NH.

@IndrajeetGour: bạn cần cài đặt từ github.com/github/git-sizer/#getting-started . Tải xuống tại github.com/github/git-sizer/release .
phục vụ

@Dalvoter có quan tâm để giải thích lý do của mình hay không?
serv-inc

1

Nếu bạn sử dụng git LFS, các đối tượng đếm git không đếm nhị phân của bạn, mà chỉ các con trỏ tới chúng.

Nếu các tệp LFS của bạn được quản lý bởi Artifactory, bạn nên sử dụng API REST:

  • Nhận API www.jfrog.com từ bất kỳ công cụ tìm kiếm nào
  • Nhìn vào Nhận thông tin tóm tắt lưu trữ

1

Tôi nghĩ rằng điều này cung cấp cho bạn danh sách tổng số tất cả các tệp trong lịch sử repo:

git rev-list --objects --all | git cat-file --batch-check="%(objectsize) %(rest)" | cut -d" " -f1 | paste -s -d + - | bc

Bạn có thể thay thế --allvới một treeish ( HEAD, origin/master, vv) để tính toán kích thước của một chi nhánh.


-1

Nếu kho lưu trữ trên GitHub , bạn có thể sử dụng ứng dụng Android nguồn mở Octodroid hiển thị kích thước của kho lưu trữ theo mặc định.

Ví dụ: với kho lưu trữ mptcp :

Kích thước của kho lưu trữ TCP đa đường trên Octodroid

Kích thước của kho lưu trữ trong khi nhân bản

Tuyên bố miễn trừ trách nhiệm: Tôi đã không tạo Octodroid.


1
Chúng ở các đơn vị khác nhau (GB x GiB). Nhân tiện, 1,71 GB = 1,84 GiB, chỉ cần chuyển đổi và không quan tâm đến các vòng.
Luciano

Xin lỗi, tôi đã trộn chúng lên khi gõ, quan hệ chính xác: 1.71 GiB = 1.84 GB
Luciano
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.