gitでリモートブランチをローカルに取ってくる

普通にgit cloneするとmasterしか取り込まれません

まず、-a をつけてブランチ一覧を表示する
$ git branch -a

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/production

git checkout -bのあとにローカルのブランチ名、リモートのブランチ名をつけてcheckout
$ git checkout -b production origin/production

pull して取り込み
$ git pull

statusで確認
$ git status

On branch production
Your branch is up-to-date with 'origin/production'.
nothing to commit, working directory clean

branchでも確認
$ git branch -a

  master
* production
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/production

できました

gitで差分をファイルで抽出する

git管理してないサーバーへファイルを適用するときに使えます

[code lang=bash]
$ git archive –format=zip –prefix=web/ HEAD `git diff –name-only HEAD HEAD^` -o update.zip
[/code]

commit1つ分をupdate.zipファイルに圧縮、解凍するとwebディレクトリができます
git diff –name-only で差のあるファイルが表示できるようです

[code lang=bash]
$ git archive –format=zip –prefix=web/ HEAD `git diff –name-only HEAD HEAD^^` -o update.zip
[/code]

とすればcommit2つ分です
これでgit管理してないサーバーにコピーできます

UbuntuにGitを入れてみた

Ubuntu 14.04にGitを入れてみました
普通にapt-getでいれるとバージョンが古かったので新しいのをいれました
いまだと、2.1.3がインストールされました

インストール

$ sudo apt-get install -y python-software-properties
$ sudo add-apt-repository -y ppa:git-core/ppa
$ sudo apt-get update
$ sudo apt-get install -y git

設定

$ git config –global user.name “your name”
$ git config –global user.email your.email@example.com
$ git config –global color.ui auto
$ git config –global core.quotepath off
$ git config –global push.default simple

エイリアスは好みで
$ git config –global alias.ch checkout
$ git config –global alias.co commit
$ git config –global alias.st status

以上です

gitで1ファイル(1部分)ずつmergeしたい

gitで別ブランチの1ファイルだけマージしたかったので調べました

masterブランチにいるとして、
devブランチのadmin/require.phpをmergeしてみます
(とあるシステムのマージ)

差分のパッチを作ります
$ git format-patch –histogram ..remotedev — admin/require.php
0001-fix-ob_end_clean-error.patch
とpatchファイルができました

–histgram で見やすく、 ..remotedev でremotedevとの差を
— 以降にファイル名を書きます(複数ファイル可)

0001-fix-ob_end_clean-error.patchのいらない差を消せばいるところだけ取り込めます

取り込みます
$ git am -3 0001-fix-ob_end_clean-error.patch
でmergeされました

-3 を作るとうまいこと取り込んでくれるらしいです

ログを見てみると
$ git log -1
commit a068c042edab0f42dcd72319d08bde106a027ddf
Author: sample sample@sample.co.jp
Date: Tue Nov 4 15:29:50 2014 +0900

fix ob_end_clean error

とうまく行きました

commit単位でmergeできるようにcommitを作りましょう