ค้นหาขนาดของพื้นที่เก็บข้อมูล Git


283

วิธีง่ายๆในการค้นหาขนาดของพื้นที่เก็บข้อมูล Git ของฉันคืออะไร?

และฉันไม่ได้ตั้งใจdu -hในไดเรกทอรีรากของที่เก็บของฉัน ฉันมีไฟล์ที่ถูกละเว้นจำนวนมากดังนั้นขนาดจะแตกต่างจากขนาดพื้นที่เก็บข้อมูลทั้งหมดของฉัน ฉันต้องการทราบว่าจะถ่ายโอนข้อมูลจำนวนเท่าใดเมื่อโคลนพื้นที่เก็บข้อมูลของฉัน


คำตอบ:


260

อัปเดต git 1.8.3 แนะนำวิธีที่มีประสิทธิภาพมากขึ้นเพื่อให้ได้ขนาดคร่าวๆ: git count-objects -vH(ดูคำตอบโดย @VonC)

สำหรับแนวคิดที่แตกต่างของ "ขนาดสมบูรณ์" คุณสามารถใช้:

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

ปิด (แต่ไม่แน่นอน :)

git gc
du -sh .git/

ด้วยสิ่งหลังนี้คุณจะต้องนับ:


ขอบคุณ! พฤติกรรมแรกสะท้อนขนาดโคลนทั้งหมดได้อย่างแม่นยำยิ่งขึ้น แต่พฤติกรรมที่สองนั้นใกล้เคียงกันมาก
mschallert

7
หมายเหตุ: คำตอบนี้ล้าสมัย ดูคำตอบของ VonC แทนรุ่น git> = 1.8.3
John Dibling

หมายเหตุด้วยคำตอบของฉันคือวิธีที่สมบูรณ์มากขึ้นซึ่งอาจมีบุญเป็นของตัวเอง
sehe

คุณช่วยกรุณาเพิ่มสิ่งgit bundleและgit gcไม่จริง? มันจะสร้างไฟล์เก็บถาวรอีกอัน (ไม่ต้องการ) แล้ววัดขนาดหรือไม่
Ramesh Pareek

1
@RameshPareek ใช่ ค่อนข้างชัดเจนเพราะฉันใช้duวัดขนาดของไฟล์นั้น
sehe

252

โปรดทราบว่าตั้งแต่git 1.8.3 (เมษายน, 22d 2013) :

ตัวเลือก " git count-objects" เรียนรู้ " --human-readable" aka " -H" เพื่อแสดงจำนวนมากในKi/ Mi/ GiBปรับสัดส่วนตามความจำเป็น

ที่สามารถนำมารวมกับ-vตัวเลือกที่กล่าวถึงโดยแจ็คมอร์ริสันในคำตอบของเขา

git gc
git count-objects -vH

( git gcเป็นสิ่งสำคัญตามคำตอบของABB )

บวก (ยังคอมไพล์ 1.8.3) ผลลัพธ์จะสมบูรณ์มากขึ้น:

" git count-objects -v" เรียนรู้ที่จะรายงานที่เหลือ packfiles ชั่วคราวและขยะอื่น ๆ ในการจัดเก็บวัตถุ


116

คำสั่ง git

git count-objects -v

จะทำให้คุณประเมินขนาดของพื้นที่เก็บข้อมูล git ได้ดี หากไม่มีแฟล็ก -v จะเป็นการบอกขนาดของไฟล์ที่ไม่ได้แพ็กเท่านั้น คำสั่งนี้อาจไม่อยู่ใน $ PATH ของคุณคุณอาจต้องติดตามมัน (เช่น Ubuntu ที่ฉันพบใน / usr / lib / git-core / เป็นต้น)

จากหน้า Git:

-v, - verbose

นอกเหนือจากจำนวนวัตถุที่หลวมและเนื้อที่ดิสก์ที่ใช้ไปแล้วจะรายงานจำนวนวัตถุในแพ็คจำนวนแพ็คพื้นที่ดิสก์ที่ใช้โดยแพ็คเหล่านั้นและจำนวนของวัตถุที่สามารถลบออกได้ด้วยการเรียกใช้ git พรุน

