- 投稿日:2020-05-30T23:19:53+09:00
JupyterLab で Jupyter notebook(ipynb)の 差分を見やすく Git管理する
TL;DR
Jupyter Notebook で分析を進める際、バージョン管理をしたいと思いGitで管理をしてみましたが、普通に進めるとNotebook のメタデータによって差分がとても見づらかったので、JupyterLab の
jupyterlab-git
とnbdime
エクステンションを利用し、差分を見やすく表示できるようにしてみました。JupyterLab 環境を構築
今回の記事では、下記の環境を利用します。
- docker-compose を使用
- docker-compose のインストールは こちら を参照
- コンテナイメージのベースは kaggle-images を利用
Jupyter notebook のバージョンコントロールに必要な JupyterLab エクステンションは下記になります。
- jupyterlab-git
- nbdime
- こちらは jupyterlab-git をインストールすると一緒にインストールされる
環境構築
下記2ファイルを作成します。
- Dockerfile
- docker-compose.yml
DockerfileFROM gcr.io/kaggle-images/python:v74 RUN apt-get update && \ apt-get install -y git \ curl RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - &&\ apt-get install -y nodejs RUN pip install -U pip \ jupyterlab && \ pip install jupyterlab-git RUN jupyter lab builddocker-compose.ymlversion: "3" services: jupyter: build: . volumes: - $PWD:/tmp/work working_dir: /tmp/work ports: - 8888:8888 command: jupyter lab --ip=0.0.0.0 --allow-root --no-browserDocker イメージのビルド
上記2ファイルを作成後、同ディレクトリにてビルドします。
$ docker-compose build
コンテナを起動
ビルド後コンテナを起動します。
$ docker-compose up
起動後は http://localhost:8888/ にアクセスし、token を入力して JupyterLab にアクセスできます。
token とは起動後に出力される、例:http://acb729d0c5ce:8888/?token=45d10c660d2e85f0c8d59995a04667c154542ae79f27f65d
の45d10c660d2e85f0c8d59995a04667c154542ae79f27f65d
にあたる箇所です。Extension Manager を Enable
起動後は Exxtension Manager を Enable します。
Notebook を Git でバージョン管理をする
Git リポジトリ を Clone
必要なリポジトリをクローンします。すでに Notebook などがある場合は git init などをします。
Notebook (
test.ipynb
) を作成して first commit します。$ git config --global user.email "you@example.com" $ git config --global user.name "Your Name" $ git add test.ipynb $ git commit -m "first commit"first commit 後、 Notebook で分析を進めたとします。例えば df.head() というコードを追加したとします。
git diff での差分表示
まず、
git diff
コマンドで確認した場合は、下記のように Notebook のメタデータなどの差分が表示されてしまいとてもわかりづらいです。# git diff diff --git a/test.ipynb b/test.ipynb index f6c1f17..5af6074 100644 --- a/test.ipynb +++ b/test.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -30,12 +30,164 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(data_dir + \"train.csv\")" ] + }, + { + "cell_type": "code", :JupyterLab nbdime での差分表示
JupyterLab にて nbdime を利用して diff を確認した場合は下記になります。ピンクの左側は変更前、緑の右側は変更後になります。
とても見やすく差分が表示されていると思います。
参考
- 投稿日:2020-05-30T21:54:15+09:00
Git マージ済みのブランチを一括削除する
問題
Gitのブランチはリモートリポジトリでマージされても自動的に削除されないので自分で削除する必要があります。
環境
$ git --version git version 2.26.2予備知識
マージ済みのブランチを表示
$ git branch --merged補足: マージしてないブランチを表示
$ git branch --no-merged補足: リモートリポジトリも含めてすべてのブランチの一覧を表示
$ git branch --all $ git branch -aブランチを削除する
$ git branch -d feature/issue-xxx $ git branch -D feature/issue-xxx
-d
オプションはマージされていないブランチは削除されません。
-D
オプションはマージされていないブランチも強制的に削除します。リモートリポジトリで削除されているブランチを削除する
git featch
する際にprune
オプションを付けると削除済みのブランチを削除してくれます。$ git fetch --prune $ git fetch -p補足: 常にpruneオプションを有効にする
$ git config --global fetch.prune true本題
git fetch --prune
でリモートリポジトリで削除済みのブランチを削除したあとgit branch --merged
で出てきたブランチを削除すれば良いわけです。注意点としては、
master
やdevelopment
といった特定のブランチは削除対象外にしたいところです。
git alias
を使っても大丈夫なのですが、.gitconfig
ファイルを管理するのが少し面倒だなと感じたのでシェルスクリプトを書きたいと思います。
zsh
でもbash
でも動作しますが、zsh
の例で進めます。
~/.zshrc
に以下のコードを追加します。~/.zshrcPROTECT_BRANCHES='master|development' git-delete-merged-branch() { git fetch --prune git branch --merged | egrep -v "\*|${PROTECT_BRANCHES}" | xargs git branch -d }保護したいブランチは
PROTECT_BRANCHES
の環境変数に|
区切りで追加してください。
シェルの設定ファイルを読み直します。$ exec $SHELL -lコマンドを実行します。(Gitが管理しているディレクトリ内で実行してください)
$ git-delete-merged-branch試しに実行するとこんな感じです。
補足: .gitconfig のエイリアスでやる場合
~/.gitconfig
の alias 設定でやりたい場合は下記のようにします。[alias] delete-merged-branch = !git branch --merged | egrep -v '\\*|master|development' | xargs git branch -d$ git delete-merged-branchGit関連の記事まとめ
- 投稿日:2020-05-30T20:55:03+09:00
gh-openからhub browseに移行した
移行後
prのリポジトリに直接ブラウザで開けるようになった
afterhub browse移行前
prのmasterリポジトリをブラウザで開いていた
beforegh-open $(pwd)結果
一覧からprを探す必要がなくなった
備考
これも便利だが、prナンバーがわからないとブラウザを開けない
hub browse -- pull/PR_NUMBER
一応下記で番号がわかるが、やや手数が増える。。
gh pr list
gh コマンドの記事
https://qiita.com/kajirikajiri/items/c18726e3831b27ba943fghコマンド公式
https://github.com/cli/clihubコマンド公式
https://github.com/github/hub
- 投稿日:2020-05-30T16:00:21+09:00
git for windowsでカレントディレクトリを開く
- 投稿日:2020-05-30T12:00:17+09:00
ターミナルでgit branch名を表示する
ターミナルにブランチ名を表示
いいかげんgit branchって打ちたくないのでターミナルでブランチ確認できるように設定追加するようにしました。
$ sudo vim ~/.bash_profile
# Git branch in prompt. parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' } export PS1="\W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ "最後に
$ source ~/.bash_profile
で更新すれば良い。参考URL
https://gist.github.com/joseluisq/1e96c54fa4e1e5647940
余談
ちなみにユーザ名とホスト名も表示したかったら以下のように書けば良い。
\uはユーザ名で\hはホスト名らしいです。長いので自分は表示しない。export PS1="\u@\h \W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ "
- 投稿日:2020-05-30T10:52:06+09:00
【Git,Github】業務フロー(開発フロー)
記事にした経緯
以前、とあるIT企業で開発のアルバイトをしていました。
当時はgitやgithubの基本的な操作は知っていたのですが、
「結局、業務の中でどんな風に使えばいいの?」となっていました。
そこで、「gitやgithubの業務(開発)フローの記事があったら、役に立つ人いるんじゃね??」思い、記事を執筆しました。対象
- gitの基礎はわかる人
gitを使った開発フロー
- 自分の作業場所を最新状態にする
- ブランチ名を作成,作成したブランチに移動する
- ソースコードの修正、追加などを行う
- 修正、追加したソースコードをステージングに追加する
- ステージングに追加したファイルをローカルリポジトリに追加する
- Githubのリモートブランチを更新する
- GithubでPR(pull request)作成する
- レビューをもらう
- 3へ
- 全て修正すれば、マージしてもらう(する)
- マージし終わったら、作成したブランチを削除する
1. 自分の作業場所を最新状態にする
まずは、自分自身の作業場所を最新状態にします。
最新状態する方法は主に以下の三つです。
$ git pullor
$ git fetch & git rebase origin リモートブランチ名or
$ git fetch & git merge origin リモートブランチ名個人的には二番目の
git fetch & git rebase origin リモートブランチ名
を使っています。2. ブランチ名を作成,作成したブランチに移動する
自分の作業をするためにブランチを作成し(切って)、作成したブランチに移動します。
ブランチの作り方は主に二通りあります。$ git branch ブランチ名 & git checkout ブランチ名or
$ git branch -b ブランチ名
-b
: ブランチを作成し、チェックアウトする
会社によってブランチ名の命名規則にはルールがあると思いますが、
基本的にはgitflowにしたがった命名規則でブランチ名をつけていました。3. ソースコードの修正、追加などを行う
機能追加や修正するためにソースコードを追加、修正を行います。
4. 修正、追加したソースコードをステージングに追加する
3.で修正や追加したソースコードをgithubに反映させるために、まずはステージングにあげてやる必要があります。
コードをステージングに追加するためにはaddコマンドを使用します。$ git add 修正したソースコード1, 修正したソースコード2, ・・・自分自身はgitコマンドを打つことは少なく、tigを使ってやっていました。
5. ステージングに追加したファイルをローカルリポジトリに追加する
次にステージングにあげたソースコードをローカルリポジトリに追加します。
コマンドは以下の通りです。$ git commit -m "コミットメッセージ"コミットメッセージは何をしたのかがわかるようにしっかりと書きましょう。
commitについてもaddコマンドと同様にtigを使用していました。コミットメッセージを間違えた場合など
コミットメッセージを間違えたり、ソースコードをローカルリポジトリに上げ忘れたりする時があると思います。
そういったときは以下のコマンドでコミットを取り消すことができます。git commit --amend6. Githubのリモートブランチに更新する
修正したソースコードをローカルリポジトリに上げ終わったら、次はgithubのリモートリポジトリにその内容を反映してやる必要があります。
その場合はpushコマンドを使用します。$ git push origin ブランチ名7. GithubでPR(Pull Request)作成する
pushし終わったら、修正したソースコードをレビュアーの方々に見てもらうためにプルリクエストを作成します。
プルリクエストの作成方法は以下を参考にしてください。
プルリクエストの作成方法8. レビューをもらう
プルリクエストを出すと、レビュアの人が自分が修正したコードに対して、コメントや修正依頼が入ります。
9. 3へ
修正依頼をもらった場合は、またソースコードの修正を行います。
10. 全て修正すれば、マージしてもらう(する)
修正依頼が全て終われば、レビュアーの方が出したプルリクエストを承認(approve)してくれます。
レビュアー全員の承認が降りれば、そのプルリクエストがdevelopブランチにマージされます。
(レビュアーの方か自分自身でマージを行います。)developブランチ
- 次のリリースのための最新の開発作業の変更が反映されているブランチ11. マージし終わったら、作成したブランチを削除する
マージされたら、作業していたブランチを削除して、作業は終了です。
他のブランチ(developブランチなど)に移動して、以下のコマンドで作成したブランチを削除します。$ git branch -d ブランチ名まとめ
gitの開発の流れ
- 自分の作業場所を最新状態にする
- ブランチ名を作成,作成したブランチに移動する
- ソースコードの修正、追加などを行う
- 修正、追加したソースコードをステージングに追加する
- ステージングに追加したファイルをローカルリポジトリに追加する
- Githubのリモートブランチを更新する
- GithubでPR(pull request)作成する
- レビューをもらう
- 3へ
- 全て修正すれば、マージしてもらう(する)
- マージし終わったら、作成したブランチを削除する
さいごに
今回は、git,githubの開発の流れについて書きました。
何かわからないことなどありましたらコメントよろしくお願いいたします。
- 投稿日:2020-05-30T02:11:53+09:00
初学者によるGitの使い方メモ1
はじめに
この記事では、初学者の私が学んでいることをメモとして残します。
Git(version 2.24.1)を使用しています。Gitコマンド
gitを使用する上で一番最初にしなければならないのが、
リポジトリの作成です。(.gitが作られる)
Gitリポジトリの管理ファイル等がここに作成されます。リポジトリの新規作成git initワークツリーからステージへ変更を追加。
変更をステージに追加git add 'ファイル名' git add 'ディレクトリ名' git add .ステージからリポジトリに記録
コメントは変更点が分かるようにする。
git commit -m の場合、変更内容と要点をまとめる。変更を記録git commit git commit -m 'コメント'git rm はリポジトリとワークツリーから削除される
git rm --cachedはリポジトリのみ削除ファイルの削除を記録git rm 'ファイル名' git rm -r 'ディレクトリ名' git rm --cached 'ファイル名'リモートリポジトリのURLをoriginに登録する
リモートリポジトリを追加git remote add origin https://github.com/~ローカルリポジトリの内容をリモートリポジトリに送信
リモートリポジトリを追加git push 'リモート名' 'ブランチ名'