Skip to content
GitHubのリポジトリを削除しても草が消えないようにする記事のサムネイル

GitHubのリポジトリを削除しても草が消えないようにする ​

私は草を生やすことにやりがいを感じるエンジニアです。 埋まっていくコントリビューショングラフを見て、こんなに開発やったんかー!とモチベーションが上がります。 ただ色々と開発をしているとリポジトリが増えていき、整理したくなる時があります。 当時の私はリポジトリを削除すると草が消えることを知らず、かなりの数のリポジトリを削除しました。 特に個人開発は休日にすることが多く、リポジトリを消したことで草がなくなり、土日何も開発やってない系エンジニアのようになって悲しい思いをしました。 そのため最近は草を消したくないがために、不要になった古いリポジトリをそのまま放置していました。 しかし職場の同僚から「リポジトリを消しても草が消えないようにする方法があるよ」と聞いたので、実際に試してみた記録です。 かなりハックな感じの内容になっています。

どのようにやるのか ​

ではリポジトリを削除しても草を残すにはどうするのか。 答えを先に言うと、コミット履歴を残す用のリポジトリを作成し、そこへコミット履歴を移すのです。 履歴さえ別のリポジトリに残っていれば、元のリポジトリは削除できるよねという話です。 何やそれと感じる方もいると思いますが、背に腹は代えられません。 では実践してみましょう。

削除するリポジトリの確認 ​

まずは削除するリポジトリのコミット履歴を見ておきましょう。 削除した後も草が残っているかを、後で見比べるためです。 削除したいリポジトリで下記を実行します。

bash
git log main --author="GitHubアカウントのメールアドレス" --format="%as" | sort | uniq -c

すると下記のようにコミットの履歴が出ます。

4 2023-12-28
2 2024-04-20
1 2024-12-25

リポジトリを削除した後もこの日付の草が残っていれば成功という訳です。 ちなみにコマンドでなくても、GitHubのUIからコミット履歴は確認できますのでこの辺りはお好みで。 今回はこの2024-04-20のコミット履歴で確認を行なうとします。

2024-04-20のコミット履歴

コミット履歴を残すためのリポジトリを作る ​

削除対象のコミット履歴を残すためのリポジトリを作成しておきます。 私はcontribution-archiveという名前で作成しました。 リポジトリ作成後は、README.mdだけコミットしておきます。

INFO

草としてカウントされるには、フォークではないリポジトリのデフォルトブランチ(もしくはgh-pagesブランチ)にコミットが存在している必要があります。 そのため、このリポジトリは既存リポジトリのフォークとして作らないようにしてください。 またプライベートリポジトリで作成する場合は、プロフィール側で「Private contributions」の表示をオンにしないと他の人からは草が見えません。

コミット履歴を移す ​

contribution-archiveをクローンし、下記コマンドを実行します。

bash
git switch main
git remote add <SOURCE-REPO> [email protected]:<USER>/<SOURCE-REPO>.git
git fetch <SOURCE-REPO>
git merge -s ours --allow-unrelated-histories <SOURCE-REPO>/main -m "Archive history: <SOURCE-REPO>"
git push origin main
git remote remove <SOURCE-REPO>

<SOURCE-REPO>は削除したいリポジトリ名に読み替えてください。 このリモートは最後に削除するので名前は何でも良いのですが、マージコミットのメッセージはcontribution-archive側に残り続けます。 後から見返したときにどのリポジトリの履歴かわかるよう、元のリポジトリ名をそのまま使っておくのがおすすめです。 -s oursを付けているので、取り込まれるのはコミット履歴だけでファイルの中身は入ってきません。 --allow-unrelated-historiesは、まったく関係のない履歴同士をマージするために必要なオプションです。

上記コマンドの実行後、下記のように2024-04-20のコミット履歴へcontribution-archiveが表示されていれば成功です。

2024-04-20のコミット履歴にcontribution-archive追加

リポジトリを削除してみる ​

あとは元のリポジトリを削除するだけです。 削除した後も、下記のようにcontribution-archiveの履歴として草が残っていました。

リポジトリ削除後に2024-04-20のコミット履歴にcontribution-archiveが残っている

いかがだったでしょうか。 草を生やすことにモチベーションを覚えるエンジニアもいると思います。 不要になったリポジトリを整理したいときも、この方法であれば草を残したまま削除できます。