woshidan's blog

そんなことよりコードにダイブ。

Gitについて(資料とまとめ)

昨日あれから、一晩勉強してみて、

わかりやすかった資料と自分が行ったらいい作業メモ。

 

わかりやすかった資料について

ここをもとに探してる(ありがとうございます)

git - rails開発に加わる前に学んで欲しいこと - Qiita

まずgitって一言で言うとなんなんだ

イラストでわかる!git入門の入門 : アシアルブログ

実際のところ、作業の様子やコマンドはどう打ったらいいんだ

サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ

git-flowというのはgitの利用のお作法のことらしい。GitHubで実行するときの手順など。

GitHub Flow

https://gist.github.com/Gab-km/3705015

gitコマンドまとめや、怖くないよ!GitHubのスライドが好き

http://www.find-job.net/startup/7-git-slides

 

わかったこと(大体)

  • gitはファイルの変更履歴を.gitに保存していくもの。git initをすると空の.gitができる。gitで変更履歴を保存しているディレクトリの範囲=リポジトリ
  • ローカルリポジトリ=自分の作業しているパソコンの中のリポジトリ。ワークツリー=いま自分のパソコンで作業を行っているディレクトリ。ワークツリーで作った変更をcommitでローカルリポジトリに反映させる。
  • 基本的に、addでステージ(インデックス)にあげて、commitでローカルリポジトリに反映させてpushでリモートリポジトリにも反映させる
  • リモートリポジトリとローカルリポジトリで変更履歴のやり取りをする
  • リモートリポジトリとローカルリポジトリを作ってから初めてpushするときは、initから始める。
  • 作業するパソコンをかえるなどで、ローカルリポジトリを新しく作って、そこにリモートリポジトリの作業内容(元々のファイル含めて)を移したいときはcloneを使う。
  • あるコミットAから、ローカルリポジトリに自分の作業した変更履歴があり、それをリモートリポジトリにpushして反映させたいとき。コミットAに他人がさらにコミットしたコミットBがあるときは、コミットBをpullして、自分のコミットとマージしてからpushする。同じブランチ内で一つのコミットに対する次のコミットは一つでないと変更履歴がたどれなくなる。
  • pullしたとき、自分が作業したファイルに他人の作業もある場合「衝突」してpushできなくなる。同じコミットからの変更履歴が複数ある場合、git側ではどちらの変更履歴を優先したらいいかわからないため、git側ではファイルに両方の変更の結果を載せる。それをみつつ、最終的なファイルの内容を書いて(手動でマージして)衝突を解決してからpushする。
  • リモートリポジトリのアドレスの追加はgit remote add <name> <url>で行う。<name>は登録名。<url>は<name>に対応させるリモートリポジトリのアドレス。追加せずにpushのときに毎回リポジトリのアドレスを入力しても可能だが、面倒くさいので追加しておく。追加すると、その後コンソールでは<name>と入力することで、<name>に対応するurlを入力した、と扱ってもらえる。よくみたパターンが、git remote add master masterブランチのアドレスであり、ぼんやり写経していると大体masterブランチへの登録の仕方以外いまいちよくわからなくなって終わる(私が)。
  • mergeは自分がいま作業しているブランチにコマンドで指定したブランチを取り込む形で行われる。
  • 自分がした最新のコミット(つぎコミットしたときに起点となるコミット)はHEADという。
  • gitの設定はconfigコマンドでも、.gitconfigファイルの編集でも変更できる
  • git-flowは何か特定の作業を行うときはmasterブランチからブランチをのばしたり、mergeするためには他人のレビューをもらう必要がある、などのgitで作業をするためのルール

あとは必要になり次第、上の資料で確認。さて、お昼食べにいこ……。