ためすう

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

参考