20130706 git
TRANSCRIPT
![Page 1: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/1.jpg)
Git 入門 Part 2
遠隔編
か (@ka_, kaosf)
![Page 2: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/2.jpg)
.gitignore について● まともにプロジェクト管理するなら必要
● .gitignore に指定したものは無視される
– ファイルでもディレクトリでも
– メタキャラクタが指定可能
– 「生成物」は原則無視する
● *.o ファイルなど
● 何が生成物なのかをきちんと知ろう
![Page 3: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/3.jpg)
.gitignore の書式
● 一行に一指定
● メタキャラクタの仕様はシェルスクリプト
のそれと同じ
● .gitignore のあるディレクトリ以下に適用
● 詳しくは .gitignore でググろう
![Page 4: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/4.jpg)
.gitignore の例● とある Andoid アプリのリポジトリ :
https://github.com/kaosf/android-app-template/blob/v1.1.0/.gitignore
● *.swp は Vim が自動生成するもの
● *~ は Emacs が自動生成するもの
● Thumbs.db, .DS_Store は断固無視すべし
● .classpath, .settings は Eclipse が
● bin, gen はアプリ生成の際に作られる
![Page 5: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/5.jpg)
リポジトリの作法● ソースコードと目的物の「作り方」のみ管理
● 「作り方」は README に正確に書こう
– 長くなるなら別ファイルに その辺は臨機応変
● パスワードや秘密鍵に相当するものが
紛れ込まないよう注意
– 環境変数を利用すると楽に隠せる
– 環境ごとに逐一ファイルを用意するのもアリ
![Page 6: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/6.jpg)
何かあっても何とかなります
● 秘密のファイル入りでコミットが進んだ
– 過去のコミット全てから特定のファイルだけ
削除し尽くすことも出来る
● .gitignore に追加したけど既に管理下にある
– 普通に削除してその削除をコミットする
– git rm <some file>– git rm -rf <some directory>
![Page 7: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/7.jpg)
聞くは恥ですらない
● 聞かぬは一生の不便
● でも案外調べれば何とかなる
● @ka_ に聞いてくれれば
● 濱野純さんの本「入門 Git 」オススメ
– 「基本」ではなく「基礎」を固めるために
![Page 8: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/8.jpg)
いっぱい練習
● リポジトリを沢山作る
● コミットを沢山する
● 色んな操作をやってみる
● 以降のリモートリポジトリを扱う操作でも
沢山手を動かしてみる
● Bitbucket なら private repository 作り放題
![Page 9: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/9.jpg)
リモートリポジトリを扱う● git remote add <nickname> <URL>
– 大抵 <nickname> は origin
● git push origin <local-br>:<remote-br>
– ブランチ名が同じなら :<remote-br> 省略可
● git pull origin <remote-br>● git fetch origin <remote-br>
– FETCH_HEAD という特殊な参照が出来る
![Page 10: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/10.jpg)
fetch についてもう少し詳しく
● FETCH_HEAD が取得出来たら
– git reset FETCH_HEAD –hard
– これでリモートから取って来たことになる
● 一連の流れ ( 例 )
– git checkout br1
– git fetch origin br1
– git reset FETCH_HEAD --hard
![Page 11: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/11.jpg)
もうちょっと柔軟に扱う● git push origin br1 -f
– 歴史が失われても構わない
● git push origin :br2
– origin にある br2 を消し去りたい
– ローカルの「無」をリモートに押し付ける感覚
![Page 12: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/12.jpg)
Win, Mac の人も同じ概念で
● ダイアログで聞かれていることは同じ
● 何を,何処に,どうやって,を覚える
– <local-br> を origin の <remote-br> に -f で…等
![Page 13: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/13.jpg)
Pullの注意点
● Pullは Pushの反対ではない
– Pullは Fetchと Mergeの複合技
![Page 14: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/14.jpg)
Git を多人数で使う
● リモートリポジトリの公開設定
– Bitbucketはデフォルトでは privateになる
– 無料枠では公開人数に制限があるので
publicにする
● Pull Request実践
![Page 15: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/15.jpg)
まずは Fork
● Fork (フォーク )?
– スプーンとナイフとフォークのフォーク
● あの形のように分岐して派生していくイメージ
– リモート上での Clone動作のこと
– GitHubでも Bitbucketでも出来る
– リポジトリの複製が自分の所有物として出来る
● 自分で好きなように弄れる
● Fork元に影響は一切無い (だって分散型だもの )
![Page 16: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/16.jpg)
開発者二名の定義
● 大元のリポジトリの所有者
(フォークされた側 ) を Aとする
● リポジトリを複製した側
(フォークした側 ) を Bとする
![Page 17: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/17.jpg)
フォークしてクローンする
● Bが Aのリポジトリをフォークする
● git clone <Bのリポジトリの URL>
![Page 18: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/18.jpg)
クローン出来たらブランチ作成
● トピックブランチ・フィーチャーブランチ
と言うこともある
– git checkout -b topic-1
● ブランチ作成したらコミットを重ねる
● それを originにプッシュ
– 自分の所なので書き込みが可能
– git push origin topic-1
![Page 19: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/19.jpg)
プルリクエストを作成
● B の topic-1 を
A の master に
マージして欲しい
![Page 20: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/20.jpg)
プルリクエストを受理● 開発者 A 側
– git pull <B のリポジトリ > topic-1
– もしくは
git fetch <B のリポジトリ > topic-1
git merge FETCH_HEAD
● それを自分のリポジトリにプッシュ
● これで受理したことになる
● Web 上でマージを行うことも出来る
![Page 21: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/21.jpg)
実際にやってみよう
![Page 22: 20130706 git](https://reader030.vdocuments.pub/reader030/viewer/2022032420/55a4725e1a28ab9c568b473a/html5/thumbnails/22.jpg)
プルリクエストを出し合う
● 各人 20130706-git-pr-<username>
というリポジトリを作る
● 自分以外の人のリポジトリをフォーク
● プルリクエストの手順を行う