MATLABのコードを MATLAB Compiler で実行可能にしてAmazonEC2上で動かす

画像処理は,重い.

しかもメモリを食う.

普段はメモリもCPUも要らんから,必要な時だけスパコン借りて処理したりできないものか.

・・・と,いうわけで,普段使っているMATLABの重い処理をEC2に投げられたら幸せになれる(かもしれない)と思ってやってみました.

コスパはまだよくわからないけど,金とちょっとの手間さえかければ時間単位で大量のメモリ・CPUを借りる選択肢があるってのはいいかもしれませんね.

たとえば論文の提出直前にデータが取れてないときとか.


1.AmazonWebServicesのアカウントを取ってWindowsを立ち上げる

http://www.slideshare.net/kentamagawa/3aws

http://www.slideshare.net/kentamagawa/ec2windows

非常にわかりやすい解説がありました.

2.MATLAB Compiler Runtimeをインストール

EC2のサーバーにはMATLABが入ってない(そりゃそうだ)ので,MATLAB Compilerが必要です.

これを使ってやると,MATLABのコードを実行形式のファイルにできます.

ただ,MATLABそのものはないにしても,MALTAB Compiler Runtime (MCR)ってのをインストールしてあげないとやっぱり動きません.

http://www.mathworks.co.jp/support/solutions/ja/data/1-C233QN/index.html?product=MJ&solution=1-C233QN

ソリューション:

特定のプラットフォームで使用するための MATLAB Compiler Runtime(MCR) を取得するには、その特定のプラットフォーム上にて、MATLAB Compiler をインストールしてください。インストール後、以下の場所より取得可能です。

※$MATLABROOT は、MATLAB インストールディレクトリを示します。

※<Arch> は、OSを示します。(例:Windows 32bit OS の場合-> win32)

  • Windows の場合(MCRInstaller.exe)

$MATLABROOT\toolbox\compiler\deploy\<Arch>

とのことなので,このMCRInstaller.exeをEC2のインスタンスになんかの方法で送り込んでインストールしましょう.

これで,今後同じ環境でMATLAB Compilerでコンパイルした実行ファイルが動かせるようになります.

3.適当なサンプルプログラムを作成して実行してみる

とりあえず,動作検証にこんなのを作りました.

(note120216_magic.m)

magic(5)

pause(3)

コンパイルするには,

mcc -mv note120216_magic.m

これを同様にEC2のインスタンスに送り込んで実行します.

今回は無料枠で使える,メモリもCPUも一番小さいやつで動かしたので動き始めるまで時間がかかりましたが,

しばらく経って5×5の魔方陣が表示されて,数秒後に勝手に終了すると思います.

つまり,これでMATLAB実行ファイルがAmazonEC2上で動かせたわけですね!

======================

ついでなので,ベンチマークをとってみた.

そのうち,ハイメモリインスタンスのクアドラプル エクストララージと,ハイ CPU オンデマンドインスタンスのエクストララージも試してみたいところですな.

  • =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

CrystalMark 2004R3 [0.9.126.451] (C) 2001-2008 hiyohiyo

Crystal Dew World http://crystalmark.info/

  • =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

——————————————————————————

CrystalMark Result

——————————————————————————

Display Mode : 1920 x 1080 16bit (None)

CrystalMark : 23861

[ ALU ] 5661

Fibonacci : 3779

Napierian : 196

Eratosthenes : 95

QuickSort : 1569

[ FPU ] 2965

MikoFPU : 949

RandMeanSS : 391

FFT : 129

Mandelbrot : 1474

[ MEM ] 3000

Read : 314.45 MB/s ( 314)

Write : 321.99 MB/s ( 321)

Read/Write : 206.77 MB/s ( 206)

Cache : 21379.06 MB/s ( 2137)

[ HDD ] 11328

Read : 89.62 MB/s ( 3584)

Write : 14.52 MB/s ( 580)

RandomRead512K : 96.37 MB/s ( 3854)

RandomWrite512K : 9.18 MB/s ( 367)

RandomRead 64K : 58.68 MB/s ( 2347)

RandomWrite 64K : 14.90 MB/s ( 596)

[ GDI ] 725

Text : 22

Square : 119

Circle : 213

BitBlt : 371

[ D2D ] 0

