1人でも使うgit・github・bitbucket・mercurial
Category: tool Date: 07 Jun 2015なるべく具体的な例として/実際使いながら随時調べたことメモ
Git個人使いでの設定
OSに依存しないように設定を行っていく/設定の確認は
git config --global --list
使用するエディタの設定/Windowsがほとんどなので自前のGvimを設定する場合の例, パスはドライブレターをキチンと入れる他シングルクォートを含めて設定しないと駄目
git config --global core.editor "'t:/path/to/gvim'"
GitHubでの新しいツール/サービスのリポジトリ化
大抵ローカルなディレクトリにて既にある程度作成を行ってしまっている場合が多い, この場合はWebから手動で Create new repository
- 出来たリポジトリのページに行ってURLをコピー
- 手元側で
git clone URL
- 作っていたファイルを適当に
git add
/これはstaging area
に揚げられてTrack
な状態にする行為 - READMEも書いておく
ここで一端最初のコミットを実施git commit
更にGitHubにpush
git push -u origin master
何が起こっているか/前提として,Gitは分散リポジトリであるので どのリポジトリのどのブランチを触っているのかを意識する必要が有ること
-
-u
オプション:ローカルのmasterブランチがoriginリモートリポジトリのmasterブランチと関連付けられ,以後のpushにおいて設定する事を意味する - ここでの
upstream
は,ローカルのブランチがあるリモートのブランチに関連付けられている時に 手元から見て関連づけられたリモートブランチを指す言葉/関連付けを行った手元の ローカルブランチをトラッキングブランチと呼ぶ,手元は大きな流れを追いかけている人/ 先に見える大きな流れをupstreamと呼んでいるイメージ? master
はGitが最初にコミットを行った際に自動で作成するブランチの名前/ ホントに名前で有り,機能的意味があるものでは無く慣例的なもの,この名称の使われどころは リモートであろうがローカルである事とは関係無い-
origin
はレポジトリの所在(URL)を示す別称となる,本名の確認は$ git config --list remote.origin.url=https://github.com/sousu/aaa.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
ここまででGitHub側にも反映が行われた
Github 更新衝突の解決
同時期に何も考えずに更新をしているといつの間にかあのPCとこのPCでは内容が一致しなくなっている, ってパターンが良く出てくる/具体的には別のPCで更新したcommit内容を取り込む前に, 自前のcommitを更新してしまったみたいなパターン
- statusで確認すると
Your branch and 'origin/master' have diverged
が出てくるような状況 - 同メッセージにて,ローカル側とリモート側がどれだけの数の分かれているcommitを持っているか表示
fetch
コマンドを使っていく
- 自動的にローカル側の作業ツリーに更新状態を取り込みマージする
pull
とは違い - ローカルリポジトリに取り込みを行うが,作業ツリーにまで反映を行わず取り込みは操作者の 責任で行われる
fetch
で取り込んだリポジトリは,現在Fetchされているリモートブランチの最新リビジョンを示すFTECH_HEAD
キーワードとして指定できる/これを指定してlogやdiffの確認,mergeを行う作業となる
更にFetch内容のマージを行うと思った際に,手元側の軽微な変更状態があって出来ない場合は
stash
を使っていく
stash save
で現在の(大したことない)編集内容を保存pull
やfetch
による取り込み作業- 分岐してしまっていた場合(大抵Fetchで解決)は,stachで戻す前に取り込みをMergeしておく
- 手元側も綺麗な形となったので
stash pop
で変更を戻して作業を続ける
参考
Mercurial
単にダッシュボードが見やすいだけが理由だが,dotfileの管理についてはMercurialを 利用しているので使い勝手をメモ
push時の衝突発生時の処理:
- dotfileを更新していて良くあるのが他方で更新しているのを 気づかないまま手元のPCで更新→コミットから反映を行おうとするパターン
- まずは
hg heads
で他方の頭の状態を確認/changesetの番号を確認 - マージする
hg merge <番号>
- hgの文字コードの扱いに問題が有るのかWindowsを挟んでやると失敗する事が多いので
適切に
hg merge -P
プレビューオプションと共に作業するのが良い
参考