トップページ > プログラム > 2014年04月29日 > jiz/CQ6q

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

1 位/247 ID中時間01234567891011121314151617181920212223Total
書き込み数00001000001231236051000025



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Git 9

書き込みレス一覧

Git 9
223 :デフォルトの名無しさん[sage]:2014/04/29(火) 04:10:14.41 ID:jiz/CQ6q
>>221
どういうふうに都合わるいのか詳しく頼む。

mergeコミットが残ってたほうがブランチの情報が残るという認識なんだけど。
Git 9
228 :デフォルトの名無しさん[sage]:2014/04/29(火) 10:41:22.64 ID:jiz/CQ6q
議論が変な方向に行くのがイヤなんで一応ハッキリさせときたいんだけど、
俺が気にしてるのは rebase && FF マージね。
master(統合ブランチ)にトピックの作業を取り込む際に rebase してから
FF merge するってやり方のこと。これをやりたくなる意味がわからない。
他の目的のrebase自体は問題ないと思ってる。
Git 9
231 :デフォルトの名無しさん[sage]:2014/04/29(火) 11:14:43.54 ID:jiz/CQ6q
>>229
> masterにブランチをマージするときに、そのブランチのベースがどこだったかという情報に意味があるか
どういう場合にベースを意味がある(または意味がない)くわしくたのむ

俺にとって重要なのはブランチの目的とその目的に向かってコミットがどう積み重ねられたのかであって、
ベースがどこかは明示的にはあんまり気にしないんだが。

FFマージじゃなければ統合ブランチの履歴を log --first-parent で要約できるのと、
マージコミットのログなどに表示される親コミット2つ使って
git log deadbeaf..cafebabe
のようにトピックのログだけ簡単に取り出せるのが便利なのに。

後者は内部で merge-base 使ってるのでベースに意味があるのは確かだが、
だとすれば常に(俺にとっては)意味があると言える。
Git 9
239 :デフォルトの名無しさん[sage]:2014/04/29(火) 11:57:18.99 ID:jiz/CQ6q
俺としては歴史修正ツールとしてのrebaseの使用には賛成なんだが、
やはりそっちの議論にいってしまうか。

いや、本当に全てのrebaseが有害と言ってるヤツもいるのかもしれんけども。

・rebase && FFマージの話
・歴史修正ツールとしてのrebaseの良し悪し

これらは分けて議論したいんだがな。
俺は後者としてrebaseは絶対必要だが、前者の使い方に疑問がある。
Git 9
241 :デフォルトの名無しさん[sage]:2014/04/29(火) 12:25:05.93 ID:jiz/CQ6q
>>236
おぉ、そういう主張か。 >>239 はとりあえず忘れてくれ。

> rebaseしないでmergeしようとするとコンフリクトが起きる可能性が高い。
> masterへのmergeで起きたコンフリクトをその場で修正すると
> バグを入れる可能性が高くなる。

主題から少しはなれるがここはおかしい。
masterにマージする人間とtopicを作ってる人間が別人ならその場で修正なんかせず、topic 作ってるやつに一旦 merge か rebase させるべき。

topic 側から master をマージした直後なら、その topic を master にマージするときはコンフリクトは起きない。このときは master 側からは no-ff でマージすべきだが、topic作ってくれたやつがmergeした方向による。

もちろん topic 作ってる人間は rebase してもいい。たぶん君が取ってる戦略はこっちなんだろう。
ただし topic を rebase したなら master にマージする人間は no-ff マージすべき。

もう一度言うが、俺が気にしてるのは rebase && FFマージだからね?
rebase後にno-ffでマージしてるなら大きな疑問はないよ。(topic作る側はめんどくさそうだなってだけ。コンフリクトしないのに不要なrebaseも強制するわけでしょ?)。

> レビューする人は自分で作ったわけじゃないから、コンフリクトをどう解消させればいいか判断できない。

やっぱ他人なんだよな。mergeする場合はコンフリクトの解消はmerge/rebaseで書いたやつにさせるように運用するのがお勧めだよ。
Git 9
242 :デフォルトの名無しさん[sage]:2014/04/29(火) 12:27:35.28 ID:jiz/CQ6q
>>240
> 1. 開発者に修正(rebase)してもらう
> 2. 自分で適当に修正する。

