Temukan ukuran repositori Git

283

Apa cara sederhana untuk menemukan ukuran repositori Git saya?

Dan maksud saya bukan du -hpada direktori root repositori saya. Saya memiliki banyak file yang diabaikan, sehingga ukurannya akan berbeda dari ukuran total repositori saya. Saya pada dasarnya ingin tahu berapa banyak data yang akan ditransfer setelah kloning repositori saya.

mschallert
sumber

Jawaban:

260

UPDATE git 1.8.3 memperkenalkan cara yang lebih efisien untuk mendapatkan ukuran kasar: git count-objects -vH(lihat jawaban oleh @VonC)

Untuk gagasan "ukuran lengkap" yang berbeda, Anda dapat menggunakan:

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

Tutup (tapi tidak tepat :)

git gc
du -sh .git/

Dengan yang terakhir, Anda juga akan menghitung:

lihat
sumber
Terima kasih! Perilaku pertama lebih akurat mencerminkan ukuran total klon tetapi yang kedua juga cukup dekat.
mschallert
7
Catatan: jawaban ini sudah usang. Lihat jawaban VonC sebagai gantinya untuk versi git> = 1.8.3.
John Dibling
Perhatikan juga jawaban saya adalah cara yang lebih lengkap, yang bisa memiliki kelebihan itu sendiri.
lihat
Bisakah Anda menambahkan apa yang sebenarnya git bundledan git gctidak? apakah itu akan membuat arsip lain (yang tidak diinginkan) dan kemudian mengukur ukurannya?
Ramesh Pareek
1
@ RameshPareek ya. Ini cukup jelas karena saya menggunakan duuntuk mengukur ukuran file itu.
lihat
252

Perhatikan bahwa, sejak git 1.8.3 (April, 22d 2013) :

" git count-objects" belajar " --human-readable" alias " -H" pilihan untuk menampilkan berbagai nomor besar di Ki/ Mi/ GiBdiskalakan seperlunya.

Itu bisa dikombinasikan dengan -vopsi yang disebutkan oleh Jack Morrison dalam jawabannya .

git gc
git count-objects -vH

( git gcPenting, seperti yang disebutkan oleh ABB 's jawaban )

Plus (masih git 1.8.3), output lebih lengkap:

" git count-objects -v" belajar melaporkan sisa paket sementara dan sampah lain di toko objek .

VONC
sumber
116

Perintah git

git count-objects -v

akan memberi Anda perkiraan yang baik tentang ukuran repositori git. Tanpa tanda -v, itu hanya memberi tahu Anda ukuran file yang sudah dibongkar. Perintah ini mungkin tidak ada di $ PATH Anda, Anda mungkin harus melacaknya (di Ubuntu saya menemukannya di / usr / lib / git-core /, misalnya).

Dari halaman manual Git:

-v, --verbose

Selain jumlah objek longgar dan ruang disk yang dikonsumsi, ia melaporkan jumlah objek dalam paket, jumlah paket, ruang disk yang dikonsumsi oleh paket tersebut, dan jumlah objek yang dapat dihapus dengan menjalankan git yang telah dipaket.

Output Anda akan terlihat mirip dengan yang berikut:

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

Garis yang Anda cari adalah size-pack. Itu adalah ukuran dari semua objek commit yang dikemas, atau ukuran sekecil mungkin untuk repositori baru yang dikloning.

Jack Morrison
sumber
4
Dalam pengalaman saya, git count-objects -vbekerja ketika git-count-objects -vtidak (karena itu tidak ada dalam PATH saya).
mwolfetech
5
@psihodelia Sepertinya Anda mungkin harus menjalankan git gcsebelum menjalankan git count-objects -vkarena repositori Anda mungkin belum dikemas. Lihat jawaban pertama di sini untuk bukti: stackoverflow.com/questions/3532740/…
Jack Morrison
5
Anda dapat menggunakan grep untuk mendapatkan hanya garis yang diinginkan: git count-objects -vH | grep 'size-pack'. The Hadalah untuk menunjukkan dalam format yang dapat dibaca manusia, seperti dikatakan @VonC dalam jawabannya.
alko989
git count-objects --help: size-pack: ruang disk yang dikonsumsi oleh paket, dalam KiB (kecuali -H ditentukan)
auralbee
5

Anda bisa menggunakannya git-sizer. Dalam --verbosepengaturan, contoh outputnya adalah (di bawah). Cari Total size of filesgarisnya.

$ 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})
serv-inc
sumber
1
Ini bagus karena menunjukkan informasi lebih dari sekedar ukuran kloning total. Satu hal yang tidak menunjukkan bahwa saya masih ingin tahu adalah seberapa besar ZIP jika diunduh (tidak mengandung semua komitmen).
NH.
@IndrajeetGour: Anda harus menginstal dari github.com/github/git-sizer/#getting-started . Unduhan ada di github.com/github/git-sizer/releases .
serv-inc
Akankah @ downvoter peduli untuk menjelaskan alasannya, atau tidak?
serv-inc
1

Jika Anda menggunakan git LFS, objek count git tidak menghitung binari Anda, tetapi hanya pointer ke mereka.

Jika file LFS Anda dikelola oleh Artifactory, Anda harus menggunakan REST API:

  • Dapatkan API www.jfrog.com dari mesin pencari apa pun
  • Lihatlah Dapatkan Info Ringkasan Penyimpanan
Elike
sumber
1

Saya pikir ini memberi Anda daftar total semua file dalam sejarah repo:

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

Anda dapat mengganti --alldengan treeish ( HEAD, origin/master, dll) untuk menghitung ukuran cabang.

pengguna541686
sumber
-1

Jika repositori ada di GitHub , Anda dapat menggunakan aplikasi Android open source Octodroid yang secara default menampilkan ukuran repositori.

Misalnya, dengan repositori mptcp :

Ukuran repositori multipath TCP pada Octodroid

Ukuran repositori saat kloning

Penafian: Saya tidak membuat Octodroid.

RMPR
sumber
1
Mereka berada di unit yang berbeda (GB x GiB). By the way 1,71 GB = 1,84 GiB, hanya mengubah dan tidak peduli putaran.
Luciano
Maaf, saya mencampuradukkannya saat mengetik, hubungan yang benar: 1,71 GiB = 1,84 GB
Luciano