aboutsummaryrefslogtreecommitdiff
path: root/bin/gscr.sh
blob: 2fbee05a4b628445e4bac4dc5798bfdb7d563992 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Scrub and pack Git repositories

# Iterate through given directories; default to the current one
for arg in "${@:-.}" ; do (

    # Note the "exit" calls here in lieu of "continue" are deliberate; we're in
    # a subshell, so leaving it will continue the loop.

    # Enter either bare repository or .git subdir
    case $arg in
        *.git)
            cd -- "$arg" || exit
            ;;
        *)
            cd -- "$arg"/.git || exit
            ;;
    esac

    # Check for bad references or other integrity/sanity problems
    git fsck || exit

    # Expire dangling references
    git reflog expire --expire=now || exit

    # Remove dangling references
    git gc --prune=now --aggressive || exit

) done