1.27.2016

gitignore書式

gitignore書式

  • ハッシュ記号で始まる行はコメントとして扱われる
  • 空行は無視される
  • ! マークで始まる行は残りのパターンを否定します
  • スラッシュ/で終わる場合はディレクトリのみを表す
  • スラッシュ/で始まる場合はルートディレクトリからを表す
  • どこにもスラッシュ/が無い場合はシェルのglobパターンとしてファイル名のベース部分にマッチするか検査される
  • 複数マッチするパターンがある場合は最後にマッチするものが優先される

gitignoreパターン例

  • *~
ファイル名の最後に ~ がある全てのファイル 例) index.html~ 等 
  • *.[ao]
拡張子が a 又は o のファイル 例) hello.a foo.o 
  • t/
t ディレクトリは全て無視される
  • v
ファイル名が v の場合無視されるが v がディレクトリ名の場合は無視されない
  • !*.t
拡張子 t を持つファイルは無視されない

ローカル環境でのみ無視する場合

.gitignoreはバージョン管理の対象外にしたいファイルを登録することができる。登録した内容はリポジトリで管理し、共同で利用しているユーザーと共有できる。しかし、ローカル環境のみ自分独自の設定内容お保持したいファイルがある場合で.gitignoreでその状態を共有したくない場合がある。そのような場合.git/info/excludeにパターンマッチを登録しておくことで他の人と共有せずに除外指定することができる。

1.08.2016

Gitでよく使うコマンドとか

コミット間差分

コミット間での変更及びその周辺をすべて表示

  • git diff commit1 commit2

コミット間で変更されたファイル名をリストアップ

  • git diff --name-only commit1 commit2

コミット間で変更されたファイル名と変更概要をピックアップ

  • git diff --stat commit1 commit2

ブランチ操作

ブランチ名取得

  • git rev-parse --abbrev-ref @

フルネームで取得

  • git symbolic-ref HEAD 2>/dev/null
  • git rev-parse --symbolic-full-name @

ブランチの作成

  • git branch new_branch
HEADに<new_branch>ブランチを作成する。もうすでに<new_branch>がある場合できない。
  • git branch -f new_branch
HEADに<new_branch>ブランチを作成する。もうすでにある場合位置をHEADに移動させる。
  • git checkout -b new_branch <commit>
<commit>に、なければHEADに<new_branch>ブランチを作成しチェックアウトする。もうすでに<new_branch>がある場合できない。
  • git checkout -B new_branch <commit>
<commit>に、なければHEADに<new_branch>ブランチを作成しチェックアウトする。もうすでにある場合位置をHEADに移動させる。

チェックアウト

ひとつ前のチェックアウト先をチェックアウト

  • git checkout -

ひとつ前のコミットをチェックアウト

  • git checkout HEAD^

特定のファイルのみひとつ前のコミットに戻す

  • git checkout HEAD^ -- file.name

ブランチ一括操作

マージ済みのチェックアウト先を除くローカルブランチをすべて削除

  • git branch --merged | grep -vE '^\*' | xargs --replace=% git branch -D %

マージ済みのmaster, developブランチ以外(チェックアウト先を除く)のローカルブランチをすべて削除

  • git branch --merged | grep -vE '^\*|master$|develop$' | xargs --replace=% git branch -D %

master, developブランチ以外(チェックアウト先を除く)のローカルブランチをすべて削除

  • git branch | grep -vE '^\*|master$|develop$' | xargs --replace=% git branch -D %

4.16.2014

SubversionとGitを混在させて運用する

SubversionとGitを混ぜて使う事案が発生したので両方使用できるようにするにはどうすればよいかを検討した。
理由としてはプログラマはGitを使用したいが非プログラマはSubversionでもいっぱいいっぱいだからだ。
なのでSubversionで以下のリポジトリを作成した。

root
|-main
|  |-trunk
|  | |-foo
|  | |-bar
|  | |-piyo
|  |-branches
|  |-tags
|-graphics
   |-trunk
   | |-hoge
   | |-fuga
   | |-piyo(root\main\piyoの外部参照)
   |-branches
   |-tags

このように一つのリポジトリに複数プロジェクトを作成した。これによりプログラマはmain以下をgit-svnでクローンし、非プログラマはgraphics以下をSubversionでチェックアウトすることができる。
プログラマが必要としないリソースをわざわざクローンしなくてよいというメリットがある。
mainプロジェクト側にgraphicsプロジェクト側から渡したいものがある場合やmain側にあるツールをgraphicsプロジェクトから参照したい場合は、Subversionの外部参照を用いてgraphics側からmainの特定ディレクトリを参照するように設定してあげればよい。
注意する点としてmainプロジェクトはGitでアクセスするのが前提のため、graphicsプロジェクト側を外部参照することはできない。これは設定次第でどうとでもなるのでそこまで今のところ困っていない。
運用方法にまだ課題はあるがしばらくこれで進めることにした。

