はじめに
いつも忘れるのでメモ
違い
参考サイトのまんまですが違いをメモ。
update
Homebrew自体を最新版にして,内部で管理しているformula(パッケージ)も最新版にする
upgrade
Homebrew内部で管理しているformulaのみを最新版にする
参考
もうちょっと詳しく書いてあるので気になる場合は参考サイトをどぞ http://glass5er.hatenablog.com/entry/20121208/1354983531
いつも忘れるのでメモ
参考サイトのまんまですが違いをメモ。
Homebrew自体を最新版にして,内部で管理しているformula(パッケージ)も最新版にする
Homebrew内部で管理しているformulaのみを最新版にする
もうちょっと詳しく書いてあるので気になる場合は参考サイトをどぞ http://glass5er.hatenablog.com/entry/20121208/1354983531
userのデータが入ってると仮定したyamlです
users: - name: ほげ ほげ男 full_name: first_name: ほげ last_name: ほげ男 sex: male birthday: 1990-12-12 self_introduction: long: ほげほげ男です。よろしくおねがいします! short: しゃす! image_urls: - /my/photo/01.png - /my/photo/02.png - /my/photo/03.png shemale: false - name: ふが ふが子 full_name: first_name: ふが last_name: ふが子 sex: female birthday: 1994-03-03 self_introduction: long: ふが子です!(≧∀≦*) image_urls: - /my/photo/01.png shemale: true
gopkg.in/yaml.v2
というパッケージを使います。
go getで取得すればいけるはず
$ go get gopkg.in/yaml.v2
今回はglideで入れました
sample.yaml
が読み込みたいyamlです。
glideな関係でmainのコードはsrc/go-yaml-sample/yaml_sample.go
となってます。
$ pwd プロジェクトdir $ tree -L 3 . ├── sample.yaml └── src └── yaml_sample ├── glide.lock ├── glide.yaml ├── vendor └── yaml_sample.go
gopkg.in/yaml.v2
を使うと、json.Marshal
な感じでyamlを読み込んでくれます。
package main import ( "fmt" "io/ioutil" yaml "gopkg.in/yaml.v2" ) // structたち type Data struct { Users []User `yaml:"users"` } type User struct { Name string `yaml:"common"` FullName fullName `yaml:"full_name"` Sex string `yaml:"sex"` SelfIntroduction selfIntroduction `yaml:"self_introduction"` ImageURLs []string `yaml:"image_urls"` Shemale bool `yaml:"shemale"` } type fullName struct { FirstName string `yaml:"first_name"` LastName string `yaml:"last_name"` } type selfIntroduction struct { Long string `yaml:"long"` Short string `yaml:"short"` } func main() { // yamlを読み込む buf, err := ioutil.ReadFile("../../sample.yaml") if err != nil { panic(err) } fmt.Printf("buf: %+v\n", string(buf)) // structにUnmasrshal var d Data err = yaml.Unmarshal(buf, &d) if err != nil { panic(err) } fmt.Printf("d: %+v", d) }
$ cd src/yaml_sample/ $ go run yaml_sample.go buf: users: - name: ほげ ほげ男 full_name: first_name: ほげ last_name: ほげ男 sex: male birthday: 1990-12-12 self_introduction: long: ほげほげ男です。よろしくおねがいします! short: しゃす! image_urls: - /my/photo/01.png - /my/photo/02.png - /my/photo/03.png shemale: false - name: ふが ふが子 full_name: first_name: ふが last_name: ふが子 sex: female birthday: 1994-03-03 self_introduction: long: ふが子です!(≧∀≦*) image_urls: - /my/photo/01.png shemale: true d: {Users:[{Name: FullName:{FirstName:ほげ LastName:ほげ男} Sex:male SelfIntroduction:{Long:ほげほげ男です。よろしくおねがいします! Short:しゃす!} ImageURLs:[/my/photo/01.png /my/photo/02.png /my/photo/03.png] Shemale:false} {Name: FullName:{FirstName:ふが LastName:ふが子} Sex:female SelfIntroduction:{Long:ふが子です!(≧∀≦*) Short:} ImageURLs:[/my/photo/01.png] Shemale:true}]}
yamlもサクっと簡単!\(^o^)/
git tagを取り消すメモ。 ほとんど手順メモ程度な感じ+他記事で使うスニペット記事。
他の取り消しもぱっと見たい自分用にまとめたので参考までに。
【git】add、commit、push、merge、pull request、merge pull request、tagの取り消し
- localでの取り消し(削除)
- リモートでの取り消し
ローカルで消す場合は git tag -d タグ
とします。
$ git tag v1.0.0 v1.0.1 v1.0.2 v1.0.4 v1.0.5 $ git tag v1.0.6 $ git tag v1.0.0 v1.0.1 v1.0.2 v1.0.4 v1.0.5 v1.0.6 $ git tag -d v1.0.6 Deleted tag 'v1.0.6' (was 7bd2f6b) $ git tag v1.0.0 v1.0.1 v1.0.2 v1.0.4 v1.0.5safdsa
リモートのtagを消す場合は git push origin :refs/tags/タグ
とします。
ローカルを先に消す必要も無いし、localのが一緒に消えるわけでもないです。
# リモートのタグを確認 $ git ls-remote --tags From https://github.com/tweeeety/git-tag-sample.git 6d0a343aa89b63f6d01116116afcca30c7250ed1 refs/tags/v1.0.0 08c9f32c3f36a7577366440f24b095a697c8645d refs/tags/v1.0.1 0715d6e897c84b003ee3f1d9833bfe23d0023355 refs/tags/v1.0.2 063adbe5ed48fc19dbea5d92491995e09ad762f2 refs/tags/v1.0.4 33ed691e1c4363b4b5cf7f102fab3ca27f5ba5ab refs/tags/v1.0.5 7bd2f6b05c73cc1042d0b9b8b311e96d3375b13f refs/tags/v1.0.6 # リモートのタグを削除 $ git push origin :refs/tags/v1.0.6 To https://github.com/tweeeety/git-tag-sample.git - [deleted] v1.0.6 # 消えてるか確認 $ git ls-remote --tags From https://github.com/tweeeety/git-tag-sample.git 6d0a343aa89b63f6d01116116afcca30c7250ed1 refs/tags/v1.0.0 08c9f32c3f36a7577366440f24b095a697c8645d refs/tags/v1.0.1 0715d6e897c84b003ee3f1d9833bfe23d0023355 refs/tags/v1.0.2 063adbe5ed48fc19dbea5d92491995e09ad762f2 refs/tags/v1.0.4 33ed691e1c4363b4b5cf7f102fab3ca27f5ba5ab refs/tags/v1.0.5 # ローカルには残ってるので別途消してね $ git tag v1.0.0 v1.0.1 v1.0.2 v1.0.4 v1.0.5 v1.0.6
git ls-remote --tags
のほうを忘れそうw
リリース管理やブランチ管理にはまぁまぁ利用するgit tagですがおさらいがてらにメモ
- git tagとは
- よく使うgit tagコマンド
- tagの作成
- tagの一覧
- tagの確認
- tagの削除
- tagのpush
- リモートのタグの一覧
- リモートのタグの削除
タグとは、コミットを参照しやすくするために、わかりやすい名前を付けるものです。
Gitでは、軽量タグと、注釈付きタグの2種類のタグが使用できます。また、一度付けたタグはブランチのように位置が移動することはなく固定です。
説明下手なので参考サイトから引用させていただきました。 * http://www.backlog.jp/git-guide/stepup/stepup4_1.html
あんちょこ的に先にまとめておきます。
コマンドベースでざっとできる事を羅列
# tagの作成 $ git tag タグ $ git tag -a タグ -m "こめんと" # tagの一覧 $ git tag # リモートのタグの一覧 $ git ls-remote --tags # tagの確認 $ git show タグ # tagの削除 $ git tag -d タグ # tagのpush $ git tag push タグ $ git push --tags
git tag タグ
$ git tag v1.0.0
git tag -a タグ -m ‘コメント’
$ git tag -a v1.0.0 -m 'add readme'
git tag -a タグ -m ‘コメント’ コミットハッシュ
$ git tag -a v1.0.0 -m "add readme" 6d0a343aa89b63f6d01116116afcca30c7250ed1
git tag
$ git tag v1.0.0 v1.0.1 v1.0.2 v1.0.3
git show タグ
$ git show v1.0.0 tag v1.0.0 Tagger: tweeeety <tweeeety.0719@gmail.com> Date: Mon May 8 23:09:11 2017 +0900 add readme commit 6d0a343aa89b63f6d01116116afcca30c7250ed1 Author: tweeeety <tweeeety.0719@gmail.com> Date: Wed Apr 19 21:58:44 2017 +0900 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..71d9d7a --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# git-tag-sample
git tag -d タグ
$ git tag v1.0.0 v1.0.1 v1.0.2 v1.0.3 $ git tag -d v1.0.3 Deleted tag 'v1.0.3' (was 8bfcc5a) $ git tag v1.0.0 v1.0.1 v1.0.2
git push origin タグ
$ git push origin v1.0.2 Counting objects: 8, done. Delta compression using up to 8 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (6/6), 525 bytes | 0 bytes/s, done. Total 6 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), done. To https://github.com/tweeeety/git-tag-sample.git * [new tag] v1.0.2 -> v1.0.2
タグv1.0.2
は一番最後のcommit(8bfcc5aa8eab54d20b46864595de4e8b992c4479)に対してつけたもの。
最初のcommitから最後までpushを一度もしてないままに、
git push origin v1.0.2
とする事もできる。
$ git log commit 8bfcc5aa8eab54d20b46864595de4e8b992c4479 Author: tweeeety <tweeeety.0719@gmail.com> Date: Mon May 8 23:11:22 2017 +0900 modify third commit 0715d6e897c84b003ee3f1d9833bfe23d0023355 Author: tweeeety <tweeeety.0719@gmail.com> Date: Mon May 8 23:10:42 2017 +0900 modify second commit 08c9f32c3f36a7577366440f24b095a697c8645d Author: tweeeety <tweeeety.0719@gmail.com> Date: Mon May 8 23:07:55 2017 +0900 modify first commit 6d0a343aa89b63f6d01116116afcca30c7250ed1 Author: tweeeety <tweeeety.0719@gmail.com> Date: Wed Apr 19 21:58:44 2017 +0900 first commit
それまでpushされてないlocalで作成済みのtagがまとめてpushされます
git push –tags
$ git push --tags Counting objects: 12, done. Delta compression using up to 8 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (6/6), 509 bytes | 0 bytes/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/tweeeety/git-tag-sample.git * [new tag] v1.0.2 -> v1.0.2 * [new tag] v1.0.4 -> v1.0.4 * [new tag] v1.0.5 -> v1.0.5
commitとの紐付けも見れて便利
git ls-remote –tags
$ git ls-remote --tags From https://github.com/tweeeety/git-tag-sample.git 6d0a343aa89b63f6d01116116afcca30c7250ed1 refs/tags/v1.0.0 08c9f32c3f36a7577366440f24b095a697c8645d refs/tags/v1.0.1 0715d6e897c84b003ee3f1d9833bfe23d0023355 refs/tags/v1.0.2 063adbe5ed48fc19dbea5d92491995e09ad762f2 refs/tags/v1.0.4 33ed691e1c4363b4b5cf7f102fab3ca27f5ba5ab refs/tags/v1.0.5
git push origin :refs/tags/タグ
# リモートのタグを確認 $ git ls-remote --tags From https://github.com/tweeeety/git-tag-sample.git 6d0a343aa89b63f6d01116116afcca30c7250ed1 refs/tags/v1.0.0 08c9f32c3f36a7577366440f24b095a697c8645d refs/tags/v1.0.1 0715d6e897c84b003ee3f1d9833bfe23d0023355 refs/tags/v1.0.2 063adbe5ed48fc19dbea5d92491995e09ad762f2 refs/tags/v1.0.4 33ed691e1c4363b4b5cf7f102fab3ca27f5ba5ab refs/tags/v1.0.5 7bd2f6b05c73cc1042d0b9b8b311e96d3375b13f refs/tags/v1.0.6 # リモートのタグを削除 $ git push origin :refs/tags/v1.0.6 To https://github.com/tweeeety/git-tag-sample.git - [deleted] v1.0.6 # 消えてるか確認 $ git ls-remote --tags From https://github.com/tweeeety/git-tag-sample.git 6d0a343aa89b63f6d01116116afcca30c7250ed1 refs/tags/v1.0.0 08c9f32c3f36a7577366440f24b095a697c8645d refs/tags/v1.0.1 0715d6e897c84b003ee3f1d9833bfe23d0023355 refs/tags/v1.0.2 063adbe5ed48fc19dbea5d92491995e09ad762f2 refs/tags/v1.0.4 33ed691e1c4363b4b5cf7f102fab3ca27f5ba5ab refs/tags/v1.0.5 # ローカルには残ってるので別途消してね $ git tag v1.0.0 v1.0.1 v1.0.2 v1.0.4 v1.0.5 v1.0.6
https://github.com/tweeeety/git-tag-sample
おさらいというかあんちょこ的になったけど、それはそれで良し\(^o^)/
以前、【git】git commitを取り消すという記事を書きました。
git reset xxx
で普段のcommitの取り消しは問題なくできますが、
そのリポジトリで1発目のcommitの取り消しができません。
たとえばこんな時ありますよね。
「あ、間違ってauthor違う名前でcommitしちゃった。取り消して設定しなおそ」
みたいな。
そんな時のメモ
他の取り消しもぱっと見たい自分用にまとめたので参考までに。
git reset xxx
でcommit取り消しできない例git update-ref -d HEAD
でcommit取り消しできる例git update-ref -d HEAD
でcommit取り消したがgithub上は違う方法で変えなきゃな例
git reset xxx
でcommit取り消しできない例リポジトリを作成し、1発目にcommitしたものを取り消します。
# log確認。当然1つしかない $ git log commit 5646f5ca182c74329094f89c888d80f6b3de92fa Author: hogehoge <hogehoge> Date: Fri Apr 14 22:32:41 2017 +0900 first commit # reset --soft HEAD^で1つ前を取り消そうと思ったけどできない $ git reset --soft HEAD^ fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'
git update-ref -d HEAD
でcommit取り消しできる例章題に書いてますが、git update-ref -d HEAD
でできます。
# log確認。当然1つしかない $ git log commit 5646f5ca182c74329094f89c888d80f6b3de92fa Author: hogehoge <hogehoge> Date: Fri Apr 14 22:32:41 2017 +0900 first commit # $ git update-ref -d HEAD # 無事リセットされてる $ git log git log fatal: bad default revision 'HEAD'
git update-ref
についてはあまり調べてませんが、参照を更新するコマンドらしいです。
git update-ref -d HEAD
でcommit取り消したがgithub上は違う方法で変えなきゃな例2の項目
で一見落着な感じでしたが、
これはlocalで行った操作が git add / git commit
のみの場合です。
git push
してgithub上にpushしてしまった場合は、以下の方法で変える必要があります。
※ ここは以前書いたのではしょりました
慣れてるつもりでもあんまりやらない操作だと
わからない事はまだまだ多いですね\(^o^)/
かなり初歩的ですがpanic: assignment to entry in nil map
で小一時間悩んだので自分戒めメモ。
わかってるつもりが、mapの宣言と初期化を混同していましたというお恥ずかしいアレです...
panic: assignment to entry in nil map
が起こった例みたいな時にpanic: assignment to entry in nil map
がでてぱっと原因がわからなくて悩みました。
あとで単純かしたpanicも載せますが、よく考えれば当たり前とはいえロジック中だと最初ほんとにわからなかった...
package main import "log" func main() { // 宣言 var m map[string]string // 条件に応じて取得 // trueの時は問題無し // falseだと.... if condition := false; condition { m = getMap() } // mapにdefaultでkey:valueを追加 // -> ここで `panic: assignment to entry in nil map` addMapValue(&m) // 出力 log.Printf("m: %+v", m) } // mapを取得する func getMap() map[string]string { return map[string]string{"hoge": "fuga"} } // mapに追加する func addMapValue(m *map[string]string) { // 何か処理をして // からの追加 key := "piyo" value := "magu" (*m)[key] = value }
condition := true
の場合$ go run sample.go 2017/04/11 00:38:48 m: map[hoge:fuga piyo:magu]
condition := false
の場合$ go run sample.go panic: assignment to entry in nil map goroutine 1 [running]: panic(0xbab40, 0x8201ce290) /usr/local/Cellar/go/1.6.2/libexec/src/runtime/panic.go:481 +0x3e6 main.main() /Users/hoge/sample/sample.go:26 +0x162 exit status 2
参考サイト Go言語:Map
要は宣言だけのmap(やsliceなどのポインタ系)はゼロ値がnilのためという事ですね。
panic: assignment to entry in nil map
の単純な例かなり単純化して書くとわかりやすいです。
func main() { // 宣言 var m map[string]string // key:valueをsetのつもり // -> この時点で `panic: assignment to entry in nil map` m["hoge"] = "fuga" // 出力 log.Printf("m: %+v", m) }
最初から素直にこうしろって感じですね。。。
func main() { // 初期化 m := map[string]string{"hoge": "fuga"} // 出力 log.Printf("m: %+v", m) }
goさわりはじめたとはいえだいぶ慣れたよな〜と思ってたころでしたが、
まだまだやん...と思いました、というメモ\(^o^)/
vimには:set number
や:set autoincrement
などいろいろな設定があり、
また、.vimrc
に設定する事もあれば開いてから設定する事もあります。
設定の仕方はさておき今開いてるvimでの設定はなによ?というのを知りたいときのメモです。 初歩的すぎますがたまに忘れて調べるので…
- 全部確認する
- 設定のon/offを確認する
- 個別の設定を確認する
- 設定をhelpで確認する
- どんな設定があるか日本語で確認する
- 設定の説明が書いてある日本語のサイトを開く
全部確認は簡単です。vim開いてる中のコマンドモードで:set
と打つだけです。
打つとこんな感じで今設定されている内容がでてきます
:set --- Options --- ambiwidth=double background=dark cursorline hidden ignorecase list number scroll=32 smartcase ttyfast window=67 nowrapscan autoindent backspace=eol helplang=en hlsearch laststatus=2 modified paste shiftwidth=2 tabstop=2 ttymouse=xterm nowrap directory=~/.vim/tmp fileencoding=utf-8 fileencodings=ucs-bom,utf-8,default,latin1 filetype=htmlcheetah listchars=tab:>-,trail:-,nbsp:%,extends:>,precedes:< runtimepath=~/.vim,~/.vim/bundle/Vundle.vim,~/.vim/bundle/nerdtree,~/.vim/bundle/vim-go,~/.vim/bundle/gocode/vim/,/usr/local/share/vim/vimfiles,/usr/local/share/vim/vim74,/usr/local/share/vim/vimfiles/after,~/.vim/after,~/.vim/bundle/Vundle.vim/,~/.vim/bundle/Vun dle.vim/after,~/.vim/bundle/nerdtree/after,~/.vim/bundle/vim-go/after,~/.vim/bundle/gocode/vim//after statusline=%F%r%h%= syntax=htmlcheetah
hoge=fuga
の設定については内容がわかりやすいですね。
ignorecase
とか単体のものは表示されている=その項目がon
です。
ためしにignorecase
をOFFにして確認してみます。
設定をOFFにするには設定名の前にno
をつけます。
# 今の状態を確認 :set --- Options --- ambiwidth=double background=dark cursorline hidden ignorecase list number scroll=32 smartcase ttyfast window=67 nowrapscan autoindent backspace=eol helplang=en hlsearch laststatus=2 modified paste shiftwidth=2 tabstop=2 ttymouse=xterm nowrap directory=~/.vim/tmp fileencoding=utf-8 fileencodings=ucs-bom,utf-8,default,latin1 filetype=htmlcheetah listchars=tab:>-,trail:-,nbsp:%,extends:>,precedes:< runtimepath=~/.vim,~/.vim/bundle/Vundle.vim,~/.vim/bundle/nerdtree,~/.vim/bundle/vim-go,~/.vim/bundle/gocode/vim/,/usr/local/share/vim/vimfiles,/usr/local/share/vim/vim74,/usr/local/share/vim/vimfiles/after,~/.vim/after,~/.vim/bundle/Vundle.vim/,~/.vim/bundle/Vun dle.vim/after,~/.vim/bundle/nerdtree/after,~/.vim/bundle/vim-go/after,~/.vim/bundle/gocode/vim//after statusline=%F%r%h%= syntax=htmlcheetah # 消してみる :set noignorecase # 再度確認してみる # ignorecaseが消えている :set --- Options --- ambiwidth=double background=dark cursorline hidden laststatus=2 modified paste shiftwidth=2 tabstop=2 ttymouse=xterm nowrap autoindent backspace=eol helplang=en hlsearch list number scroll=32 smartcase ttyfast window=67 nowrapscan directory=~/.vim/tmp fileencoding=utf-8 fileencodings=ucs-bom,utf-8,default,latin1 filetype=htmlcheetah listchars=tab:>-,trail:-,nbsp:%,extends:>,precedes:< runtimepath=~/.vim,~/.vim/bundle/Vundle.vim,~/.vim/bundle/nerdtree,~/.vim/bundle/vim-go,~/.vim/bundle/gocode/vim/,/usr/local/share/vim/vimfiles,/usr/local/share/vim/vim74,/usr/local/share/vim/vimfiles/after,~/.vim/after,~/.vim/bundle/Vundle.vim/,~/.vim/bundle/Vun dle.vim/after,~/.vim/bundle/nerdtree/after,~/.vim/bundle/vim-go/after,~/.vim/bundle/gocode/vim//after statusline=%F%r%h%= syntax=htmlcheetah
:set
の確認はすべてが表示されましたが、設定名はわかっていてそれだけ知りたいんだよという事もありますよね。
その時は :set 設定名?
と打ちます
# ↑でignorecaseを消した状態で確認してみる # -> noignorecaseと表示される :set ignorecase? noignorecase # 再度設定してみる :set ignorecase # 再度確認してみる :set ignorecase? ignorecase
設定をhelpで見るには :help
に続けて設定項目名を打ちます
:help ignorecase
自分の設定だとこんな感じで画面上部に表示されているのがhelpです
よくまとまっているサイトがあるのでまんま見てください、というだけですw
vimでは:!
に続けて外部コマンドを打つ事で、vimを開きながらコマンドが打てます。
↑で紹介したサイトを使わせて頂きますが、
openコマンドを使ってvimから直接↑のサイトの該当の説明へ飛ぶ事も可能です。
:! open http://www.kawaz.jp/pukiwiki/?vim\%2Foptions\#ignorecase
このまま打つことはあり得ないと思うので
直接ブラウザで開くなりscript化しちゃったほうが良いですねw
初歩過ぎ的な内容でしたが、改めて書くと頭にもより入っていいですね\(^o^)/