Sprite 10 : 0.00 FPS ( 0)

Sprite 100 : 0.00 FPS ( 0)

Sprite 500 : 0.00 FPS ( 0)

Sprite 1000 : 0.00 FPS ( 0)

Sprite 5000 : 0.00 FPS ( 0)

Sprite 10000 : 0.00 FPS ( 0)

[ OGL ] 182

Scene 1 Score : 181

Lines (x1000) : ( 12018)

Scene 1 CPUs : ( 4)

Scene 2 Score : 1

Polygons(x1000) : ( 15)

Scene 2 CPUs : ( 1)

——————————————————————————

System Information

——————————————————————————

OS : Windows NT6.1 Datacenter Edition (Full installation) Service Pack 1 [6.1 Build 7601]

Display Mode : 1920 x 1080 16bit

Memory : 615 MB

DirectX : 10.0

——————————————————————————

CPU

——————————————————————————

CPU Name : Intel

Vendor String : GenuineIntel

Name String : Intel(R) Xeon(R) CPU E5645 @ 2.40GHz

CPU Type : Original OEM processor

Number(Logical) : 1

Family : 6

Model : C

Stepping : 2

Feature : MMX SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 XD Intel 64

Clock : 2000.09 MHz

Data Rate : QDR

——————————————————————————

Device

——————————————————————————

ChipSet : Intel 440FX (Natoma)

North : Intel 82441FX

South : Intel 82371SB (PIIX3)

Video : Cirrus Logic GD 5446

IDE Controller :

——————————————————————————

HDD

——————————————————————————

Type Size Model ( Buffer Mode )

膨らみすぎて手が付けられないコードの管理方針を考えてみた

皆様,こんにちは.

もう今年の残りが一年の24分の1程度しかないことに先ほど気づいたところであります.

年末と言えば,大掃除.

私は片付けが苦手すぎて服とか本とか捨てられずに困っているのですが,パソコンの中も同じです.

3年近く同じ環境で引き継ぎもなくコードを書き溜めていたので,収拾がつかなくなってきました.

これはまずい.

いろいろ苦労しながら書いたコードも,どこにあるか探せなくなってしまっては宝の持ち腐れです.

というわけでこれからコードをまともに管理できるようにするために,

現状分析と指針を箇条書きでまとめてみました.

「もっといい方法があるのに」とか「こういう管理方法があるよ」とか,

「それはないわーww」でもいいので突っ込みお待ちしております.

======

何の為にコード管理をするのか?

  • 効率の良い開発のため
    • 新規の処理の追加
    • バグ取り
  • 効率の良い引き継ぎのため
    • 機能単位の把握
    • 必要なファイルだけ着目できる(不要な/非本質的なコードの除外/不可視化)
  • 効率の良いバックアップのため
    • 変更履歴の追跡
    • 漏れのないバックアップ

現状はどうしているのか?

  • スクリプトはnote(yymmdd)_(script_name).m
  • 関数はfnote(yymmdd)_(function_name).m
  • matlab/code ディレクトリにまとめて配置
  • 最近Gitを導入した

どのような問題があるのか?

  • 古いコードが多すぎて,どれが使えるのかよくわからない
  • Gitの管理単位が大きすぎて(Codeディレクトリすべて)変更を追いにくい
  • ファイル名は確実にユニークだが機能ベースでの検索に向いていない

解決方策

  1. プロジェクト単位でディレクトリを分ける
    • プロジェクトの中だけパスを通せばいいようにする
      • 逆に他のプロジェクトと相互依存しないようにする
      • 関係のないプロジェクトはパスから外す
      • 違うプロジェクトと同じ名前の関数があってもぶつからなくなる
      • 同じ機能の改良版なども比較的容易に作れるし扱える
    • 何をしているのかわかりやすい
      • ドキュメントもプロジェクト単位で作成すればよい
  2. Gitをもっと使いこなす
    • 卒論サーバーにでもリポジトリを作る
      • 本体が壊れても大丈夫
    • プロジェクト単位でGitのリポジトリを作成
      • 同名ファイルの重複が避けられる
  3. ファイル名のルールを変更する
    • 機能だけちゃんとあらわしている名前を付ける
      • ファイル名の一意性が必要ない
    • プリフィクスなどもつけない(関数に”f”など)
      • 基本的に関数ベースにする
  4. 開発方針の変更
    • 機能単位の分割(カプセル化)
      • 本文の長いコードは読みにくい
      • できるだけこまめに分割し,コメントだけでなく名前で機能を語らせる
      • 基本的に関数ベースにする,テスト以外はスクリプトを使わない