1.11.2013

WindowsでPythonのバージョンを切り替える

WindowsでPythonの2系と3系を任意に切り替えたかったのでそのときのメモ。
WindowsVista以降だとシンボリックリンク(MKLINK)が使用できるのでそれを利用してPythonのパスを切り替えるようにしてみた。
 まず前提としてPythonのインストール先をC:\Python直下にPython3.3とPython2.7がそれぞれPython33、Python27というようにインストールされているとする。
そうした場合に
cd /d %~dp0
if exist python rd python
mklink /d python c:\Python\Python%1

というbatファイルを作成し、仮にC:\Path\python_swap.batとする。ショートカットを2つ作成する。
ひとつは2系である2.7に変更するショートカットなので27というパラメータを追加するのでリンク先にC:\Path\python_swap.bat 27と入力する。
シンボリックリンクの作成は管理者権限が必要となるのでショートカットタブの詳細設定で管理者として実行のチェックを入れておく。
そうすることで毎回コンテキストメニューから管理者として実行を選択する必要がなくなる。
もうひとつのショートカットのリンク先に3系のC:\Path\python_swap.bat33と入力する。
作成したショートカットのうちのどちらかを実行すると直下にpythonというシンボリックリンクが作成されるのでこのリンクのパスを環境変数のPATHに追加する。ex.) C:\Pathpython;
これでpythonを呼び出したときのバージョンが任意に変更できるようになった。

11.01.2012

GoogleTestをiOSで行うときのまとめ

Google C++ Testing FrameworkをiOSで行うときに行ったことのまとめ
  1. GoogleTestのXcode用のプロジェクトのうちgtest-staticとgtest_main-static以外は必要ないのでスキーム及びターゲットは消してもかまわない。
  2. BaseSDKをiOSSDKのものに変更する。
  3. Compiler for C/C++/Ovjective-CをDefault Compilerに変更する。 
  4.  ビルド時にcrt_extern.hがないといわれることがあるので、crt_externs.hを追加する。
  5. あとはOSXで行うのと同様に行える。

8.19.2012

OpenSL ESでサスペンドしたい

OpenSL ESでOpenALで言うところの、
ALCdevice *device;
ALCcontext *alContext;
alcOpenDevice(NULL);
alContext = alcCreateContext(device, NULL);
alcMakeContextCurrent(alContext);


alcMakeContextCurrent(NULL);
alcSuspendContext(alContext);
alcSuspendContextに相当するものが欲しいので探してみましたが見つからないようなので、サスペンドする時状態を記録してから一度全SLObjectの破棄とEngineを破棄するようにしました。(しないとサスペンド状態の時に別のアプリケーションを立ち上げてそれでもSLを使用していた時に落ちてしまったので。)
復帰時には再生成したのち、前回の状態を見て再生したりということをしてみました。
もう少しスマートにできればいいのですけれども。

7.10.2012

ボリュームボタンでメディアの音量を調節できるようにする

OpenSL ESでサウンドを再生していて、音を再生しているときにしか音量がボリュームボタンで変更できなかったので調べた。

メディアの音量変更を有効にするには、ActivityのsetVolumeControlStreamAudioManager.STREAM_MUSICを渡すことで設定できるようになる。
他にも STREAM_ALARM, STREAM_DTMF, STREAM_NOTIFICATION, STREAM_RING, STREAM_SYSTEM, STREAM_VOICE_CALLがある。via(AndroidDevelopers.AudioManager)
あとはJNIを使用してJava側に作ったメソッドを呼び出せばよい。

const char* methodName = /*Java側に作成したメソッド名*/;
struct android_app* androidApp = /*android_mainの引数をあらかじめ保存しておく*/;

JavaVM* vm = androidApp->activity->vm;
jobject clazzObj = androidApp->activity->clazz;
JNIEnv* env;
vm->AttachCurrentThread( &env, NULL );
jclass clazz = env->GetObjectClass( clazzObj );
jmethodID methodID = env->GetMethodID( clazz, methodName, "()V" );
env->CallVoidMethod( clazzObj, methodID );
vm->DetachCurrentThread();

初期化のタイミングなどにコールすればいいだろう。