4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gitlabのリポジトリを小さくする

Last updated at Posted at 2022-08-24

はじめに

gitlabのフリー版は2022-10-19から最大5GB、5人までに制限されることになった。プロジェクトの「設定」-「割当使用率」から「Seats」タブを見ると割当て人数が、「ストレージ」タブを見ると使用サイズを確認できる。
間違えてあげてしまった画像などの影響でリポジトリが大きくなってしまっている場合のリポジトリサイズ削減手順をメモする。

基本的なことはgitlabのdocに書いてある。
gitlabに固有なのはリポジトリがデフォルトでロックされており、git push --forceが効かないこととクリーンアップ手順。
以下はmacOS 12.5での作業。
git version 2.32.0 (Apple Git-132)を使用。

警告

基本的にはリポジトリの履歴を書き換えるべきではありません。以下の手順では過去のコミット番号も変わってしまうため、Commit IDを記載したメッセージやリンクは役に立たなくなります。また、記事には誤記があるかもしれませんので、事前にリポジトリ全体をバックアップするなどの注意が必要です。本記事を参考にして作業する際は、自己責任で行なってください。

手順

やりたいこと:gitlabで管理されたリポジトリから大きなファイルを探して履歴から削除する。

0. 準備

同様のコマンドのgit-filter-branchを使おうとすると、git-filter-repoを勧められる。

brew install git-filter-repo

1. git cloneする

git clone project_path.git

2. 巨大ファイルを探す

git_find_big.shを使って大きなファイルを探す。macOSのzshだと動かないのでbashで呼び出す。

cd project_name
bash path/to/git_find_big.sh

3. git-filter-repoでローカルリポジトリでのファイル削除

ここからの作業は十分注意して行うこと。例えば、ファイル"file.ext"を削除する場合。--invert-pathsを入れないと"file.ext"以外が削除されてしまい、悲惨なことになる。フォルダを指定すればフォルダごと削除されてしまう。過去のコミット番号も変わってしまうため、Commit IDを記載したメッセージやリンクは役に立たなくなります。一度、git-filter-repoを呼び出したら、後の手順で利用するcommit-mapが書き変わるため、複数回git-filter-repoを呼び出したい場合は、毎回最後まで手続きを進める必要があります(もっと良い方法があるのかもしれませんが...)。

git filter-repo --path path/to/file.ext --invert-paths

4. リモートリポジトリの設定変更(Allowed to force push)

デフォルトではgit push --forceが効かないので、次にgit push -fする前にここにあるようにプロジェクトのサイトからSettings > Repository > Protected branches で表示される画面でブランチの"Allowed to force push"をONする

5. リモートリポジトリを再追加

git-filter-repoでリモートリポジトリの設定が削除されるので手動で追加する。

git remote add origin project_path.git

6. リモートリポジトリを強制アップデート

git push origin --force --all

7. commit-mapを作成する

commit-mapを作成し、取り出す。

git filter-repo --analyze
cp .git/filter-repo/commit-map .

8. 30分待つ

gitlabでは次のステップのリポジトリのクリーンアップは30分以上前のオブジェクトに対してのみ実行されるので、30分待つ。

9. リポジトリのクリーンアップ

gitlabのサイトでプロジェクトの設定へ行き、Settings > Repositoryから、Cleanupを選択する。
commit-mapファイルをアップロードして、"Start cleanup"ボタンを押す。

10. リモートリポジトリの設定変更(Allowed to force push)

手順4の設定を元に戻す("Allowed to force push"をOFFにする)。

以上

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?