トップページ > プログラム > 2015年03月01日 > odvvrg+G

書き込み順位&時間帯一覧

2 位/228 ID中時間01234567891011121314151617181920212223Total
書き込み数00000000000001400000041010



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Git 11©2ch.net

書き込みレス一覧

Git 11©2ch.net
688 :デフォルトの名無しさん[sage]:2015/03/01(日) 13:53:52.15 ID:odvvrg+G
>>683
検証できるもので語ろうよw

検証できない事だと嘘付いても調べようがないからね。
それを利用して、さも自分が知っている秘密の世界(笑)では
自分の都合のいいことが起きているという。

でも科学の世界では第三者が検証できなければ意見としてみなされない。
だから検証できるものを出すのが重要。

俺は出した。git本家のリポジトリだ。
君はなにか出したかね? 信用される行動を取りましょう。
Git 11©2ch.net
691 :デフォルトの名無しさん[sage]:2015/03/01(日) 14:15:17.53 ID:odvvrg+G
>>690
立証方法は数でいいかな?

より多くのプロジェクトでやっているやり方が
より一般的である。

この定義は問題ないだろう。


今のところgitという例がひとつ出た。
反対意見のプロジェクトは0だから
今の所一般的なのはgit風である。

反対プロジェクトが出たら、また一つ探してくることにするよ。。
Git 11©2ch.net
694 :デフォルトの名無しさん[sage]:2015/03/01(日) 14:24:45.39 ID:odvvrg+G
>>692
じゃあ、検証可能でもっといい方法があったら
それに変更することにするよ。

それまでは、より多くのプロジェクト(誰でも検証可能なものに限る)で
使われている方が一般的という定義にしておくね。

あ、仮だから、仮。

文句ばかり言って、何もだいたい手段を言わない人を
黙らせるための仮の定義だからね〜。
Git 11©2ch.net
699 :デフォルトの名無しさん[sage]:2015/03/01(日) 14:36:18.63 ID:odvvrg+G
>>696
> commit直後に修正入れるようなみっともないことしないよう、ちゃんとデバッグしろということ?

コミットはこまめにやるべきだから、ちゃんとデバッグしなくてもいいというか
事実上できないよ。

その代わり、ちゃんとデバッグしてからmasterなり
他人に公開しているブランチにマージする。

こまめにやったコミットをデバッグして、
問題があったらもちろんrebaseして、
きれいなコミットにしてからマージする。

それがgitなどの多くのプロジェクトで極普通に行われている方法。
Git 11©2ch.net
700 :デフォルトの名無しさん[sage]:2015/03/01(日) 14:38:01.87 ID:odvvrg+G
>>698
それぞれの環境にあったやり方はあるだろう。

例えば、ソースコード管理をせずに
ソースコードに修正履歴のコメントを書く
という環境もあるだろう。

そういう環境があることを否定しているのではなく、
より良い環境とは何か?というのを
多くのプロジェクトをみて学びなさいということ。
Git 11©2ch.net
710 :デフォルトの名無しさん[sage]:2015/03/01(日) 21:33:37.81 ID:odvvrg+G
>>705
その例じゃわかりづらいだろw

まずmasterブランチがあるとする。
そのmasterを元にAさんがある機能を作るとする。

git checkout master // masterにいる
git checkout -b new_feature // 新しい機能作成

そのブランチで開発をする。
touch new_class && vi new_class
git add new_class
git commit -m 'add new_class' # new_classを作成

vi existing_class
git add existing_class
git commit -m 'improve existing_class' # 新機能追加のために、既存のexisting_classクラスを拡張

vi new_class
git add new_class
git commit -m 'fix new_class' # existing_classを書いている時に、new_classにバグや修正やタイポが発覚して修正した

git checkout master
git merge new_feature # 新機能をmasterにマージ

この時のmasterのコミット履歴がこんなふうになったってしょうがないってこと。

* Merge new_feature
- fix new_class (新クラス完成版)
- improve xisting_class (既存クラスの拡張)
- add new_class (バグがある新クラス)
Git 11©2ch.net
711 :デフォルトの名無しさん[sage]:2015/03/01(日) 21:34:46.93 ID:odvvrg+G
この例はまだ機能がまだ少ないからいいけど、例えば、2つのファイル修正。
2つのファイル作成で成り立つ機能を1週間かけて作る。コミットはこまめにする。
その1週間の作業で間違えることなく完璧に作業していればこれだけで良くなる。