初めての結婚式披露宴のご招待に,右往左往しながら準備をした備忘録

お久しぶりです.

ずいぶん間が空いた上に技術のネタですらない個人的な話で恐縮です.

今回初めて結婚式の披露宴にご招待いただきました,

サークルで非常にかわいがっていただいた先輩方なのでうれしい限りですが,

今までは結婚式は呼ばれても2次会から,とりあえずスーツで行けばOK,という感じだったので

どんな格好で行けばいいのか何を持って行けばいいのかよくわかりませんでした.

そもそも招待状には会費とか載ってないんですよね(ご祝儀を持って行くから)

それでいろいろ調べていたので思い出しながらまとめてみることにします.

1.Google先生に「結婚式 披露宴 服装」について教えを請う

都合のいいことに,服装だけでなくマナーについて一通りまとめてくださっているサイトを見つけました.

結婚式のマナー/結婚式の招待状・ご祝儀・服装 http://www.happy2-marriage.com/

これを一通り読んでみたら,結構わかってないことが多いことがわかりました.

2.服装

まずスーツ屋に行って披露宴でつけられるようなネクタイを探しています,と聞いてみました.

灰色というかシルバーのネクタイをお勧めされて,ついでにポケットチーフも買いました.

白いネクタイというのはご親族の方とかが多いのですね.

3.ご祝儀

中身は新札なので銀行で両替をしました.

銀行の方に聞いたら,両替機に新札が入ってるんですね.

ご祝儀袋も用意したのですが,短冊が3枚入っていて,使い方に困りました.

Google先生に「ご祝儀袋 短冊」とか聞いても一枚だけ挟むとか白紙の短冊と合わせて二枚で挟むとか諸説あるようです.

祝儀袋の短冊の使い方 | OKWave http://okwave.jp/qa/q5488596.html

むー.

あと,筆ペンで自分の名前と住所と金額を書かないといけないのが意外としんどいですね.

普段パソコンばかりでボールペンすらろくに持たないもので...

あとは,ご祝儀袋を入れる「袱紗(ふくさ)」というのも買いました.

あとは当日遅刻なんかしないように頑張って起きるくらいでしょうか.

Git Immersion (Git漬け)を訳しながら使い方を覚えてみる.その6

久々にGitをいじってみています,

何やってたか忘れるなー(汗)

LAB 11 エイリアス(別名)

目標:gitコマンドのエイリアス(別名)とショートカットの設定法を学ぶ

git status, git add, git commit, あとgit checkout は略語があったら便利なコマンド.

ホームディレクトリにある.gitconfig というファイルの中に次の内容を書き加えよう.

[alias]

co = checkout

ci = commit

st = status

br = branch

hist = log –pretty=format:\”%h %ad | %s%d [%an]\” –graph –date=short

type = cat-file -t

dump = cat-file -p

これでcheckout,commit,statusはカバーできた.

あと前回のlogもカバーしよう.

これでgit checkout と打ちたくなったところでどこでもgit co と打てるようになる.

同様にgit statusの代わりにgit stを,git commitの代わりにgit ciを使える.

何より良いのはgit histを使うことで,長いlogコマンドを打たなくても良くなることだ.

MacBookAirのバッテリー容量を黙々と記録するスクリプトを作った

バッテリーがどういう減り方してるのかが気になるわけですよ.

重い処理させずにディスプレイの輝度も低めにしとけば結構持つのはわかったんだけど.

と,いうわけでバッテリーの状態を黙々とcsvファイルに記録するためのRubyスクリプトを書いた.

参考にしたのはこちら.

mac bookのバッテリー状態をはてなグラフに記録してみよう – mac 日記

http://d.hatena.ne.jp/yao3/20091207/1260204647

