XCode+Githubでソースコード管理 (ユーザー編)
先ほどに続き、XCodeとGithubでのソースコード管理です。
ただし今回は、既にGithubにあるプロジェクトを編集したいユーザー用手順^ ^
おおまかな流れは、こんな感じ。
- Githubでfork
- forkしたリポジトリをローカルにclone
- cloneしたリポジトリでbranchを作成
- branchへの編集をローカル・リポジトリにcommit
- pull request
1. Githubでfork
これは何度も出てきてるので、お手の物ですね。
ブラウザ上で数クリックで完了します。
このアドレス使うので、メモ。
2. forkしたリポジトリをローカルにclone
これも簡単です^ ^
まずXCodeを起動。
さっきメモしたアドレスを入れます。
認証でしばらく"Next"ボタンがグレーアウトされたままですが、気長に。
Nameは何も入れずにNext。
保存場所を指定。
clone中。
clone完了!
ローカルにcloneされていることを確認。
3. cloneしたリポジトリでbranchを作成
たくさんプロジェクトが入っているので、適当に1つ選んで開きます。
オーガナイザを開きます。
ここでもcloneされていることを再確認。
昨日のブログでも書いた通り、masterはrebase用なので編集しません。
まずは作業用のブランチを作成します。
通常は変更ごとにブランチ(トピック・ブランチ)を作ります。
今回はとりあえずなので、testSpikeとします。
本当は変更が何かわかりやすい名前にしましょう^ ^;
"Automatically switch to this branch"にチェックをつけると、
ブランチ作成後にそのブランチにチェックアウトしてくれます。
ちゃんとブランチ作成されました。
ターミナルでも確認出来ます。
takuto-2:EasyGallery takuto_1981$ pwd
/Users/takuto_1981/Documents/iPhone App Dev/iOS-Sample-Code/EasyGallery
takuto-2:EasyGallery takuto_1981$ git branch
master
* testSpike
takuto-2:EasyGallery takuto_1981$ git remote
origin
ところでXCode上でブランチを切り替える方法がわかりません> <;
仕方ないのでターミナルで、以下のように切り替えてます。
もし知ってる人いたら教えて下さい^ ^;
takuto-2:EasyGallery takuto_1981$ git checkout master
Switched to branch 'master'
takuto-2:EasyGallery takuto_1981$ git branch
* master
testSpike
4. branchへの編集をローカル・リポジトリにcommit
変更テストとして、適当にコメントを追加します。
ローカル・リポジトリにcommitします。
もう1個、ローカル・リポジトリにcommitしてみます。
5. pull request
まず、testSpikeをリモート・リポジトリにpushします。
先ほど登録したリモート・リポジトリが自動的に選ばれます。
Githubで、リモート・リポジトリへのpush成功を確認。
さて、最初にローカル・リポジトリへの編集中にfork元のリポジトリが更新されているかもしれません。
ということで、最新のリポジトリとのマージを行います。
まず、fork元のリポジトリのアドレス確認。
当然ですが、自分の管理しているリポジトリではないのでRead Onlyです。
XCodeでも出来るかもしれませんが、こっからは面倒なのでターミナル操作です。
まずはリモート・リポジトリの登録です。
fork元のリポジトリにupstreamという名前をつけます。
takuto-2:EasyGallery takuto_1981$ git remote add upstream git://github.com/xcatsan/iOS-Sample-Code.git
takuto-2:EasyGallery takuto_1981$ git remote
origin
upstream
次にupstreamのmasterから最新のものをpullします。
takuto-2:EasyGallery takuto_1981$ git checkout master
Switched to branch 'master'
takuto-2:EasyGallery takuto_1981$ git branch
* master
testSpike
takuto-2:EasyGallery takuto_1981$ git pull upstream master
From git://github.com/xcatsan/iOS-Sample-Code
* branch master -> FETCH_HEAD
Already up-to-date.
takuto-2:EasyGallery takuto_1981$ git branch
* master
testSpike
takuto-2:EasyGallery takuto_1981$ git push origin master
Everything up-to-date
今回はfork元が更新されていなかったので"Already up-to-date"でした。
説明のために、ここで更新があったという前提で話を進めます。
git rebaseで、fork元への更新とローカルでの更新をマージします。
# とは言え、今回は派生もとの変更がないので、以下のように何も行われません。
takuto-2:EasyGallery takuto_1981$ git checkout testSpike
Switched to branch 'testSpike'
takuto-2:EasyGallery takuto_1981$ git rebase testSpike master
First, rewinding head to replay your work on top of it...
Fast-forwarded master to testSpike.
マージした(つもりの)testSpikeをpushします。
takuto-2:EasyGallery takuto_1981$ git push -f origin testSpike
Everything up-to-date
とりあえずこれでpull requestの準備完了です。
ただし、あまりに大量にcommitが含まれる場合は、マージすると履歴が煩雑になってしまいます。
このような場合は、commitを1つにまとめましょう^ ^
commitを1つにまとめる方法については、先日書いた以下を参照下さい。
ソースコード管理をする(ユーザー編)
http://d.hatena.ne.jp/takuto1981/20111231/1325297172
さて、あとはpull requestすれば完了です!
出来た!