コンテンツにスキップ

SrcRepository

../

gitとgithub

開発サイクル

  • 細かい修正やbugfixなどは,master branchで行う(fixとか専用branch要検討?)
  • ある程度手間がかかりそうな新機能を追加するときは,それに対応する開発branchを作り,それ上で作業する
  • ある程度動作チェックまで完了して来たら,masterをmerge
  • conflictがあれば修正しそのうえで動作チェックとbugfixをする
  • 動作OKになったらmasterにmergeし,要らないようならbranchを削除する
  • Build番号などはmasterでbuildしたときにのみ増加させるようにする.
    (不要なconflictを防ぐため,開発branchではbuild numberはいじらない)

Branchに対してmasterをmerge

> git checkout XXX #(branch XXXに移動.すでに移動している場合は不要)
> git pull origin XXX #(remoteのXXXの更新分を取得)
> git merge origin/master #(remote repository origin/masterの更新をmerge)

新たにbranchを新規作成し作業を始める場合

> git clone git@github.com:CueMol/cuemol2.git cuemol2_XXX
> git branch XXX
> git checkout XXX

新たに特定のbranchを取ってきて作業を始める場合

特定のbranchをXXXとすると,

> git clone git@github.com:CueMol/cuemol2.git cuemol2_XXX
> git checkout -b XXX origin/XXX

あるいは,最後のコマンドは,

> cd cuemol2_XXX; git checkout XXX

の方が良いのか?

既にあるlocal repで新たなbranchを取ってきて作業を始める場合

特定のbranchをXXXとすると,

> git fetch

→branchの情報が更新される(後は同様)

> git checkout -b XXX origin/XXX

Permissionの変更を無視させる

Winでは全て7xxになってしまうので無視させた方が良い.

> git config core.filemode false

他のforkしたrepositoryを統合する

fork先を登録&内容取得

> git remote add XXXX git://github.com/XXXX/cuemol2.git
> git fetch XXXX
> git branch -a

Merge

> git merge  XXXX/master

→local source treeに反映されるので,必要に応じてこの後pushを行う

Releaseを作成する

  • Releaseするversionのsource code snapshotをarchiveする
> git archive --format=zip HEAD --prefix=cuemol2-2.X.Y.ZZZ/ -o cuemol2-2.X.Y.ZZZ-src.zip
  • archiveを展開するとcuemol2-2.X.Y.ZZZができるので,それ以下でbuild
  • debug symbol file (pdb fileなど)がそのbuildしたdirectoryに対して出来るので,crashdumpを解析する事を考えてbuildしたdirectoryは残しておく

古い情報

svnの使い方 (obsolete)

text fileにする

svn propdel svn:mime-type [ファイル名]

diffの取り方と

Working copyと,他のrevisionとの差分を見る場合.すでに対象ファイルのあるディレクトリにcdしているとすると,

svn diff --new=svn+ssh://XXXXX@svn.sourceforge.jp/svnroot/cuemol/cuemol2/branches/X.X.X/src/aaa/bbb.cpp --old=./bbb.cpp

以上で,単純に指定branchとworking copyの差分が表示される.

mergeのやり方

Working copy(ex. trunc)に,他のrevisionで行った変更を適用して統合したい場合.すでに対象ファイルのあるディレクトリにcdしているとすると,

svn merge svn+ssh://XXXXX@svn.sourceforge.jp/svnroot/cuemol/cuemol2/branches/X.X.X/src/aaa/bbb.cpp ./bbb.cpp

以上で,祖先関係を考慮したうえで,指定branchとworking copyの差がworkinc copyに適用される.祖先関係の考慮というのは,working copyと指定branchが分岐した地点からのbranchとの差分が,working copyに適用される,という事らしい.(なので,working copyにbranch後に行われた変更は保持されるらしい.多分)

あと,--dry-runというのをつけて実行すると,実際にファイルの変更は行われない(テスト用).

Conflictを起こしたら,ともかくもp (postpone)にしておいて, 編集してconflictを解決(<<<<や>>>>や====がある部分を修正), 後からsvn resolve --accept working [filename]を実行.

あるいは,svn resolve --accept mine-fullにするとmergeする前のものを使用して解決される.(theirs-fullだとmergeで取得したバージョンの方が使用され解決される)

ssh

ssh-agentを使った方が便利な場合がある.

eval `ssh-agent`
ssh-add [ssh secret key]

ssh-agentの引数-c/-sは指定しなくても勝手に認識して適当なshellの方が選択されるらしい.