http://anond.hatelabo.jp/20120407162253 に便乗して。
それなりに大きなとある会社のプログラマだけど、うちの会社のビルドシステムがおかしい気がする
あまりにも原始的なので違和感を感じるんだけど、自分にビルドシステムに対する知識が圧倒的に不足しているので、今やってる作業に本当に意味があるのかよく分からない。詳しい人に教えてもらいたい。
手動でコピーするからよく事故が発生するし、同じファイルが複数箇所にあるので全然履歴が追えない。
あと、中間ファイルや実行ファイル(.o とか .so とか) も含めてごちゃまぜにチェックインされているので、もっと訳がわからなくなってる。
「ビルドは成功しないのが当たり前」とかいう人ばかりで、正直発狂しそうになる
フォルダツリーがわかりづらいと思うので図を書くと
/ Main/ -- 共通ファイルディレクトリ foo/ bar.c driver/ common.c ProductA/ foo/ bar.c -- ProductA 用の変更が入ってる baz.c -- ProductA 専用ファイル driver/ common.c ProductA_Orig/ -- ProductA/ 内の ProductA用ファイルが丸々入ってる foo/ bar.c baz.c ProductB/ foo/ bar.c -- Main と全く同じ driver/ common.c ProductC/ foo/ bar.c driver/hoge.c ProductC_Orig/ driver/hoge.c
こんな感じになっていて、共通部分は Main/ の中とそれぞれの ProductA, ProductB, ... ディレクトリの中にすべてコピーされている。
チェックインするときはすべてのファイル、例えば bar.c を更新したら Main, ProductA, ProductB, ProductC の bar.c を手動で更新する必要がある。
ビルドするときは Main/ のファイルを ProductA/ にコピーして、 ProductA_Orig/ の中の機種依存ファイルをさらに ProductA/ にコピーする。これは、同名のファイルが Main にもあって、 ProductA のファイルが上書きされるかららしい。
ビルドできないので、最後の最後まで結合テストが出来ずに、みんなローカルPCで開発してる。誰かのPCが吹っ飛ぶとその人が開発していた差分が消失する。
「ツリーを共通部分と依存部分きちんと分けて、ビルド自動化しましょうよ」って上長に提案したら「この会社はこれでやってる。むしろバイナリが入っているのでビルドできなくてもテストできる」という感じであまり真面目に取り合ってもらえなかった。
それなんて既視感。 だけど、俺も自分の家でバージョン管理すると自分一人なんでずさんになってちゃうんだよなぁ。 結局、その案件や、その会社のスタート時にやってた人たちがル...