GCPのJupyter LabからGSRにGitするやり方

#1.目的
最近、GCP上でcloud shellからGSRへのadd, commit, pushといった基本的な一連の流れはだいぶ慣れてきたものの、実際の開発はjupyter Labとかでやることも多いから、cloud shellからじゃなくてJupyter Labからpushできると便利だなと思い、基本の流れをまとめました。

具体的には、GCPのAI Platformからノートブックを立ち上げます。

#2.早速やってみよう

##(1)先にリポジトリを作っておく

「Qiita」というリポジトリをGSR上で作り、「test.txt」を事前にcloud shellからpushしておきました。
（下記はGSRのQiitaリポジトリの画面）

<img width="407" alt="キャプチャ2.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/e7761958-bd93-77bc-c316-079531155d91.png">

##(2)Jupyter Labの立ち上げ
GCPのハンバーガーメニュー（左側のメニュー）から「AI Platform」を選択。
※私はピン止めしているので上の方に出てきますが、実際は結構下の方にあります。

その後、ノートブックを選択し、インスタンスを作成します。
※私はリージョンはasia-northeastにしています。


<img width="534" alt="キャプチャ1.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/54bbf9c5-688b-9981-6706-7f47fa15fccd.png">

##(3)ディレクトリの作成
下記のように、新しいフォルダを作っておきます。
今回はQiita_notebookというディレクトリを手動で作っておきました。
※clone_jupyterというディレクトリは別途私が個人的に作っているだけなので、無視してください。

<img width="398" alt="キャプチャ3.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/8ce7ae37-d451-6d85-515e-a61c9737b332.png">

##(4)Git用のnotebookを作成→GSRからクローンする
(3)で作成したQiita_notebookディレクトリ内にnotebookを作ります。
今回は「Qiita.ipynb」です。

このnotebook内で、下記のようにコマンドを打っていきます。

<img width="588" alt="キャプチャ4.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/479a6554-0da9-41c1-71a9-57ec54c59a5e.png">

①初期設定
ここは通常のGitと同じ流れです。

②クローン
GSRのQiitaリポジトリをクローンします

→これを実行すると、上のキャプチャの③のように、突如ぽこっと「Qiita」リポジトリがクローンされます

##(5)テキストファイルを修正してみる
Qiitaリポジトリに移動し、test.txtを開き、下記のように追記
→保存して閉じておきます。

※ここが、実際は開発時にコードを修正しているイメージです。

<img width="505" alt="キャプチャ5.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/f6d7a58c-d1ec-43c4-4d98-898cf0099c06.png">

##(6)Qiita.ipynbをQiitaリポジトリ内に移動
手動になりますが、今はQiitaリポジトリの外にいるQiita.ipynbをCutして、QiitaリポジトリにPasteしておきます。
※こうしないと、この後pushができませんでした。

<img width="294" alt="キャプチャ6.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/5fedce93-28ed-dc37-db56-9e961fd6c440.png">

##(7)いよいよ、pushしていく

下記のようにコマンドを打つと、GSRへpushされます！

<img width="370" alt="キャプチャ7.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/92a44350-19b0-b2c0-0503-22ccc39e2946.png">

##(8)GSRで確認

無事にjupyter Labからpushできていました！

<img width="486" alt="キャプチャ8.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/b0be4668-8097-2e02-5bbd-d7624b6bbd61.png">

#3.リモートリポジトリにpushしたくないファイルを設定する（7/19追記）
仕事で開発をしていると、避けて通れないのが**「セキュリティ関連」**。
gitでいうと、「パスワードが書かれたファイルを気づかないうちにリモートリポジトリにpushしてしまっていた」ということは割と頻繁に起こっているようです。

私も、セキュリティ的には問題ないのですが、意図せぬファイルをpushしてしまったことがあり、それ以来gitがめちゃくちゃ怖いです・・。

そんなときは「.gitignore」ファイルを作り、「ここに記載するファイルはバージョン管理しない」と設定することができます。

##「.gitignoreファイルの作成」
色んなサイトで.gitignoreファイルについては説明されていますが、意外に手取り足取り書いてくれているサイトが少なく、**「で、結局どうすればいいの？」**という点に詰まってしまいました。
特にjupyter lab上でのやり方に触れている記事が少なかったので、記載していきます。

下記のように、/test/branchディレクトリにリポジトリがクローンされているとします。

<img width="350" alt="キャプチャ1.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/c83b239b-d34b-181b-ed22-63cc0e619c23.png">

ここで、上のキャプチャの「＋」を押し、テキストファイルを選択します。

<img width="292" alt="キャプチャ2.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/a8ec32c5-90e6-177a-e178-3cdca1813980.png">

テキストファイルが立ち上がりますので、untitled・・の部分を右クリックし、「名前の変更（Rename File）」を選択。

<img width="300" alt="キャプチャ3.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/2f21783b-8397-9b78-1b7f-9ff3971683fb.png">

ここで、ファイル名を「.gitignore」にします（.txtも消します）。
<img width="250" alt="キャプチャ4.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/e6ea9159-c96f-7b83-181f-32a00e84874a.png">

これでRenameし、このテキストの中にバージョン管理したくないファイル名を書いていきます。
今回でいうと、例えば「administer.ipynb」と「member1.ipynb」に公開してはいけない情報が記載されているのでこの２つのファイルはバージョン管理しない、と設定するわけです。

<img width="200" alt="キャプチャ5.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465870/72925803-3af2-1eac-ea9a-862999df33ea.png">

このファイルを保存するとjupyter lab上からは「.gitignoreファイル」は見た目上いなくなりますが、「ls -a」で見ると存在します。

これだけで.gitignoreファイルの作成は完了です！
あとはこのファイルも併せてpushすれば、設定した2つのファイルはバージョン管理がされないというわけです。

※注意点
1.当然ですが、最初にpushする前にこの設定はしておいてください。
1度pushしてしまったら元も子もないので・・・。

2.notebookで作業する場合、「.gitignore」ファイルに**バージョン管理したくないファイル名だけでなく、「.ipynb_checkpoints/」も入れておいた方がいい**です。

→「.ipynb_checkpoints/」は、notebookで作業する場合自動でできるファイルのようで、バージョン管理したくないファイル名を.gitignoreファイルに記載していても、この「.ipynb_checkpoints/」の中にそのファイルがコピーされていて、pushしたら実は「.ipynb_checkpoints/」もpushされ、その中にバージョン管理したくない２つのファイルが入っていました・・。

#4.結び
いかがでしたでしょうか。
今後も適宜追記していきます。

Gitは奥が深い・・・。