2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Git でPushミスって課題再提出とか、もうしたくない!!!!

Last updated at Posted at 2025-12-06

この記事は、42Tokyo Advent Calendar 2025 の参加記事です。

42 の課題リトライ地獄から抜け出すために

42 の課題って、提出してからが本番ですよね!!!

  • 機械採点ではじかれた
  • Norminette で細かいところを指摘された
  • Reviewer にボコボコにされた

→ 修正して再提出することなんて無限にすることやと思います。

そんなとき、こんなあるある ありませんか?

  • 毎回ローカルで別ディレクトリにコピー → そこだけ修正して push しなおす
  • どのディレクトリが最新かわからんくなる
  • 「修正版を push したつもりが、1 個前のコミット出してた…」みたいな事故が起きる
  • 結果、Commit History もディレクトリ構成も ぐちゃぐちゃ

僕も完全にこれで、提出プロジェクトが増えるたびにカオスになってました。


解決策:自分の GitHub を「真のリポジトリ」にする

そこで僕がたどり着いたのが、

自分の GitHub リポジトリを「一番信用する・ちゃんと守る」場所にする

という運用です。

具体的には、

  1. まず 自分の GitHub に課題用リポジトリを作る
  2. 普段の開発・修正・履歴は全部 自分の GitHub(origin)に push
  3. 課題提出のときだけ、評価用リモート(vogsphere)を「もう 1 本の remote」として追加して push

というスタイルです。

実際のコマンドイメージ

Libft の課題用リポジトリがあって、すでに自分の GitHub から clone してあるとします。

提出用に vogsphere の URL が発行されたら、そのリポジトリ内で:

git remote add vogsphere <vogsphereのURL>

と一度だけ実行しておきます。

以降の運用はこんな感じ:

  • 普段の開発:

    git add .
    git commit -m "Fix ft_split edge cases"
    git push origin master   # or main
    
  • 提出 / リトライするとき:

    git push vogsphere master   # or main, 課題のルールに合わせて
    

これだけです。

コードの真の履歴は常に自分の GitHub(origin)に集約されているので、

  • 「どのコミットを出したか」
  • 「前回どこまで直していたか」
  • 「昔の黒歴史コード」

まであとから追いやすいです。

vogsphere 側はあくまで「その時点のスナップショットを置く場所」と割り切れます。


とはいえ、そもそもリポジトリ作るのがめんどくさい問題

ここまで読んで、

それはそうなんやけど、
そもそも課題ごとに GitHub リポジトリ作るのがめんどいんよな〜

と思った人もいるかもしれません。
僕も完全にそうでした。

42で課題をしていると、だいたいこんなラインナップが並びますよね:

  • Libft
  • get_next_line
  • ft_printf
  • pipex
  • push_swap
  • FdF
  • pipex
  • Philosophers
  • minishell

自分は「どうせやるんなら全部 GitHub で管理したい派」だったので、

  • ローカルで git init
  • GitHub で新規リポジトリ作成
  • remote 設定
  • 初回 push

を、課題ごとに毎回やっていて、正直だんだんダルなりました。

さらに、

  • 42 関連リポジトリを Organization に分けたい
  • でも Organization 作ったら今度は「全部作り直す」のも面倒

という問題も出てきて、「これはもう全部自動化するしかないわ!」となったんが、今回紹介するスクリプトの出発点です。


42-init_repos で課題用リポジトリを一括初期化する

そこで作ったのが 42-init_repos という Bash スクリプトです。

📦 GitHub: https://github.com/jiku0730/42-init_repos

一言で言うと、

REPOS にリポジトリ名一覧を書いておくと、GitHub とローカルをまとめて初期化してくれる Bash スクリプト

です。

何をしてくれるのか

やってくれることは大きく 4 つ:

  1. OWNER/REPO が GitHub 上に存在するかチェック
  2. なければ GitHub に public リポジトリを作成
  3. Description / Topics を gh repo edit で自動設定
  4. ローカルに clone し、まだコミットがない場合は README を作って 初回コミット& push

これを REPOS の配列に入っている分だけループしてくれます。

中身は README やスクリプトを見てもらうとして、ここでは雰囲気だけ伝われば OK です。


基本の使い方(ざっくり)

詳しい説明はリポジトリの README に書いてありますが、流れだけ書いておきます。

1. リポジトリを clone / ダウンロード

git clone https://github.com/jiku0730/42-init_repos.git
cd 42-init_repos

2. 設定ファイルを編集する

42_repos_config.sh を開いて、自分用に書き換えます。

# GitHub ユーザー名 or Organization 名
OWNER="your-github-username"   # 例: "jikuhar" や "42-your-org"

# ローカルのベースディレクトリ
BASE_DIR="$HOME/42-repos"

# 作成・設定したいリポジトリ名一覧
REPOS=(
  "Libft"
  "get_next_line"
  "ft_printf"
  "pipex"
  "push_swap"
  # "so_long"
  # "FdF"
  # ...
)

ポイントは OWNER です。

  • 自分のアカウント直下に作りたい → OWNER="自分の GitHub ユーザー名"
  • 42 用に Organization を作ってそこにまとめたい → OWNER="その Org 名"

のように切り替えられます。

3. gh CLI のログイン確認

gh auth status

gh: command not found と言われたら、GitHub CLI が入っていないのでインストールが必要です。
(README に、Ubuntu / macOS / Windows それぞれ 管理者権限なしで入れる方法も書いてあります)

4. スクリプトを実行

chmod +x 42_init_repos.sh
./42_init_repos.sh

これで、REPOS に書いてある分だけ

  • GitHub 上の OWNER/<repo> を確認して、なければ作成
  • Description / Topics 設定
  • BASE_DIR/<repo> に clone(既存があれば再利用)
  • コミットが無ければ README を作って初回 push

まで自動でやってくれます。


Organization を使う運用もかなり便利

個人的なおすすめは、

  • 最初は OWNER="自分のGithubのユーザー名" で使う
  • 慣れてきたら OWNER="42-<intra-id>" みたいな 専用 Organization を作って切り替える

という運用です。

なぜ Organization がいいのか

  • 個人アカウントのトップページが 課題レポジトリだらけにならない
  • 42 関連のリポジトリを 1 箇所にまとめて見られる

42-init_repos の場合、42_repos_config.shOWNER を差し替えるだけなので、

OWNER="your-github-username"
# を
OWNER="42-your-org"
# に変えるだけ

という感じで簡単に切り替えられます。


まとめ:リトライ地獄を抜けるには「仕組み」を作るのが一番ラク

  • 42 の課題はどうしても 数が多い
  • リトライも含めてちゃんと管理しようとすると、Git / リポジトリ周りがすぐカオス
  • 毎回手作業でリポジトリを作っていると、それだけでやる気ゲージが削られていく

そんな状況に対して、この記事で書いたのは、

  1. 自分の GitHub を「真の本番リポジトリ」にして、vogsphere は remote を 1 本足すだけにする運用
  2. その運用を支えるために、課題用リポジトリを一括で用意する 42-init_repos という小さなスクリプト

という 2 つの話でした。

  • これから 42 に入る人の「最初の GitHub 整理」
  • すでに 42 にいる人の「リポジトリ再整理」
  • Organization での運用の導入

あたりに使ってもらえたら嬉しいです。

よかったらぜひ試してみて、

  • 「ここもっとこうしたほうがいい」
  • 「自分はこうカスタマイズしてる」

みたいなフィードバックも貰えるとめっちゃ最高です 🙌

📦 GitHub: https://github.com/jiku0730/42-init_repos

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?