new_featureブランチ(rebase版)
- add new_classB (新クラスBの追加)
- add new_classA (新クラスAの追加)
- improve existing_class2 (既存クラス2の拡張)
- improve existing_class1 (既存クラス1の拡張)

だが1週間かかるような仕事をミスせずにやれる人はいなし
理想的な順番で修正できる人も居ないので、作業履歴的にはこうなる。

new_featureブランチ(全部履歴残す版)
- fix existing_class1
- fix new_classB
- fix existing_class2
- fix new_classA
- fix new_classA
- fix existing_class1
- fix new_classB
- fix existing_class2
- fix new_classA
- fix existing_class1
- add new_classB (新クラスBの追加)※この時点ではバグあり
- fix new_classA
- fix existing_class1
- improve existing_class2 (既存クラス2の拡張)※この時点ではバグあり
- fix existing_class1
- add new_classA (新クラスAの追加)※この時点ではバグあり
- fix existing_class1
- improve existing_class1 (既存クラス1の拡張)※この時点ではバグあり
Git 11©2ch.net
712 :デフォルトの名無しさん[sage]:2015/03/01(日) 21:35:36.94 ID:odvvrg+G
new_featureブランチ(全部履歴残す版)をみて
他人が結局何をしたのか?なんて把握できるわけがないし、

squash等で全部まとめてみるという考えもあるがそうすると

new_featureブランチ(squash版)
- existing_class1 + existing_class2+ new_classA + new_classB (新クラスA,Bの追加と既存クラス1,2の修正)


diffの内容=new_classBとnew_classA とexisting_class2とexisting_class1の
修正内容を一度に全部まとめてみることになる。

既存クラスの拡張が、単純な関数の追加だけならまだわかるけど、
それぞれいくつかの既存の関数の修正だと、
全部まとめてみると、二つの独立した機能拡張をまぜて見ないといけなくなる。

小さな修正を見るよりも、大きな修正を見るほうが大変なのは言うまでもない。

で、もちろん、new_featureブランチ(全部履歴残す版)のようなものをmasterに入れることはない。
入れると、git bisectで問題箇所を調べるときの障害にもなる。
(使ったことある? 二分探索で自動的にコミットをチェックアウトしてバグを調べる機能)

ブランチの段階でプルリクエスト(レビュー依頼)する。
もちろんレビュー依頼をするときには、rebaseしておく。
そこでまた修正があるとしたら、途中もしくは最後にrebaseしてからマージ

有名なプロジェクトをみても途中の作業履歴が残っていないので
それが一般的であるとうことがわかる。
Git 11©2ch.net
713 :デフォルトの名無しさん[sage]:2015/03/01(日) 21:37:40.19 ID:odvvrg+G
>>707

> プログラムなんて完成させりゃいいのに、
> より完璧にバージョン管理する方法とか、手続きにとらわれすぎて可哀想。

その考えもわかるけど、それだとsquashするほうがまだましだだから
どちらにしろ履歴は残さないよ。
Git 11©2ch.net
716 :デフォルトの名無しさん[sage]:2015/03/01(日) 22:15:59.98 ID:odvvrg+G
>>714
まとめること自体は、rebaseだよ。
git rebase -i (編集を開始したいコミット)
ってやればエディタが表示される。

そこで順番を並び替えたり
まとめたりするものを選ぶだけ。

ただ、ここでコンフリクト起きたりすると
それを解消するのに時間がかかって本末転倒になるから、
コミットはほんとうに小さく分けてこまめに整理しながらやること。

あと大きな機能は小さな機能に分割してリリースすることだね。
ただしちゃんとした設計ができてないと、あとから大幅に変更することになって
最悪コードやレビューがムダになりかねないから、
小さな機能でもリリース(master等の共有ブランチにマージ)するなら
しっかり作りこまないといけない。

基本は小さく作ることだよ。そうすればコミットをまとめるのも楽になる。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。