どちらかで選ぶなら1だね。ただし、そこにはmergeという選択肢もある。
そしてより重要なことだが、俺が疑問視してるのはそこじゃない。
rebase修正してもらうのはいい。そのあとFFマージをするのはなんでだぜ?ってこと。
Git 9
244 :デフォルトの名無しさん[sage]:2014/04/29(火) 12:35:19.57 ID:jiz/CQ6q
>>243
> というか、ウェブの管理画面からはno-ffでしかマージできない。
rebase && FF派じゃねーのかよ (´・ω・`)
Git 9
246 :デフォルトの名無しさん[sage]:2014/04/29(火) 13:06:53.85 ID:jiz/CQ6q
>>245
ちがうよ、rebaseはなくてはならない重要なツール。
俺が疑問に思ってるのは rebase && FF だよ。

理由はrebase && FF してしまうと
1 log --first-parent で要約をとれなくなる
2 マージコミットの親コミットの情報をもとにtopicのログを分離できなくなる
から。詳しくは上の方を見てくれ。
Git 9
249 :デフォルトの名無しさん[sage]:2014/04/29(火) 14:26:17.37 ID:jiz/CQ6q
>>247
> 別にどっちでもいいというか
> プロジェクトの性質に合わせて運用するべきで
> 他人がどうこう言うもんじゃないと思うが
rebase && FFすべきプロジェクトの性質ってなに?

> コードを追うならFFの方が都合がいい場合もあろう
それってどういう場合?

一応断っておくが煽りではないよ。
どっちも例でよいので示してみてくれないか。

「あぁ、そういうことならrebase && FFマージ戦略にすべきだよね」
「rebase && FFマージ戦略じゃないと困ったことになってしまうね。解決策としてはrebase && FFマージがベストだよね」
って感じのをたのむ。

ちなみにこれも勘違いされるとイヤなので書くが、rebaseが常に悪ではないのと同様、
俺はFFが常に悪と言っているわけではないぞ。
些細な変更(ドキュメントのtypo修正1コミットとか)なんかはFFでも気にしないし、
コンフリクトしたときtopic開発者がmergeした方向によってはそれをmasterにマージする際はFFすべき。
俺が疑問を持っているのは「何がなんでもrebase && FF」ってタイプの主張だ。
Git 9
252 :デフォルトの名無しさん[sage]:2014/04/29(火) 14:58:20.39 ID:jiz/CQ6q
俺も他人が管理してるプロジェクトであれば「うちではrebase && FFでやるから」って言われても
「フーンそうですか。(大変ですね)」くらいで済ますわけですよ。

だが利益もないのに「履歴が一直線になってわかりやすい!」とか主張するやつが増えて、
それが正義みたいになるのは避けたいのです。
# 今のところ rebase && FF は面倒なだけで、「わかりやすい」というのは幻想だという認識

もし rebase && FF がフィットするプロジェクトの性質とやらがあるなら自分の認識を変えるし、
そうでないなら「rebase && FFが許されるのは中学生までだよねー」的な雰囲気になってほしいの。
Git 9
253 :デフォルトの名無しさん[sage]:2014/04/29(火) 15:08:09.46 ID:jiz/CQ6q
名指しして悪いんだけど例えばこれ
http://powerful-code.com/blog/2012/11/merge-or-rebase/

mergeの「悪い点」は履歴を統合ブランチの--first-parentとtopic
ごとに分けて考えることを知ってれば悪い点にはなり得ない。

rebaseの「良い点」はこれまた--first-parentしらねーんじゃねーの的な。
Git 9
254 :デフォルトの名無しさん[sage]:2014/04/29(火) 15:16:46.84 ID:jiz/CQ6q
巨大なプロジェクトでも--first-parentで見れば直線的だし、
かなり要約(圧縮)されるので把握しやすい。
これがもしrebase && FFされてたらと考えるとログ見るのイヤになるだろうね。

例えば Linux で v3.13 から v3.14 の間には
マージコミットを除くと全部で12311個のコミットがあるんだが、
gitk --first-parent v3.13..v3.14
ってやったときに出てくる履歴は12311個と比較するとわずか422個で見た目も"直線的"だ。

これが12311個のコミットを見ないといけないとしたら、
直線的に並んでようが把握するのは楽じゃない。
422個(+マージベースの422個)のタグを打ちたきゃ打ってもいいけど、リリース用のタグが埋もれるわな。
命名規則で回避する?頑張れって感じ。
Git 9
257 :デフォルトの名無しさん[sage]:2014/04/29(火) 15:56:19.89 ID:jiz/CQ6q
>>255
そういうことなの?

トピックブランチを用いる場合、そのトピックがあるひとつの目的を表していて、
その目的を達成するための変更が複数のコミットになったりはしょっちゅうあるんだが。

rebase && FFはトピックブランチ使わないってことなのかね。
Git 9
258 :デフォルトの名無しさん[sage]:2014/04/29(火) 16:01:07.06 ID:jiz/CQ6q
>>256
なるほどなるほど。そういう意見を待ってた。
ちゃんとトピックごとにブランチを作るのを諦めざるを得ない状況ってことね。

first-parentを見てもマージコミットから単一のトピックが見えるわけじゃなく、
同一の目的であっても複数のマージコミットに情報が分散してしまう。
ならもういっそのこと rebase && FF でとにかく全体をいっぺんに見れるようにしよう、

って感じかな。

感謝感謝。
Git 9
263 :デフォルトの名無しさん[sage]:2014/04/29(火) 16:26:11.71 ID:jiz/CQ6q
>>259
いや、お前の主張には納得できなかったが議論してくれたことに感謝する。ありがとう。
Git 9
264 :デフォルトの名無しさん[sage]:2014/04/29(火) 16:29:31.48 ID:jiz/CQ6q
>>260
> さっきからrebase && FFが問題であるかのように言ってるが、
> 問題なのは「FF only の masterマージ」だろう?
そうなんだけど、FF only の masterマージをしようと思ったら
(コンフリクトするかどうか関係なしに) rebase が必須になるよな?

> さらに言えば、masterへのマージ以外には
> 当てはまらないだろう?
統合ブランチへのマージの話であって、
統合ブランチがmasterとは限らないのでコレは賛同できないが、
話をシンプルにするためにmasterへのマージに限定してもらってもいいよ。
Git 9
266 :デフォルトの名無しさん[sage]:2014/04/29(火) 16:30:55.69 ID:jiz/CQ6q
>>261
> そしてFF only で masterマージ している(かのようなログをした)
> 有名なライブラリ例を上げておく。
> https://github.com/lodash/lodash/commits/master

そうかい。
それで、このライブラリでは何の利点があって FF only で master マージしてるんだってばよ?
Git 9
268 :デフォルトの名無しさん[sage]:2014/04/29(火) 16:40:59.32 ID:jiz/CQ6q
>>267
> 「履歴が一直線になってわかりやすい!」のは明確な利益だよ。
> 実際にわかりやすいんだから。

うーん、FFマージせずに、必要に応じてno-FFしてfirst-parentで要約したほうが
直線的なだけでなく情報が圧縮されてわかりやすいと主張しているんだが、
君には伝わってないように思えるな。 >>254 をもう一回読んでみてくれないか?
Git 9
270 :デフォルトの名無しさん[sage]:2014/04/29(火) 16:51:05.11 ID:jiz/CQ6q
>>269
> > それで、このライブラリでは何の利点があって FF only で master マージしてるんだってばよ?
> 俺がそのライブラリの開発者じゃないからしらんけど、

ちゃんと説明できないならこのライブラリの例は無視するよ。
# いったいどこからどこまでがお前の主張なの?

俺もトピックでは複数の修正をよく入れるし、
意味のある単位で分割してる(つもりだ)からsquashなんてしたくない。
Git 9
276 :デフォルトの名無しさん[sage]:2014/04/29(火) 18:11:38.86 ID:jiz/CQ6q
>>273
コミットグラフを書けるかちょっと試し書き。ずれてたらすまん。
お前の主張は

A-B-C
/ \
X-------M-M
\ /
D--E--F

こういう変更は DEF をrebaseして

A-B-C
/ \
X-------M---------M
\ /
D'-E'-F'

こうすべき、ってことでいいかい?

俺的にはどちらもfirst-parentで

\
X-M-M
/

に要約可能だからどっちでもいいよ。
# ただ自分でやる場合はコンフリクトしない限り前者のほうがrebaseしなくていいから楽だけと思うけどね。
# もちろんDEFのマージ時にコンフリクトしたらrebaseすることもある。DEF開発者によるmergeも可。
Git 9
277 :デフォルトの名無しさん[sage]:2014/04/29(火) 18:12:17.95 ID:jiz/CQ6q
疑問視してるのは

X-A-B-C-D'-E'-F'

にすべきという主張だ。
これはA-B-CとD-E-Fが本来別の目的を目指して重ねたコミットだという情報が失われてしまうから
たとえ一直線でもわかりにくいと俺は主張しているんだよ。

トピックが2個程度ならどっちでも良さそうだが、トピックが数十の場合を想像してくれ

X-M-M-M-.....M-M

という数十個の要約を見る(必要に応じてトピック内のABC等を確認する)のと

X-A-B-C......(区切りもなく、めちゃくちゃたくさんのコミット)....x-y-z

を見るのと、どっちがわかりやすいの?ってこと。
Git 9
278 :デフォルトの名無しさん[sage]:2014/04/29(火) 18:15:08.80 ID:jiz/CQ6q
ブラウザによっては結構ずれるな。わかんなきゃ無視してくれ。
Git 9
282 :デフォルトの名無しさん[sage]:2014/04/29(火) 18:44:21.18 ID:jiz/CQ6q
>>279
pull.ff 設定が可能になったのは確かだし、単に上流を追従するだけでその上で作業しないリポジトリなら
ff-onlyのほうが嬉しいのは確かだが、今議論してる内容とは前提が全然違うぞ。

# rc1だがmergeもpullもデフォルトでFF onlyな動作じゃないのを確認しちまったじゃねーか。
Git 9
283 :デフォルトの名無しさん[sage]:2014/04/29(火) 18:45:53.07 ID:jiz/CQ6q
>>281
そうそう。
ちなみに gitk --first-parent すると要約されたコミットグラフは事実上一直線なのがわかると思う。
Git 9
287 :デフォルトの名無しさん[sage]:2014/04/29(火) 19:58:40.00 ID:jiz/CQ6q
>>285
報告ありがとう。

今後もGitに慣れるにしたがって、見え方も変わってくるかもしれないな。
周りも不慣れということで大変だと思うが、お前のプロジェクトのベストプラクティス確立にむけて頑張ってくれ。
グッドラック。


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