ผลลัพธ์ของคุณจะคล้ายกับที่แสดงต่อไปนี้:

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

size-packบรรทัดที่คุณกำลังมองหาอยู่ นั่นคือขนาดของอ็อบเจ็กต์การคอมมิทที่คอมแพ็คทั้งหมดหรือขนาดที่เล็กที่สุดที่เป็นไปได้สำหรับที่เก็บโคลนใหม่


4
จากประสบการณ์ของฉันgit count-objects -vทำงานเมื่อgit-count-objects -vไม่ได้ (เพราะมันไม่ได้อยู่ในเส้นทางของฉัน)
mwolfetech

5
@psihodelia ดูเหมือนว่าคุณอาจต้องเรียกใช้git gcก่อนใช้งานgit count-objects -vเนื่องจากที่เก็บข้อมูลของคุณอาจยังไม่ได้บรรจุ ดูคำตอบแรกที่นี่เพื่อหาหลักฐาน: stackoverflow.com/questions/3532740/…
Jack Morrison

5
คุณสามารถใช้ grep เพื่อรับเฉพาะบรรทัดที่ต้องการ: git count-objects -vH | grep 'size-pack'. นี่Hคือการแสดงในรูปแบบที่มนุษย์สามารถอ่านได้ตามที่ @VonC กล่าวในคำตอบของเขา
alko989

git count-objects --help: size-pack: พื้นที่ดิสก์ที่ใช้โดยแพ็คในหน่วย KiB (ยกเว้นว่ามีการระบุ -H)
auralbee

5

git-sizerคุณสามารถใช้ ในการ--verboseตั้งค่าเอาต์พุตตัวอย่างคือ (ด้านล่าง) มองหาTotal size of filesสาย

$ 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
นี่เป็นสิ่งที่ดีเพราะมันแสดงข้อมูลมากกว่าขนาดการโคลนทั้งหมด สิ่งหนึ่งที่มันไม่ได้แสดงว่าฉันยังคงอยากจะรู้ก็คือว่า ZIP จะมีขนาดใหญ่เพียงใดหากดาวน์โหลด
NH

@IndrajeetGour: คุณต้องติดตั้งจากgithub.com/github/git-sizer/#getting-started ดาวน์โหลดอยู่ที่github.com/github/git-sizer/releases
serv-inc

@downvoter จะอธิบายเหตุผลของเขาหรือไม่?
serv-inc

1

หากคุณใช้ git LFS git count-objects จะไม่นับไบนารีของคุณ

หากไฟล์ LFS ของคุณได้รับการจัดการโดย Artifactory คุณควรใช้ REST API:

  • รับ www.jfrog.com API จากเครื่องมือค้นหาใด ๆ
  • ดูที่ข้อมูลสรุปการเก็บข้อมูล

1

ฉันคิดว่านี่จะให้รายชื่อทั้งหมดของไฟล์ทั้งหมดในประวัติ repo:

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

คุณสามารถแทนที่--allด้วย treeish ( HEAD, origin/masterฯลฯ ) ในการคำนวณขนาดของสาขา


-1

หากที่เก็บอยู่บนGitHubคุณสามารถใช้แอพ Android โอเพ่นซอร์ส Octodroidซึ่งแสดงขนาดของที่เก็บตามค่าเริ่มต้น

ตัวอย่างเช่นกับที่เก็บmptcp :

ขนาดของที่เก็บ TCP multipath บน Octodroid

ขนาดของที่เก็บขณะทำการโคลน

คำเตือน: ฉันไม่ได้สร้าง Octodroid


1
พวกเขาอยู่ในหน่วยต่าง ๆ (GB x GiB) โดยวิธีการ 1.71 GB = 1.84 GiB เพียงแปลงและไม่สนใจรอบ
Luciano

ขออภัยฉันผสมพวกเขาเมื่อพิมพ์ความสัมพันธ์ที่ถูกต้อง: 1.71 GiB = 1.84 GB
Luciano
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.