#!/usr/bin/ruby
class BatteryLog
def run
logging
end
def logging
info = get_status
_logging(Time.new,info)
end
def _logging(time, info)
begin
##### ログを保存するディレクトリをフルパスで.
Dir::chdir("/Users/tokyoster/Documents/ruby/BatteryLogs")
rescue
Dir::mkdir("/Users/tokyoster/Documents/ruby/BatteryLogs")
Dir::chDir
end
##### Capacity,Current,Cycle Count
log_str = time.strftime("%y/%m/%d %H:%M") + "," + info["Capacity"].to_s + "," + info["Current"].to_s + "," + info["Cycle Count"].to_s
log_file_name = "BatteryLog" + time.strftime("%y%m%d") + ".csv"
log_file = File.open(log_file_name,"a+")
log_file.puts(log_str)
log_file.close
end
def get_status
info = eval(`/usr/sbin/ioreg -w0 -n "AppleSmartBattery" | grep LegacyBatteryInfo`.gsub(/=/, '=>').gsub(/^.*\{/, '{'))
return info
end
end
BatteryLog.new.run

こいつをCronに登録するときには

crontab -e

* * * * * ruby /Users/tokyoster/Documents/ruby/battery_log.rb

てな感じですね.

これで一分ごとにバッテリー容量とバッテリー残量とサイクルカウント(何回充電サイクルが繰り返されたか)が記録されるようになりました.

あとはこれを黙々とグラフ化して表示してくれるガジェットみたいのがあったらいいですよねー,

MacBookAirを買ってとりあえず入れてみたソフトウェアのリストを晒してみる

メモがてら列挙してみる.

Chrome:まずはブラウザ

KasperskyAntiVirus:学校のライセンスで使えるので.

MacPorts:Terminalで使えるソフトウェアの管理

RVM,Ruby,Rails:Webアプリ開発環境の整備

DropBox:データ共有環境を作る

Xcode:Objective-Cとかやってみたい

TeXShop:TeXで論文を書く環境が欲しい(※設定中)

TexWorks:同じく(※設定中)

ComicViewer:画像用のビューアらしい.自炊始めたら使えそう

LateXiT:Keynoteで数式を扱うために

TotalTerminal:Terminalをホットキーで呼び出す

EverNote:Webとかで集めた資料を束ねておくのに便利.

Alfred:option+spaceで検索窓を出せるランチャー.

mi:テキストエディタ.

Echofon Lite:Twitterクライアント

Keynote:Macでプレゼンテーションと言えば.

Skype:禁断のアプリ

TeamViewer:リモートで他のパソコンを操作できる

Wifi Analyzer:Wifi通信状況のチェック

Eclipse:Javaとかの開発環境.

Keynote入れたからにはPagesとNumbersも入れるべきでしょうかね?

あと家計簿のソフトが欲しい.

MacBookAirを買ってWindowsServer2008R2とBootCampするまでの備忘録

初Macの割に冒険しすぎたような気がしないでもない.←

なんでWindows7でなくServer2008R2なのかというと,学生だったらMicrosoftのDreamSparkで無料で使えるからです.

(他にもVisualStudioとかがただで使えるので超おススメ)

ただ,まあだいたい同じだろうと思ってたら意外と勝手が違って,ハマりまくったのでメモします.

1.MacからBootCampでインストールする

Dreamsparkからダウンロードすると”.img”の形式になってるので,”.iso”に書き換える.

あとは指示通り.

2.Windowsのインストール

指示通りにやってく.

後々外付けストレージをつける予定だったので,パーティションはWindowsを少なめにしてみた.

デスクトップが表示されるまでとりあえず普通.

3.ドライバ関連のインストール

ここが第一関門.

ドライバをインストールしないうちに自分でシャットダウンor再起動してしまうと,

「あれ,MacってCtrl+Alt+Delなくね?」

「Mac版のcontrol+option+fn+deleteも効かない??」

となって詰みます.というか,詰みました.

MacのDel=WinのBSにキーバインドが当たってるみたいなので,fn+delete=Delが効かないんでしょうね,多分.

やっちゃった人は外付けのキーボードをつないで,BSの位置じゃないDelを使えばOKです.

と,いうわけでドライバのインストールをします.

BootCampでWindowsを入れたUSBメモリ内のWindowsSupportフォルダの中にSetup.exeがあるので起動・・・

できない?

サイドバイサイド構成が云々と言われて起動できませんでしたorz

仕方がないので手動でドライバを入れましょう.

なお,あとからまとめて入れられるっぽいので,

キーボード:WindowsSupport\Drivers\Apple\x64\AppleKeyboardInstaller64.exe

無線ネット(多分):WindowsSupport\Drivers\Broadcom\BroadcomNetworkAdapterWin7_64.exe

あたり入れとけばいいんじゃないでしょうか.

4.無線を有効化する

第二関門.

WindowsServerはその名の通りサーバーなので,余計なものが一切無効になってます.

「ドライバ入れたはずなのに有効にできねえ?!」と焦りました.

このページを参考にして有効にしました.

http://macnorikae.blogspot.com/2010/06/windows-server-2008-r2lan.html

5.WindowsUpdate

とりあえずごっそり更新しましょうか.

結構更新するもの多かったです.

6.ドライバ関連のインストール

もう一度WindowsSupport\Setup.exeを起動します.

多分動きます.

とりあえず使える感じになるんじゃないでしょうか.

Git Immersion (Git漬け)を訳しながら使い方を覚えてみる.その5

ぼちぼちと進めます.

LAB 9 変更であって,ファイルではない

http://gitimmersion.com/lab_09.html

目標:gitはファイルではなく変更について機能することを学ぶ

ほとんどのソースコントロールシステムはファイル単位で機能する.ソースコントロールにファイルを追加するとシステムはその時点からファイルの変更を追跡する.

Gitはファイル自体というよりファイルに加えられた変更に着目する.git add file というのはリポジトリにそのファイルを追加させる命令ではない,むしろ後々コミットされる前に現在のファイルの状態を記録させておくということだ.

このLabではこの違いについて掘り下げてみよう.

1.最初の変更:デフォルトの名前も許可する

Hello Worldプログラムを変更して引数がない場合の既定値をもたせる.

vi hello.rb

name = ARGB.first || “World”

puts “Hello, #{name}!”

2.変更を追加する

git add hello.rb

3.二回目の変更:コメントの追加

ここでコメントも追加する.

vi hello.rb

# Default is “World”

name = ARGV.first || “World”

puts “Hello, #{name}!”

4.現在の状態を確認する

git status

このように出力されるはず.

# On branch master

# Changes to be committed:

# (use “git reset HEAD <file>…” to unstage)

#

# modified: hello.rb

#

# Changed but not updated:

# (use “git add <file>…” to update what will be committed)

# (use “git checkout — <file>…” to discard changes in working directory)

#

# modified: hello.rb

#

この状態でhello.rbがどのように二回挙げられているかに注目してほしい.最初の変更(デフォルトの名前の設定)はステージングされていてコミットの準備ができている.二回目の変更(コメントの追加)はステージングされていない.このままコミットすれば,コメントはリポジトリに保存されないだろう.

やってみよう.

5.コミットする

ステージングされた変更(初期値設定)をコミットしてから,もう一度状態を見てみよう.

git commit -m ” Added a default value”

git status

$ git commit -m ” Added a default value”[master 03ea0e0] Added a default value

1 files changed, 2 insertions(+), 1 deletions(-)

$ git status

# On branch master

# Changed but not updated:

# (use “git add <file>…” to update what will be committed)

# (use “git checkout — <file>…” to discard changes in working directory)

#

# modified: hello.rb

#

no changes added to commit (use “git add” and/or “git commit -a”)

ここでstatusコマンドはhello.rbの変更は保存されていないが,ステージングエリアにはもうないことを示している.

6.二回目の変更を追加する

二回目の変更もステージングエリアに追加してからgit statusを実行してみよう.

git add .

git status

注:ここでファイルを追加するのにカレントディレクトリ(‘.’)を使った.これはカレントディレクトリ以下の変更された全てのファイルを追加できる便利なショートカットだ.しかし全部追加するにしても,コミットするつもりのないファイルを追加することのないように,addする前にstatusをチェックしたほうがいい.

“add .”といううまいやり方があるのも知ってほしいのだが,このチュートリアルでは今後も安全のためにファイルを明示してaddすることにする.

出力はこうなる.

# On branch master

# Changes to be committed:

# (use “git reset HEAD <file>…” to unstage)

#

# modified: hello.rb

#

7.二回目のコミット

git commit -m “Added a comment”

LAB 10 履歴

http://gitimmersion.com/lab_10.html

目標:プロジェクトの履歴の見方を学ぶ

これまでの変更履歴のリストを見るには,git log コマンドを用いればよい.

git log

すると,こう出力されているはず.

commit b2a48e09bc05afbacbd3b1f53fae63eb86e19dd0

Author: Yoshiteru Toki <~~~~~@gmail.com>

Date: Tue Aug 16 21:07:45 2011 +0900

Added a comment

commit 03ea0e092b1a63e7215afb4500d255c0dbf6cf3f

Author: Yoshiteru Toki <~~~~~@gmail.com>

Date: Mon Aug 15 17:08:18 2011 +0900

Added a default value

commit 8888ecf86f8eb5853ad1b22d751d7190fcb5d6c6

Author: Yoshiteru Toki <~~~~~@gmail.com>

Date: Mon Aug 15 16:19:01 2011 +0900

Using ARGV

commit 718f5be1d67298f201db8cca8211d0c8ee313444

Author: Yoshiteru Toki <~~~~~@gmail.com>

Date: Mon Aug 15 14:06:23 2011 +0900

First Commit

これはここまでリポジトリに追加した,全部で4つのコミットのリストだ.

1.一行での履歴

logコマンドで表示される履歴は実際の必要以上に多い.一行形式で表示してもいい.

git log –pretty=oneline

出力は,

b2a48e09bc05afbacbd3b1f53fae63eb86e19dd0 Added a comment

03ea0e092b1a63e7215afb4500d255c0dbf6cf3f Added a default value

8888ecf86f8eb5853ad1b22d751d7190fcb5d6c6 Using ARGV

718f5be1d67298f201db8cca8211d0c8ee313444 First Commit

2.表示するエントリを指定する

表示する履歴を選択するオプションはいくつもある.以下のオプションを試してみよう.

git log –pretty=oneline –max-count=2

git log –pretty=oneline –since=’5 minutes ago’

git log –pretty=oneline –until=’5 minutes ago’

git log –pretty=oneline –author=’Yoshiteru Toki’

git log –pretty=oneline –all

3.ちょっと複雑な指定

先週の変更部分を見直すためにはこうする.

自分の変更だけ見たかったら,”–auther=Toki”とか付け足せばいい.

git log –all –pretty=format:”%h %cd %s (%an)” –since=’7 days ago’

4.究極のログの形式

やがて,自分にとって一番やりやすいこんな形式を使うようになった.

git log –pretty=format:”%h %ad | %s%d [%an]” –graph –date=short

出力すると,見た目はこうなる.

* b2a48e0 2011-08-16 | Added a comment (HEAD, master) [Yoshiteru Toki]
* 03ea0e0 2011-08-15 |  Added a default value [Yoshiteru Toki]
* 8888ecf 2011-08-15 | Using ARGV [Yoshiteru Toki]
* 718f5be 2011-08-15 | First Commit [Yoshiteru Toki]

詳しく見てみよう.

・–pretty=”…” というのは出力形式の定義.

・%h というのはそのコミットのハッシュ値.

・%d はコミットの付属情報.(たとえばブランチの頭とかタグとか)

・%ad は変更された日付

・%s はコメント

・%an は変更者名

・–graph はコミットツリーをアスキーグラフレイアウトで表示することを示す.

・–date=short は日付形式を短くする

いろんな形式でログを見たいときがある.幸い,次のLabでgit aliasesについて学ぶことができる.

5.その他のツール

ログの履歴を見るとき,Macならgitx,ほかのプラットフォームでもgitkというのが便利だ.

Git Immersion (Git漬け)を訳しながら使い方を覚えてみる.その4

なかなか進められないけど地道にアップします。

LAB 7 ステージに乗せてコミットする

Gitにおいて分離されたステージに乗せる操作は,これまで自分でソースの管理をする必要があった状況から抜け出すための哲学にのっとっている.

自分の作業用ディレクトリに変更を加え続けることができ,またソース管理に関わりたいときには,gitによって細かいコミットの実際の作業記録における変更を残しておける.

たとえば,a.rb, b.rb, c.rbという3つのファイルを変更した時について考えよう.全ての変更をコミットしたいが,a.rb とb.rb は一つのコミットで,c.rb は最初の二つのファイルと論理的につながらないので別のコミットにすべきである.

こうすればよい.

git add a.rb

git add b.rb

git commit -m “Changes for a and b”

git add c.rb

git commit -m “UNrelated change to c”

ステージに上げる操作とコミットの操作を分けることで,コミットに加える変更を調整することができるようになる.

LAB 8 変更をコミットする

目標:リポジトリに変更をコミットする方法を学ぶ

1.変更をコミットする

OK.ステージングについてはもう十分だろう.ステージングした変更をリポジトリにコミットしてみよう.

以前最初のバージョンのhello.rbファイルをリポジトリにコミットするためにgit commitを使った時,-mフラグを含めてコマンドラインからコメントを追加した,そのcommitコマンドによってコミットに対話的にコメントを編集することができる.それじゃあやってみよう.

コマンドラインで-mフラグを省くと,gitはエディタを選択するように求めてくる.エディタは以下のリストから選ばれる.(優先度順)

・環境変数のGIT_EDITOR

・core.editorの設定

・環境変数のVISUAL

・環境変数のEDITOR

// 自分の環境では環境変数で設定するのがうまくいかなかったので

// git config –global core.editor “vi”

エディタの設定をしたらcommitで状態を見てみよう.

git commit

設定したエディタが出てくるので,最初の行にUsing ARGVと書き加える.

Using ARGV

# Please enter the commit message for your changes. Lines starting

# with ‘#’ will be ignored, and an empty message aborts the commit.

# On branch master

# Changes to be committed:

# (use “git reset HEAD <file>…” to unstage)

#

# modified: hello.rb

#

[master 8888ecf] Using ARGV

1 files changed, 1 insertions(+), 1 deletions(-)

2.状態チェックする

最後にもう一度状態をチェックしてみよう.

git status

すると,出力はこうなるはず.

# On branch master

nothing to commit (working directory clean)

作業用ディレクトリはクリーンで,続行できる状態だ.

Git Immersion (Git漬け)を訳しながら使い方を覚えてみる.その3

1日2項目じゃ遅いかな?と思いはじめた今日この頃です。

ついでに、英語力も足りない怪しい直訳がダサすぎて死にそうなんて言えない←

LAB 5 変更を加える(作業用ディレクトリ)

http://gitimmersion.com/lab_05.html

目標:作業用ディレクトリの状態の追跡の仕方を学ぶ

1.”Hello, world”プログラムを変更する

HelloWorlsdプログラムを変更してコマンドラインから引数を一つとれるようにする.

変更後のファイルは次のようになる.

vi hello.rb

puts “Hello, #{ARGB.first}!”

2.状態を調べる

作業用ディレクトリの状態を調べてみよう.

git status

出力はこうなる.

# On branch master

# Changed but not updated:

# (use “git add <file>…” to update what will be committed)

# (use “git checkout — <file>…” to discard changes in working directory)

#

# modified: hello.rb

#

no changes added to commit (use “git add” and/or “git commit -a”)

最初に注意しないといけないのはgitはhello.rbが変更されたことを検知していることだ.でもgitはこれらを通知されてはいない.

もう一つ注意すべきは,この状態メッセージは次に何をする必要があるのか示唆してくれる.

もしこれらの変更をリポジトリに加えたいなら,git add コマンドを使えばいい.

そうでなければgit checkout コマンドで変更を破棄することができる.

3.次の段階へ

変更をステージに乗せてみよう.

// stage -> コミット前の緩衝地帯のことらしい.

LAB 6 変更をステージングする

http://gitimmersion.com/lab_06.html

目標:最新のコミットの変更をステージングする方法を学ぶ

1.変更を加える

ではgitに変更を反映させて状態を見てみよう.

git add hello.rb

git status

# On branch master

# Changes to be committed:

# (use “git reset HEAD <file>…” to unstage)

#

# modified: hello.rb

#

hello.rbファイルの変更が反映された.

これはgitはその変更内容を知っているが,この変更はまだリポジトリに記録されてはいない.

次のコミット操作がリポジトリに変更を加える.

結局変更をコミットしたくない場合には,git reset コマンドを使って変更をステージから削除することができることをstatusコマンドが思い出させてくれている.

Pages: Prev 1 2 3 4 5 Next