meta data for this page
Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
git:issues [2017/03/01 13:02] niziak |
git:issues [2023/07/17 16:02] (current) niziak |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Issues ====== | ||
+ | |||
+ | ====== fsck: dangling commit ===== | ||
+ | |||
+ | List details about dangling commits ([[https://lukescott.co/2019/05/10/git-finding-lost-dangling-commits/|Git – Finding Lost/Dangling Commits]]: | ||
+ | <code bash> | ||
+ | git fsck --lost-found | grep "^dangling commit" | sed "s/^dangling commit //g" | xargs git show -s --oneline | ||
+ | </code> | ||
+ | |||
+ | Cleanup: | ||
+ | <code bash> | ||
+ | git reflog expire --expire=now --all | ||
+ | git gc --prune=now --aggressive | ||
+ | git repack -a -d | ||
+ | </code> | ||
+ | |||
+ | ====== Reduce repo size ====== | ||
+ | |||
+ | |||
+ | It is important to check if git configured with default settings. | ||
+ | Especially forcing of creation of multiple smaller packs significantly increases repository size. | ||
+ | I.e. changing one 1.2G pack into multiple 256MB packs let, increases size of packs to 4.3GB :( | ||
+ | <code bash> | ||
+ | git config --global -l | ||
+ | git config --system -l | ||
+ | </code> | ||
+ | |||
+ | Especially take attention for options like: | ||
+ | * deltaCacheSize = 10m | ||
+ | * packSizeLimit = 10m | ||
+ | * windowMemory = 10m | ||
+ | |||
+ | |||
+ | Command <code bash>git gc</code> and other cleaning commands requires whole repository to be read into memory. For big repos (like kernel.git) it requires to allocate over 8GB of RAM. | ||
+ | Compression of objects is also performed in RAM, then packs are written onto disc. | ||
+ | [[https://stackoverflow.com/questions/42175296/git-gc-uses-a-lot-of-memory-even-i-limited-it]] | ||
+ | |||
+ | |||
+ | To prevent touching existing packs and exhaust system memory paramter ''auto'' should be used. <code bash>git gc --auto</code> | ||
+ | Another possibility is to mark some packs as ''keep'' by creating .keep files. | ||
+ | |||
+ | Remove unreachable objects: | ||
+ | <code bash> | ||
+ | |||
+ | git count-objects -v | ||
+ | git gc --auto # this is enough to remove loose objects and repack repo | ||
+ | git count-objects -v | ||
+ | |||
+ | # more instruction | ||
+ | git repack -Ad # Remove dangling objects from packfiles | ||
+ | git prune # Remove dangling loose objects | ||
+ | git gc --aggressive --prune=now --force || rm -f .git/objects/*/tmp_* && rm -f .git/objects/*/.tmp-* | ||
+ | |||
+ | git count-objects -v | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
====== error: pack-objects died of signal 9 ====== | ====== error: pack-objects died of signal 9 ====== | ||
Line 32: | Line 90: | ||
But if git binary from gitlab is used | But if git binary from gitlab is used | ||
<code bash>sudo -u git -H "/opt/gitlab/embedded/bin/git" config -l</code> | <code bash>sudo -u git -H "/opt/gitlab/embedded/bin/git" config -l</code> | ||
+ | |||
+ | <code bash> | ||
+ | /opt/gitlab/embedded/bin/git --git-dir=/home/git-data/repositories/funny/linux.git config -l | ||
+ | /opt/gitlab/embedded/bin/git --git-dir=/home/git-data/repositories/funny/linux.git bundle create /tmp/linux.bundle --all | ||
+ | </code> | ||
+ | |||
then, file ''/opt/gitlab/embedded/etc/gitconfig'' is used. | then, file ''/opt/gitlab/embedded/etc/gitconfig'' is used. | ||
To modify this file: | To modify this file: | ||
Line 44: | Line 108: | ||
Test config: | Test config: | ||
- | <code>gitlabctl show-config</code> | + | <code>gitlab-ctl show-config</code> |
Regenerate config: | Regenerate config: | ||
- | <code>gitlabctl reconfigure</code> | + | <code>gitlab-ctl reconfigure</code> |