ためすう
git の hook を使ってみる
2019-10-11やったこと
git の hook を使ってみます
確認環境
$ git --version
git version 2.17.2 (Apple Git-113)
調査
pre-push をコピーする
$ cp .git/hooks/pre-push.sample ./.git/hooks/pre-push
pre-push 変更
先頭にコードを追加してみます。
./.git/hooks/pre-push
echo 999
echo "エラーが発生しました"
exit 1
... (下記省略)
push
$ git push origin master
999
エラーが発生しました
error: failed to push some refs to 'xxx.git'
push 出来なかったことが分かります。
git show-branch でブランチの状態を見る
2019-10-11やったこと
git show-branch
を使い、ブランチの状態を見ます
確認環境
$ git --version
git version 2.17.2 (Apple Git-113)
調査
test1
ブランチに test2
をマージされているとします。
コマンドを実行すると、下記のようになりました。
$ git show-branch
! [master] add
* [test1] Merge branch 'test2' into test1
! [test2] a
---
- [test1] Merge branch 'test2' into test1
*+ [test2] a
* [test1^] t
+*+ [master] add
test1
ブランチに、マージコミット以外があった場合、気づくことが出来るかと思います。
git で add した後に差分を確認する
2019-10-10やったこと
git で add した後に差分を確認します
確認環境
$ git --version
git version 2.17.2 (Apple Git-113)
調査
git add した後の状態を確認する
$ git status
On branch test1
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: add.md
差分を確認する
$ git diff --cached
diff --git a/add.md b/add.md
new file mode 100644
index 0000000..bb95160
--- /dev/null
+++ b/add.md
@@ -0,0 +1 @@
+33
おまけ
ヘルプ抜粋
$ git diff --help
git diff [--options] --cached [<commit>] [--] [<path>...]
This form is to view the changes you staged for the next commit relative to the named <commit>
git add で部分的に適用する
2019-10-10やったこと
git add で部分的に適用します
確認環境
$ git --version
git version 2.17.2 (Apple Git-113)
調査
diff 確認
$ git diff aaa.md
diff --git a/aaa.md b/aaa.md
index b58152c..6e0860d 100644
--- a/aaa.md
+++ b/aaa.md
@@ -1,7 +1,7 @@
1
2
-xxxxx
-xxxxx
+YYYYY
+YYYYY
3
4
5
@@ -118,6 +118,13 @@ xxxxx
1
2
3
+xxxxx
+xxxxx
+4
+5
+1
+2
+3
4
5
1
add 適用
$ git add -p aaa.md
diff --git a/aaa.md b/aaa.md
index b58152c..6e0860d 100644
--- a/aaa.md
+++ b/aaa.md
@@ -1,7 +1,7 @@
1
2
-xxxxx
-xxxxx
+YYYYY
+YYYYY
3
4
5
Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? y
@@ -118,6 +118,13 @@ xxxxx
1
2
3
+xxxxx
+xxxxx
+4
+5
+1
+2
+3
4
5
1
Stage this hunk [y,n,q,a,d,K,g,/,e,?]? n
2つ目の差分については n
で add しないようにしました。
確認
差分が残っていることが分かります。
$ git diff aaa.md
diff --git a/aaa.md b/aaa.md
index ecdaeaf..6e0860d 100644
--- a/aaa.md
+++ b/aaa.md
@@ -118,6 +118,13 @@ YYYYY
1
2
3
+xxxxx
+xxxxx
+4
+5
+1
+2
+3
4
5
1
git のブランチ名を変更する
2019-10-10やったこと
ブランチ名を変更します
確認環境
$ git --version
git version 2.17.2 (Apple Git-113)
調査
パターン1 (oldbranch は省略)
変更前
$ git branch
master
* test1
$ git branch -m test2
$ git branch
master
* test2
test2
に変わりました。
パターン2 (oldbranch を指定)
変更前
$ git branch
* master
test2
$ git branch -m test2 test1
$ git branch
* master
test1
test2
-> test1
に変わりました。
ヘルプ抜粋
$ git branch --help
git branch (-m | -M) [<oldbranch>] <newbranch>
git add の取り消し (インデックスから削除する)
2019-10-09やったこと
git add
でインデックスに登録したあと、インデックスから削除します。
確認環境
$ git --version
git version 2.17.2 (Apple Git-113)
調査
git add でインデックスに登録する
$ git add app/controllers/users_controller.rb
$ git add ggg
ステータス確認
$ git --version
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: app/controllers/users_controller.rb
new file: ggg
$ git reset HEAD
Unstaged changes after reset:
M app/controllers/users_controller.rb
参考
git clean を使ってみる
2019-10-09やったこと
バージョン管理していないファイルを消します。
確認環境
$ git --version
git version 2.17.2 (Apple Git-113)
調査
ファイル準備
$ touch a
$ touch b
削除のドライラン
$ git clean -n
Would remove a
Would remove b
削除実行
$ git clean -f
Removing a
Removing b
less でオプション使ってみる
2019-10-09やったこと
less でログを見やすくするオプションを試しました。
調査
例えば、Rails のログをみるとします。
$ less log/development.log
Started GET "/" for ::1 at 2019-10-09 23:04:28 +0900
path is other
Processing by TasksController#index as HTML
ESC[1mESC[36mTask Load (1.3ms)ESC[0m ESC[1mESC[34mSELECT "tasks".* FROM "tasks" WHERE "tasks"."id" = ? LIMIT ?ESC[0m [["id", 1], ["LIMIT", 1]]
↳ app/controllers/tasks_controller.rb:7
Rendering tasks/index.html.erb within layouts/application
Rendered tasks/index.html.erb within layouts/application (1.8ms)
Completed 200 OK in 92ms (Views: 60.4ms | ActiveRecord: 1.8ms)
-qR オプションつき
$ less -qR log/development.log
Started GET "/" for ::1 at 2019-10-09 23:04:28 +0900
path is other
Processing by TasksController#index as HTML
Task Load (1.3ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ app/controllers/tasks_controller.rb:7
Rendering tasks/index.html.erb within layouts/application
Rendered tasks/index.html.erb within layouts/application (1.8ms)
Completed 200 OK in 92ms (Views: 60.4ms | ActiveRecord: 1.8ms)
おまけ
ESC という文字が消えています。
-q
は、ビープ音を鳴らさなくします。
-R
は、ANSI Escape sequences をカラー表示します。
$ man less
> -q or --quiet or --silent
> -R or --RAW-CONTROL-CHARS
正規表現でキャプチャを使う (Ruby)
2019-10-08やったこと
正規表現でキャプチャの結果を名前付きで取得します。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
reg.rb
text = '2019年10月'
result = /(?<year>\d+)年(?<month>\d+)月/.match(text)
p result
p result[:year]
出力結果
$ ruby reg.rb
#<MatchData "2019年10月" year:"2019" month:"10">
"2019"
参考
dig を使ってみる (Ruby)
2019-10-08やったこと
dig を使ってみます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
dig.rb
a = [
{
k: 1,
v: 100
},
{
k: 2,
v: 200
}
]
p a.dig(0, :v)
p a.dig(1, :k)
p a.dig(2, :k)
出力結果
$ ruby dig.rb
100
2
nil