それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

git でローカルにブランチを作ってリモート(origin) にブランチをpush するまでの手順

ブランチをちょっとだけ使いこなす。

リモートに存在しないブランチを手元で作ってプッシュするまでの流れ。

レポジトリを持ってくる。

takuya@Desktop$ git clone git@example.com.:takuya/sample.git
takuya@Desktop$ cd sample/

現在のブランチを確認する。

リモートブランチを含め、現在あるブランチを確認する。

takuya@sample$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

ブランチを作成する。

ブランチを作成する(今回はリモートのmaster からブランチを作成)

takuya@sample$ git checkout -b  サンプルブランチ origin/master
Branch 'サンプルブランチ' set up to track remote branch 'master' from 'origin'.
Switched to a new branch 'サンプルブランチ'

ブランチが切られていることを確認する。

ブランチが切られていることを確認する。

takuya@sample$ git branch -a
  master
* サンプルブランチ
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
takuya@sample$ touch index.php
takuya@sample$ git add .

ローカルブランチへコミットする。

ブランチに変更を加えてみる。

takuya@sample$ git commit -m '作ったブランチへコミット'
[サンプルブランチ d5e9ee2] 作ったブランチへコミット
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 index.php
takuya@sample$ git push
Everything up-to-date

リモート(origin) にブランチを転送する。

コミットが出来たら、リモートに「ブランチ」を送信する。このときにリモートブランチが作成される。

takuya@sample$ git push origin サンプルブランチ
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 294 bytes | 294.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for サンプルブランチ, visit:
remote:   https://example.com/takuya/sample/merge_requests/new?merge_request%5Bsource_branch%5D=%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81
remote:
To example.com:takuya/sample.git
 * [new branch]      サンプルブランチ -> サンプルブランチ

ローカルブランチの状態を確認する。

remotes/origin/サンプルブランチ として、リモート(origin) にさっきのブランチが追加されてる。 これで、ローカルにあるブランチからリモートブランチ(新規作成)が出来たことが解る。

takuya@sample$ git branch -a
  master
*  サンプルブランチ
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/サンプルブランチ

ブランチが出来たら、マージ

ブランチが出来たら、次はマージするのですが、マージ作業をブラウザで出来るのがgithub のプルリクの強みだったりするのでいいよね。

ブランチ間のマージ

マージするときは master にマージしていくのが基本方針として、ブランチでの作業が少し進んでいる状態をmaster にマージする感じ。

master をチェックアウトして

takuya@sample$ git checkout master

サンプルブランチを取り込む

takuya@sample$ git  merge サンプルブランチ
Updating 460e6a0..2bf15e1
Fast-forward
 bashrc | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bashrc

取り込んだ、マージをリモートに送信する。

takuya@sample$ git push
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.

ローカルブランチを削除する。

takuya@sample$ git branch -d サンプルブランチ
Deleted branch サンプルブランチ (was 2bf15e1).

必要がなくなったリモートのブランチを消す。

リモートにブランチを削除するpush をする。

takuya@sample$ git push --delete origin サンプルブランチ
To example.com:takuya/sample.git
 - [deleted]         サンプルブランチ

まとめ

ローカルでブランチを作って、ブランチを送信できる

ブランチをマージするのは手元でやるのが基本。サーバー側でまとめて出来るのがgithub の魅力

リモートのブランチへの削除push が出来る

これで、帰宅時間が来たら帰宅時間ブランチを作ってpushすれば良いことが解る。

参考資料

ちょっと進んだGit, Githubの使い方~ブランチ活用編~ - nigoblog

シェルのalias されたコマンドの展開する - alias-expand-line

シェルのコマンドを展開したい。

composite 使おうとしたら、候補多すぎて面倒くさい。補完が補完にならないよね

takuya@~$ com<tab>
comm       command    compare    compgen    complete   compopt    composer   composite  compress   comsat

最初の3文字くらいで、展開されてほしい。 bashの補完で completion を書いても現在位置は置換できないし、alias で短縮しても履歴に元のコマンドを残したい。

alias してみてもうまくいかない。

alias すると、たしかに短くなるのだけど、履歴が汚れる。すげぇ面倒くさいわ。

alias comp=composite
history
997: comp
998: comp
999: comp

sysout<tab>System.out.println() になるような短縮(abbreviation)と補完(completion)をやりたいと思ってました。

alias-expand-line で解決する

ショートカットキー<ctl-alt-e> を押すと、展開される。これだ!

$ ll<ctl-alt-e>

こうなる

$ ls -lt 

これだ。

参考資料

https://superuser.com/questions/247770/how-to-expand-aliases-inline-in-bash

https://unix.stackexchange.com/questions/158038/non-interactive-shell-expand-alias

dockerのexpose のポートをlocalhostに限定する。

docker のポートのIPアドレスを限定したい。

expose したポートを、bind するときに、よく見る例がコレ

docker  run -p 80:80 ...

コレだと、0.0.0.0:80マッピングされる。グローバルアドレスにマッピングしてしまうのですよね。ちょっと先行き不安。

ローカル・ループバックに限定する

docker  run -p 127.0.0.1:80:80 ...

IPv6の ループバックはダメみたい

::1 はダメだった。悲しい。そのうちなんとかなるかも。

takuya@ubuntu01:~/docker-test$ docker-compose up -d
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.db.ports is invalid: Invalid port "::1:5432:5432", should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol]

docker-compose の場合

docker-compose の yml の場合はこう書くといいみたい。

    ports:
      - 127.0.0.1:5432:5432

なるほど、コレだとループバックだからiptables も考えなくていいから安心ですね。

参考資料

https://docs.docker.com/compose/compose-file/#ports

https://stackoverflow.com/questions/45109398/how-can-i-make-docker-compose-bind-the-containers-only-on-defined-network-instea