- 投稿日:2020-05-29T23:50:37+09:00
GitHub 2回目以降のpush ほんとに簡単にメモ書き
ほんとに簡単にメモ書き
github$ git init $ git add .ここでもしaddできなかった場合は、-uで変更したファイルをaddできる
github$ git add -u $ git add 指定したファイル新規作成したリポジトリ等は直接指定してaddすればできるはず。
github$ git commit -m ‘message’ $ git status # On branch master # Your branch is ahead of 'origin/master’ by 1 commit.statusでコミットを確認できればpushでOK
github$ git push
- 投稿日:2020-05-29T16:54:53+09:00
Gitの設定:初級
対象OS
- 研究室のUbuntu
- terminalやATOMなどからでも使用できるが設定はterminalにて行うこと.
設定のための確認
GitLabを用いて研究室内でプログラムの共有を行う.そこで,GitLabにアクセスして設定のための以下の情報を確認しておくこと.
- フルネーム
- メール
GitLabへのアクセス方法
- 研究室内UbuntuへのID, Passwordを用いる.
- 研究室GitLabのログインページにて,LDAP Username, passwordに入力しSing inする.
- Sing in後,右上のアイコンから「設定」をクリックする.
- 左ペインのプロフィールを選択(されているはずだが)する.
- フルネームとメールの内容を確認する.
- 後のuser.nameとuser.emailの設定で使用する.
各種設定
Gitの初期設定
$ git config --global user.name "[フルネーム]" $ git config --global user.email [メール][フルネーム],[メール]にあたるところはGitLabで確認したフルネームとメールとする.
例
- フルネーム
- Ichiro Tanaka
- メール
- コマンド
$ git config --global user.name "Ichiro Tanaka" $ git config --global user.email icchi@gmail.comGitLab使用のための設定
GitLabとssh接続でファイルをアップロードしたりダウンロードする時にパスワードなしで簡単にやり取りするための設定.
SSH公開鍵の確認
以下のコマンドで公開鍵(id_rsa.pub)が既にあるか確認する.
$ ls ~/.ssh以下のファイルがあれば次のSSH公開鍵の作成を飛ばしてもかまわない.
- id_rsa
- 秘密鍵.他人に見せないように.
- id_rsa
- 公開鍵.他人に見せる用.
SSH公開鍵の作成
id_rsa.pubがなければ作成する.
$ ssh-keygen途中でパスフレーズ(passphrase)を求められるが,何も入力せずエンターキーで進める.
GitLabでのSSH公開鍵の利用
id_rsa.pubの中身をGitLabの然るべきところに張り付ける.まずid_rsa.pubの中身をコピーする.
例えば以下のコマンドで表示された文字列をコピーする.$ cat ~/.ssh/id_rsa.pub次にGitLabにアクセスし,右上のアイコンの設定から左ペインのSSH鍵(図では赤丸で示したプロフィールから7つ下)をクリックすると,文字列を張り付けられるページになる.
「キー」のところに張り付けて,「キーを追加」ボタンを押す.確認
自分のでなくても,誰かの適当なプロジェクトをclone出来ることを確認する.
- 投稿日:2020-05-29T16:53:32+09:00
自分とこの環境下におけるGit & GitLabレクチャー
完全に研究室の学生教育用としてGit & GitLabレクチャーノートを作成する.
このページは全体の構成をあらわし,各所へのリンク集とする.
ソースコードをのせ行指定での説明(〇行目は~という意味,みたいな説明)をしているので"Qiitaをより便利にするChrome拡張機能をつくりました"を見ながら拡張機能を入れて行表示できるようにしておくと見やすいかも.更新履歴
2020/6/5:基本的なところ作成.
2020/5/29:初期設定作成.
2020/5/28:このページ作成.事始め.対象
環境
- ユーザ使用PC
- Gitがインストールされている研究室内のUbuntu Desktop
- GitLab
- 研究室内のGitLabサーバ
- 本当のFQDN, IPを使用するとまずいので,ここでは下記の名前とする.
- FQDN:
- gitlab.mylab.ac.jp
- IP address:
- 192.168.7.1
知っといてほしい知識
- Git - Book
- とりあえず.基本.一読しておくように.情報いっぱいなので覚えなくてもよく,必要に応じて調べられるようにしておけば十分.
Contents
紹介
- Gitって?
- プログラムなどをバージョン管理するもの.
- 自分のPCにて管理.
- GitLabって?
- gitで管理するものをクラウドで管理してくれるサーバ.
- 研究室においてあるサーバ上でファイルを管理.
- 自分一人で管理するだけでなく他の人のファイルも扱え,みんなで管理できるようにしたもの.
- もちろん権限を色々設定可.
設定
とりあえず見るべきは初級のみ.それ以外は慣れて時間があれば.
- 初級: 初期設定
- 中級: 凝った設定
レクチャー
それぞれの項目に対して以下を目標に作成.
- 読むのに5分以内
- やるのに15分以内
- 入り組んだ話は後に.
- ただ,すぐに読めるようにリンクで対処
とりあえず見るべきは初級のみ.それ以外は慣れて時間があれば.
初級
- まずは...
- 作成したプログラムはすべてGitLabにアップロードしましょう!
- Git操作:概要と基本的な操作
- Git操作:タグとブランチ
- 独自ルール:多人数開発のためのGitLab・タグ・ブランチ
中級
応用
まとめた一般的な情報
future work
- 設定中級.sshやgit config.改行コードの話など.
- subdirectory化.
- チートシート準備?
- 前のバージョンにタグで戻す方法.
- git worktreeコマンドの紹介.
- グループプロジェクト内でのマージリクエストの流れ.
参考
- 投稿日:2020-05-29T16:25:04+09:00
【Windows10】「ゼロから作るDeep Learning」環境構築
はじめに
この資料は、「ゼロから作るDeep Learning」(1)~(3)の各書籍のコードを動かすために必要な準備を記載したものです。
基本的にプログラム書いたことのない方か、経験が浅い方向けです。
Windows上では開発しないという方にも役立つかもしれません。「gitとかvscodeとかそんなもの当たり前に入ってるよ!」
という方にはこの資料は不要なのでご注意ください。Pythonのインストール
公式サイトからインストーラをダウンロードする。
https://www.python.org/ページ上部の'Donwloads'をポイントし、'Download for Windows'の下に表示されるリンクをクリックするとダウンロードできる。
インストール時にパスを通しておくことを忘れずに。
具体的には、インストールウィザードの最初の画面で、「Add Python 3.X to PATH」にチェックを入れる。これを怠るとpipコマンドが使えない。
また、Windowsストアにある未インストールのPythonと誤認してコマンドを受け付けてくれなくなるなどの不具合が出る場合がある(経験談)。gitのインストール
サンプルコードがgithubにあるのでダウンロードはgit cloneで行うことにする。
そのための準備として、gitのインストールが必要となる。gitのインストールは公式サイトへ。
https://git-scm.com/ページ右側にある'Download x.xx.xx for Windows'のリンクをクリックするとインストーラがダウンロードできる。
Pythonモジュール類のインストール
本書のプログラムの実行に必要なライブラリ類をインストールしておく。
必要なライブラリは巻によって異なるが、まず1巻のみを読み進めるならばnumpyとmatplotlabの2つのみインストールしておけば問題ない。
それ以外のライブラリ類は2巻・3巻のコードを実行するために必要となるものである。スタートメニューからgit bashを起動する。
(コマンドプロンプトでも可能)
まず、pip自体をアップデートしておく。
pipは頻繁にアップデートされるので、既にpythonをインストールしている方でもアップデートすることをおすすめする。bash$ pip install --upgrade pipnumpy [1~3巻]
その後、numpyをインストール。
numpyはPythonの数値計算ライブラリである。bash$ pip install numpymatplotlib [1~3巻]
続いて、matplotlibをインストール。
matplotlibは機械学習本体の動作には関わらないが、機械学習の進み具合や性能をグラフで表示して評価するために用いる。bash$ pip install matplotlibsklearn [2巻]
2巻では、上記2つに加えてsklearnが必要になる。
(なくてもコードの実行は可能だが、学習にかかる時間が非常に長くなるためインストールした方がいい)
1巻では必要ない。bash$ pip install sklearnCuPy [2巻・3巻]
2巻・3巻のオプションで、1巻では必要ない。
オプションなのでインストールしなくても構わない(なくても現実的な計算時間で収まる)。
ただし、プログラムを改造するなどして複雑化しようとする場合は導入した方がよい。CuPyはNVIDIAのGPUを搭載したPCでしか使用できない。
インストール方法は下記の別記事を参照。
https://qiita.com/BARANCE_TW/items/30abf85c55070a2bdc9dPillow [3巻]
Pillowは画像処理用のライブラリである。
色空間を変更したり、2値化したりと画像を加工する機能を持つ。bash$ pip install pillowGraphviz [3巻]
graphvizはグラフ描画用のツールである。
ここで言うグラフは、matplotlibで描く一般的なグラフではなく、グラフ理論で用いられるエッジとノードからなるグラフのことを指す。インストール方法は下記の別記事を参照。
https://qiita.com/BARANCE_TW/items/c3f7816d38cc9e746bbdサンプルコードのclone
cloneの前に、適当な作業用のディレクトリ(フォルダ)を作成しておく。
以下では、Cドライブ直下に"ai"というディレクトリを作成した場合を想定。
(つまり、C:\ai
がワークスペースディレクトリになる)次にリポジトリURLをブラウザで開き、右側にある緑のボタンを押して表示されるclone用のURLをコピーする。
各巻のリポジトリは下記。
- 「ゼロから作るDeep Learning」のリポジトリ https://github.com/oreilly-japan/deep-learning-from-scratch
- 「ゼロから作るDeep Learning 2」のリポジトリ https://github.com/oreilly-japan/deep-learning-from-scratch-2
- 「ゼロから作るDeep Learning 3」のリポジトリ https://github.com/oreilly-japan/deep-learning-from-scratch-3
clone URLをコピーしたら、git bashを開き、下記の
{clone URL}
のところにコピーしたclone用URLを貼り付けて実行する。
少しすると、サンプルコードが該当ディレクトリにcloneされる。bash$ cd /c/ai $ git clone {clone URL}vscodeのインストール
1巻の序盤までは対話式コンソールでも十分なコード量だが、中盤以降は爆発的にコード量とファイル数が増えるので、何かしらの環境を利用することをおすすめする。
ここではvscodeをインストールするが、好きなIDEやエディタがあるのであればそれでも構わないと思う。vscodeは下記からダウンロードする。
ワークスペースを開く
vscodeを起動したら、まずはさきほどcloneしたディレクトリをワークスペースとしてopenする。
「ファイル」メニューをクリックし、「フォルダーを開く」を選択する。
(「ワークスペースを開く」ではないので注意)
その後、cloneしたディレクトリまで移動して「フォルダーの選択」をクリックすると、ワークスペースが開く。
左側の「エクスプローラー」にcloneしたファイルの一覧が表示されていることを確認する。launch.jsonの編集
vscodeでは「Ctrl」+「F5」でコードの実行ができる(または「F5」でデバッグ実行)。
しかし、その際の実行ディレクトリは、デフォルトではワークスペースのルートディレクトリになってしまう。
この状態のままだと、次のような問題が発生する。
- コードが記載されたファイルの場所を起点として記述したfrom・importが想定通りに働かなくなる。
- pickleなどでファイルをread/writeする際のディレクトリが、ワークスペースのルートディレクトリになってしまう。
この問題を解決するために、launch.jsonを編集してファイルのあるディレクトリを実行ディレクトリにする。
まず、左側のアイコンが並んだ場所から「実行」タブを選択し、「launch.jsonファイルを作成します」を選択する。
次に、「Select a debug configuration」という表示が現れるので、「Python File」をクリック。
すると、launch.jsonの編集画面が表示される。
このファイルは、ワークスペースのルートディレクトリ直下にある「.vscode」ディレクトリの中に格納される。
このファイルの「configurations」の値に
"cwd": "${fileDirname}"
という表記を付け加える。
付け加えた後のファイルは下記のようになる。launch.json{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", // カンマを末尾に追加 "cwd": "${fileDirname}" // ここに追加!! } ] }これで、「Ctrl」+「F5」で実行時にファイルのあるパスに移ってからプログラムが実行されるようになった。
- 投稿日:2020-05-29T15:52:04+09:00
GitのPackfileの容量が増えすぎて、パソコンが身動き取れなくなった日
はじめに
先日、パソコンの容量が埋まってしまい作業ができる状態ではなくなった。不要なファイルやアプリをとことん消したが解決には至らなかった為、より探ってみた。
No space left on deviceコマンドも打てない...
原因
- 大量のバイナリファイルを抱えていたので、
.git/oblects/pack/
が肥大化していた。
Packfile
とは
- そもそもgitでは
git init
をしたとき、objectsファイル内にpack
ファイルが作られる。そしてcommitをした際に新しいobjectファイルとして.git/oblects/pack/
に圧縮するらしい。パソコンの容量を空けた手順
- 容量を確認。
du -sh .git/objects
- 何がパックされているか、ファイルの中身を見ることができる。
git verify-pack -v .git/objects/pack/パックファイル
.git/objects/pack/
のtmp_pack_オブジェクトID
のファイルを削除。今回はとりあえず、リモートはそのままにローカルの容量を空けたいだけなので、commit履歴自体は消さず、歴史の改変も行わない。
終わりに
- 200GBも開けることができた。
- 不要なファイルとしてコミット履歴やリモートからも消したいのであれば、下の
参考
などを元に進める必要がある。- pushする際に
git gc
コマンドで、何がパックされているか確認することもできる。- バイナリをgitで管理するのはあまり得策ではないように思う...
参考
- Gitリポジトリをメンテナンスして軽量化する
- gitリポジトリに入れた巨大なファイルの履歴を削除する
- HowTo completely remove a file from Git history
- 10.2 Gitの内側 - Gitオブジェクト
- Gitの.git/objectsの中身を追ってみる
- Gitの驚愕の真実:1億行のファイルに1行追記するとレポジトリ容量が200MB増える[※補足あり]
- A3.11 Appendix C: Git Commands - Administration
- gitのレポジトリ容量の削減に失敗しないためのチェックポイント
- git filter-branchで過去の全てのcommitから画像ファイルの追加/変更をなかったことにしてリポジトリを軽量化する
- 投稿日:2020-05-29T15:20:26+09:00
git submodule --init --recursive で特定の submodule を無視する
背景
- project が submodule している repo が, さらに submodule で馬鹿でかい git repo を登録している
- project 自体では, その submodule が submodule している repo は使っていない(ビルドでは利用されない)ので無視したい
IREE
https://github.com/google/iree
でやってみます.
問題なのは, IREE が submodule 登録している swiftshader が submodule で追加している PowerVR_Examples です. 普通に clone すると 2 GB くらいあります(
--depth 1
でも 700 MB くらい)方法
https://stackoverflow.com/questions/52179463/how-to-exclude-a-specific-git-submodule-from-update
ありがとうございます.
-c submodule."REPO".update=none
を追加でいけました.ただ,
# NG $ git -c submodule."third_party/swiftshader/third_party/PowerVR_Examples".update=none submodule update --init --recursiveとすれば行けそうですが, 親プロジェクトからのパス指定はできないようでした.
# OK $ git -c submodule."third_party/PowerVR_Examples".update=none submodule update --init --recursiveのようにします.
third_party/PowerVR_Examples
を無視するのを, それぞれの submodule repo で実行する感じになっています.懸念点
git -c で設定を追加すると, submodule 処理が直列化するっぽい?ようです
(通常は submodules は並列に git clone される)TODO
- 同名の submodule repo path が, 複数の submodule repo にあるとうまく行かない(すべて無視されてしまう)ので, 特定の submodule ごとに設定できるようにする(うまく grep 的なのが使えればよいが... shell script を書くことになるかな?)
- 投稿日:2020-05-29T12:30:44+09:00
【Git】syntax error near unexpected token (' 解決方法メモ
- 投稿日:2020-05-29T05:23:55+09:00
gitのpre-commitでterraform書式チェックを自動化する
はじめに
terraformでインフラ運用している中で、credentials情報をローカルに持てない等のセキュリティポリシーが理由でローカル(コーディング環境)からterraform実行できないケースがあると思います。
そんなとき、書式ミスや変数参照ミスなどをterraform実行環境にデプロイしてみないとわからないのは、非効率ですよね。仮にデプロイをパイプライン等で自動化していても、パイプライン実行の待ち時間が無駄ですし、タイポなどのしょうもないミスでcommit履歴が汚れるのは微妙です。。そこで、gitのpre-commit機能を利用してcommit前に
terraform fmt/init/validate
を自動実行するようにしてみました。これによりコマンドが成功した場合のみcommitされ、失敗した場合は、commitされずにエラー内容が出力されます。うまく動かない等があれば、コメントいただければと思います。
実行例
成功例
$ git commit -m "test" Directory: terraform/ terraform fmt: Passed Directory: terraform/ terraform init: Passed Directory: terraform/ terraform validate: Passed Directory: terraform/environment/iam/ terraform fmt: Passed Directory: terraform/environment/iam/ terraform init: Passed Directory: terraform/environment/iam/ terraform validate: Passed Directory: terraform/environment/lambda/ terraform fmt: Passed Directory: terraform/environment/lambda/ terraform init: Passed Directory: terraform/environment/lambda/ terraform validate: Passed [master 9b47d9e] test 8 files changed, 77 insertions(+), 14 deletions(-) create mode 100644 terraform/environment/iam/dev.tfvars create mode 100644 terraform/environment/iam/prd.tfvars create mode 100644 terraform/environment/iam/variables.tf create mode 100644 terraform/environment/lambda/variables.tf失敗例
$ git commit -m "test" Directory: terraform/ terraform fmt: Passed Directory: terraform/ terraform init: Passed Directory: terraform/ terraform validate: Passed Directory: terraform/environment/iam/ terraform fmt: Passed Directory: terraform/environment/iam/ terraform init: Passed Directory: terraform/environment/iam/ terraform validate: Passed Directory: terraform/environment/lambda/ terraform fmt: Passed Directory: terraform/environment/lambda/ terraform init: Passed Error: Missing required argument on main.tf line 16, in module "get_lambda": 16: module "get_lambda" { The argument "memory_size" is required, but no definition was found. Error: Unsupported argument on main.tf line 23, in module "get_lambda": 23: memory_sze = 256 An argument named "memory_sze" is not expected here. Did you mean "memory_size"? Directory: terraform/environment/lambda/ terraform validate: Failed実行環境
- WSL (Ubuntu 18.04)
- git version 2.17.1
- Terraform v0.12.19
準備から実行まで
準備1. terraformインストール
使用しているversionに合わせたterraformをこちらからインストールします。
(すでにインストール済みの場合は不要)準備2.
.gitignore
に.terraform/
を追加ローカルで
terraform init
するので、.terraform/
配下にpluginやmoduleがインストールされます。
これらはgit管理する必要がないので.gitignore
ファイルに以下を追加します。
(すでに記載済みの場合は不要).gitignore.terraform/準備3.
pre-commit
ファイルを配置
.git/hooks
にpre-commit
というファイル名で以下の内容を配置する.git/hooks/pre-commit#!/bin/bash -u work_dir=`pwd` # 戻り値チェック check_return_code() { cmd_name="$1" dir_name="$2" rc=$3 if [ ${rc} -eq 0 ];then echo "Directory: ${dir_name} terraform ${cmd_name}: Passed" else echo "Directory: ${dir_name} terraform ${cmd_name}: Failed" exit 1 fi } # terraform実行ディレクトリを抽出する. # .tfファイルを含むディレクトリ名を変数target_dirに格納. .tfstate及びmoduleは除外. target_file=$(git diff --cached --name-only --diff-filter=AMRC | grep -E ".tf$|.tfvars$") if [ -n "${target_file}" ]; then target_dir=$(echo ${target_file} | xargs dirname | sort -u) else echo "No change in TF file." exit 0 fi # terraform init/validate for dir in ${target_dir} do cd ${work_dir}/${dir} || exit 1 # terraform fmt fmt_file=$(terraform fmt) check_return_code fmt ${dir} $? # fmtにより変更されたファイルをstageする. if [ -n "${fmt_file}" ];then cd ${work_dir} for file in ${fmt_file} do git add ${dir}/${file} done cd ${dir} fi # terraform init terraform init -backend=false 1>/dev/null check_return_code init ${dir} $? # terraform validate terraform validate 1>/dev/null check_return_code validate ${dir} $? #exit 1 done実行
上記実施後にcommitすると、実行例のように
terraform fmt/init/validate
が変更対象のディレクトリごとに実行されます。注意点
tf version 0.11以前でtfvarsファイルを使用している場合、terraform validateでエラーになります。
その場合、-var-fileオプションでtfvarsを明示的に指定する必要があります。参考