Git/GitHub
●リモートリポジトリでのトピックブランチ削除が、
ローカルリポジトリには反映されないがなぜか。
・仮説
リモートレポジトリでmerge後、トピックブランチを削除。
その後、ローカルでpull作業をした直後。
ローカルリポジトリのBranchタブでは、
リモートで削除したトピックブランチを選択可能。
ただし、DELETEが選べる。
pull = fech + merge
fech = リモートリポジトリの最新の状態を取得
merge = トッピクブランチをmasterブランチに統合
ローカルレポジトリでのpull作業は、
リモートレポジトリの状態をコピーしているというより、
ローカルでもmerge作業を行って
リモートの状態に「合わせにいってる」と予測。
その操作をもって同期してる。(寄せに行ってる)
つまり、やってる作業はmergeなので、ブランチの削除は含まれない。
(pullにdeleteは含まれていない)
だからローカルのトピックブランチは残ってるし、別途deleteが必要。
・質問で深まった内容
なぜmerge前にFetchするのか?
mergeするのは明示なのだから、なぜいちいち確認が必要なのか?
そもそもpullが必要か、Fetchで確認している。
また、リモートに同期するにしても「どん状態」に同期するのか確認が必要。
なのでFetchからのPullという流れになっている。
Fetchが再度行われるが、PullがFetch + mergeなのは仕様なので。
●.DS_Storeと.gitignore_global
アップロードしない設定なのは理解した。
だが、ぞれぞれ何者か。
・調べた結果
.gitignore_globalは、全レポジトリに適応する設定。
.gitignoreは、レポジトリ毎の設定。
つまり、MacOS固有で生成される.DS_storeファイルは
レポジトリ毎に出てくる。
毎度設定するのは面倒で、
どのアプリでもGitで管理する必要はないので
〜globalに、無視して設定をしている。
windowsでも固有ファイルがあったりする。
.gitignore_global、.gitignoreどちらに何を書くのか?
など、こちらの本がわかりやすかった。
何冊かパラパラ立ち読みしたが、
.gitignoreについて言及してても
.gitignore_globalまで触れている書籍が少なかった。
こちらはしっかり説明してくださっていた。
●Publish〜とPushのニュアンスの違い
・仮説
publish repositoryが、
リモートレポジトリ作成+push(ローカルの反映)だったように、
publish branchも、リモートのブランチ作成+pushが含まれていると推測。
また、commitした状態でpublish branchすると
push originのコマンドがなくなり、
リモートにデータは同期していた。
publish branchであり、push branchでないのは、
同期するそのもの(枝)がないので、作成からするというニュアンス。
nullになにもできないように、まず無から有にするのがpublish、
pushは、有になったものを更新していくニュアンスと解釈。
・質問で深まった内容
publish branch、push originと命令ごとに同期がベスト。
仮にcommitを戻したい!と思ったときに
pushしちゃってると手間がかかる。