MarkdownとBullet Journal

いわゆるプログラマーのつぶやき

【Git】5. Google colab, GitHub, VSCodeの連携

何がやりたいのか

Google colabではPythonの実証が簡単に行える。履歴管理もcolab内で充実しておりGitの様に過去の版にいつでも戻って実行が行えるなど優れている。colab内での保存の都度、commitされている様なものなので通常の作業に於いて版の管理を意識する必要もない。

しかし開発が重なるとその履歴も膨大になってくるし、各版の整理などがやりたくなってくる。そこで、Google colabとGitHubを紐づけてGit側でも履歴管理出来る様にする。また履歴を整理出来る様にPCにクローンしてVSCodeでも使えるようにする。

なおVSCodeでノートブックを開くと、自動で「Open in colab」のボタンが出てくるので、それを用いてcolabを起動してコードを編集するのが良いだろう。もちろんVSCode側でPythonコードを編集しても良いが、編集&実行のサイクルはcolab上で済ませるのが本来の使い方だと思う。

手順

手順①:GitHubの設定

まずGitHubにこれからノートブックを履歴管理したいリポジトリを新規作成する。 なお、GitHubGoogle colab両者のID(メールアドレス)が同一ならば認証作業は不要になる。

手順②:Google colabのノートブックを保存

空あるいは既存のノートブック(.ipynbファイル)をリポジトリにアップロードすればよい。 あるいはColabでノートブックを新規作成してから、colabの「ファイル」-「GitHubにコピーを保存」でGitHubにpushしてもよい。以下手順を示す。

  • colabでノートブックを新規作成、適宜内容を編集
  • colabの「ファイル」-「GitHubにコピーを保存」をクリックするとCommit画面が表示される
  • 対象のリポジトリとブランチを指定してコミットメッセージを書いてOKを押せばPushされる

これでいつでもGitHubから必要な版を取り出すことが出来る。しかしながら、それだけならcolab内での履歴管理を使った方が良い。わざわざGitHubとリンクする最大の理由はコミットの整理である。それにはPC上にクローンを作る必要があり、以下説明する。

手順③:PCにクローン

  • PCにクローンを展開するためのフォルダを用意する
  • VSCodeでそのフォルダを開く
  • ターミナルでgit cloneを実行
  • 対象のサブディレクトリに移動(重要)
  • git reset(下記参照)やファイル追加、コミットなどいつもの通り行える
  • ノートブックを開き「Open in colab」のボタンをクリックしてcolabで編集

※これ以降のGitHubへのpushは、編集状況に応じて使い分ける必要がある。

①colabのノートブックを更新した場合:
  • colabの「ファイル」-「GitHubにコピーを保存」でpush
  • VSCodeのターミナルでgit pull
VSCodeでそれ以外を更新した場合:
  • VSCodeGitHubにpushする(コミット取り消しなどした場合はターミナルで強制上書き)

おまけ:コミットを整理

不要なコミットを取り消す

最初の内のセットアップやバグfixでゴチャゴチャしたコミットを一掃して、現在のコード内容に基づくコミットを行いたい場合は、戻したいコミットのSHA1を指定してgit resetする

git reset <戻したいコミットのSHA1>

なおコミットを取り消してからGitHubなどのリモートリポジトリにpushする場合は、以下の強制上書きモードでpushする必要がある。

git push -f  //または下の記載
git push -f origin main

初回コミット含め全てのコミットを取り消す

上の方法では1番最初のコミットを取り消せない。全コミットを取り消したい場合は次のコマンドを実行する(Working treeは変化なし)。

git update-ref -d HEAD

GitHubへのpushは上記同様に強制上書きモードでpushする。

コミット取消後の整理コミット

基本的にハンク単位(行単位)で、分割コミットを行うのが良い。手順は下の記事参照。

programmingforever.hatenablog.com