LoginSignup
0
0

More than 1 year has passed since last update.

Gitでリポジトリからファイルを完全に消す(何番煎じ)

Posted at

tl; dr

手順

1 確認用のスクリプトをダウンロードする

git_find_big.sh
#!/bin/bash
#set -x

# Shows you the largest objects in your repo's pack file.
# Written for osx.
#
# @see http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/
# @author Antony Stubbs

# set the internal field spereator to line break, so that we can iterate easily over the verify-pack output
IFS=$'\n';

# list all objects including their size, sort by size, take top 10
objects=`git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head`

echo "All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file."

output="size,pack,SHA,location"
for y in $objects
do
        # extract the size in bytes
        size=$((`echo $y | cut -f 5 -d ' '`/1024))
        # extract the compressed size in bytes
        compressedSize=$((`echo $y | cut -f 6 -d ' '`/1024))
        # extract the SHA
        sha=`echo $y | cut -f 1 -d ' '`
        # find the objects location in the repository tree
        other=`git rev-list --all --objects | grep $sha`
        #lineBreak=`echo -e "\n"`
        output="${output}\n${size},${compressedSize},${other}"
done

echo -e $output | column -t -s ', '

これで本当に消えたかどうかの確認ができます

2 全てのコミットやブランチ、タグから特定のファイルを消して書き換える

git filter-branch -f --index-filter 'git rm --ignore-unmatch path/to/target/file/or/dir' --tag-name-filter 'cat' -- --all

ネットで探すと --tag-name-filter 'cat' これが抜けてるものが結構引っかかります。これがないとタグを書き換えてくれません。

3 先ほどの操作で生成されたバックアップを消す

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

消さないと昔のコミットをここからずっと参照され続けてしまいます

4 不要な操作履歴を消す

git reflog expire --expire=now --all

(実はあんまりよく分かっていない)

5 これで不要なファイルへの参照が全て失われたはずなのでGCをかけて完全に消す

git gc --prune=now

単に使われなくなったファイルを消すだけなら --aggressive はおそらく不要です。

6 再確認

./git_find_big.sh

以上

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0