- 1 名前:デフォルトの名無しさん mailto:sage [2014/04/12(土) 13:22:20.98 ID:s4x1CSLN]
- ソースコード管理を行う分散型バージョン管理システム、Gitについて語ろう。
Git - Fast Version Control System git-scm.com/ ◆関連サイト Pro Git - Table of Contents progit.org/book/ja/ Git入門 www8.atwiki.jp/git_jp/ ◆前スレ Git 8 toro.2ch.net/test/read.cgi/tech/1389701817/
- 229 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 10:50:31.16 ID:2NEMUWta]
- masterにブランチをマージするときに、そのブランチのベースがどこだったかという情報に意味があるか
意味がないならrebaseしてからのほうがログが読みやすい
- 230 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 10:58:37.39 ID:fjfML7VO]
- どこで作業を行ったかの記録も重要である
余計なことはするな
- 231 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:14:43.54 ID:jiz/CQ6q]
- >>229
> masterにブランチをマージするときに、そのブランチのベースがどこだったかという情報に意味があるか どういう場合にベースを意味がある(または意味がない)くわしくたのむ 俺にとって重要なのはブランチの目的とその目的に向かってコミットがどう積み重ねられたのかであって、 ベースがどこかは明示的にはあんまり気にしないんだが。 FFマージじゃなければ統合ブランチの履歴を log --first-parent で要約できるのと、 マージコミットのログなどに表示される親コミット2つ使って git log deadbeaf..cafebabe のようにトピックのログだけ簡単に取り出せるのが便利なのに。 後者は内部で merge-base 使ってるのでベースに意味があるのは確かだが、 だとすれば常に(俺にとっては)意味があると言える。
- 232 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:21:26.26 ID:LqsKRBzG]
- コミッターが行った作業をありのままに記録するべき
はたして捏造された記録に意味があるのか
- 233 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:33:05.72 ID:EYu9TTok]
- >>224
コミットログとしてほしいものは、 修正の履歴であって作業の履歴じゃない。 コミットして1分後に気づいたタイポの修正なんか 修正の履歴として残す価値はないはない。 レビューを誰かに依頼して見つかったバグの修正なんか 修正の履歴として残す必要はない。 このコミットで何を修正するのかを明確に記録するには rebaseは必須の機能。rebaseの機能なしで同じことを やろうとしたら大変すぎて断念するレベル。 反論できる?
- 234 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:38:42.10 ID:LqsKRBzG]
- その修正の裏に気づかずに別の箇所を修正しているかもしれない
不具合がそこにあればそこのログをみなければならない でもそれを消しちゃったら困るよね
- 235 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:40:07.95 ID:LqsKRBzG]
- >>233
だからそういうのはタグで管理しろ
- 236 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:49:24.38 ID:EYu9TTok]
- >>228
> master(統合ブランチ)にトピックの作業を取り込む際に rebase してから > FF merge するってやり方のこと。これをやりたくなる意味がわからない。 rebaseしないでmergeしようとするとコンフリクトが起きる可能性が高い。 masterへのmergeで起きたコンフリクトをその場で修正すると バグを入れる可能性が高くなる。 コンフリクトが起きなければ問題ないが、いざマージしようと思った時に コンフリクトが起きたら、修正する必要がある。 masterへの追尾が遅れれば遅れるほど、コンフリクトが起きる可能性も高くなるし、 コンフリクトが起きた時の修正も大変になる。だからこまめにmasterへrebaseしておく。 その一環として、最後にrebaseしておくだけのこと。 そうすればレビューアーも安心してレビューを行える。 もしかして一人での開発しかしてないんじゃない? 作った人とは別の人がレビューするとき、最新のmasterにマージできない状態だと困るんだけど。 レビューする人は自分で作ったわけじゃないから、コンフリクトをどう解消させればいいか判断できない。
- 237 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:51:08.54 ID:EYu9TTok]
- >>235
どうタグを使うっていうんだ? そもそもタグの使い方が間違っている。 タグはある状態に対してつけるもの。 タグがついたらコードフリーズした状態で それ移行変更してはいけない。
- 238 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:54:15.32 ID:EYu9TTok]
- >>234
gitはrebaseしてもコミットが消えてしまうことはない。 コミットIDさえわかればその時のコードは分かる。 コミットIDはreflogに記録され続けるのでコミットIDがわからなくなることはない。 あとはdiffをとれば何を修正したかがわかる。
- 239 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:57:18.99 ID:jiz/CQ6q]
- 俺としては歴史修正ツールとしてのrebaseの使用には賛成なんだが、
やはりそっちの議論にいってしまうか。 いや、本当に全てのrebaseが有害と言ってるヤツもいるのかもしれんけども。 ・rebase && FFマージの話 ・歴史修正ツールとしてのrebaseの良し悪し これらは分けて議論したいんだがな。 俺は後者としてrebaseは絶対必要だが、前者の使い方に疑問がある。
- 240 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 11:59:42.78 ID:EYu9TTok]
- >>239
じゃあピンポイントで聞くわ。 開発者と、masterへマージ(レビュー)する人が別々の人だとする。 masterへマージする時にコンフリクトが起きました。 この時どうしますか? 1. 開発者に修正(rebase)してもらう 2. 自分で適当に修正する。
- 241 名前:デフォルトの名無しさん mailto: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で書いたやつにさせるように運用するのがお勧めだよ。
- 242 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 12:27:35.28 ID:jiz/CQ6q]
- >>240
> 1. 開発者に修正(rebase)してもらう > 2. 自分で適当に修正する。 どちらかで選ぶなら1だね。ただし、そこにはmergeという選択肢もある。 そしてより重要なことだが、俺が疑問視してるのはそこじゃない。 rebase修正してもらうのはいい。そのあとFFマージをするのはなんでだぜ?ってこと。
- 243 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 12:30:47.09 ID:EYu9TTok]
- > ただし topic を rebase したなら master にマージする人間は no-ff マージすべき。
gitlabでmasterにマージするときは、 ウェブの管理画面からボタンを押すだけ その時勝手にno-ffされる。 というか、ウェブの管理画面からはno-ffでしかマージできない。 > (topic作る側はめんどくさそうだなってだけ。コンフリクトしないのに不要なrebaseも強制するわけでしょ?)。 コンフリクト起きないならrebaseもすぐに終わる。1コマンド入力してあとは自動処理。 コンフリクトするなら、結局どこかで作業するのだから大差ない。 コンフリクトするのかな〜?って考えるぐらいなら さっさと1コマンド入力して終わらせるだけの話。
- 244 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 12:35:19.57 ID:jiz/CQ6q]
- >>243
> というか、ウェブの管理画面からはno-ffでしかマージできない。 rebase && FF派じゃねーのかよ (´・ω・`)
- 245 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 12:38:23.48 ID:EYu9TTok]
- rebase派だけど、FF派じゃねーよ?
rebaseのあとはどっちでもいい派。 rebaseすることに異議を唱えてるんじゃないの?
- 246 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 13:06:53.85 ID:jiz/CQ6q]
- >>245
ちがうよ、rebaseはなくてはならない重要なツール。 俺が疑問に思ってるのは rebase && FF だよ。 理由はrebase && FF してしまうと 1 log --first-parent で要約をとれなくなる 2 マージコミットの親コミットの情報をもとにtopicのログを分離できなくなる から。詳しくは上の方を見てくれ。
- 247 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 13:21:06.01 ID:GKmjQvWP]
- 別にどっちでもいいというか
プロジェクトの性質に合わせて運用するべきで 他人がどうこう言うもんじゃないと思うが FF派にとっては1と2は大して重要じゃないんでしょ どうせログなんて参考にしかならんのだから コードを追うならFFの方が都合がいい場合もあろう
- 248 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 13:47:07.80 ID:+oyspTjV]
- プロジェクトの性質にもよるし、そのブランチで音一連の変更がどの程度の変更量かだったり、変更の意味にもよるし、mergeやrebaseをする人の技量にもよるよな。
merge/rebaseについて検索すると、mergeはログが分岐するから良くない、原則rebaseするべきとかいうブログが出てくるけど、 blog.layer8.sh/ja/2013/04/08/best-git-commands-for-the-lonely-programmer/ (ちょっと違う例だけど) こういうのって、ケースバイケースでしかないのに、mergeは悪!rebaseは正義!みたいに思っていそうで、 しかもこういうのを読んでmergeやrebaseの利点欠点について理解してない人たちがまたmergeは悪!rebaseは正義!と思い込んでしまって、害しかないと思うんだよな。 pullしてマージが発生したら「これでは自分が持っていたコミットの方が正統としているようなものです。origin へ push したのは a と b の方が先なのに…。」とか意味不明もいいとこ。
- 249 名前:デフォルトの名無しさん mailto: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」ってタイプの主張だ。
- 250 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:28:32.84 ID:jobIXRFq]
- どうでもいい
- 251 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:30:18.99 ID:GcKmP5Zr]
- このスレの先輩方の議論のまとめとか入門とかをwikiにまとめませんか?
- 252 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:58:20.39 ID:jiz/CQ6q]
- 俺も他人が管理してるプロジェクトであれば「うちではrebase && FFでやるから」って言われても
「フーンそうですか。(大変ですね)」くらいで済ますわけですよ。 だが利益もないのに「履歴が一直線になってわかりやすい!」とか主張するやつが増えて、 それが正義みたいになるのは避けたいのです。 # 今のところ rebase && FF は面倒なだけで、「わかりやすい」というのは幻想だという認識 もし rebase && FF がフィットするプロジェクトの性質とやらがあるなら自分の認識を変えるし、 そうでないなら「rebase && FFが許されるのは中学生までだよねー」的な雰囲気になってほしいの。
- 253 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 15:08:09.46 ID:jiz/CQ6q]
- 名指しして悪いんだけど例えばこれ
powerful-code.com/blog/2012/11/merge-or-rebase/ mergeの「悪い点」は履歴を統合ブランチの--first-parentとtopic ごとに分けて考えることを知ってれば悪い点にはなり得ない。 rebaseの「良い点」はこれまた--first-parentしらねーんじゃねーの的な。
- 254 名前:デフォルトの名無しさん mailto: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個)のタグを打ちたきゃ打ってもいいけど、リリース用のタグが埋もれるわな。 命名規則で回避する?頑張れって感じ。
- 255 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 15:25:33.99 ID:GKmjQvWP]
- イマイチ何を問題としているのかが分からん
> 1 log --first-parent で要約をとれなくなる > 2 マージコミットの親コミットの情報をもとにtopicのログを分離できなくなる これらが必要になるようなブランチの切り方・コミットの仕方が FF前提の運用方針と合致してない(=土俵が違う)気がするんだが >>249にあるように些細な変更はFFでも気にしないんだろ? 些細な変更を積み重ねて全体を変えていくのがFFの考えの根底にあるんじゃないの 考え方の違うものを己の考え方基準で評価したら幻想にも見えるだろうよ
- 256 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 15:48:55.09 ID:+oyspTjV]
- >>252
rebase && FFが適してるような状況ってのは普通にあると思うよ。 複数人で開発していて、担当者がモジュールごとにほぼ完璧に分かれているような場合でかつ、クライアントがシステムの仕様についての微修正を一度に広範囲にわたって、何回も指示するような場合。 実際には作業分担が発生するから並行した開発が行われ、それによってブランチが分岐するが、それは作業上の都合であって、修正指示と1:1対応しているものではないから、嬉しいブランチの使い方ではないでしょ。 そういうときにはrebase && FFがベストケースだと言えるような気がするけど。
- 257 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 15:56:19.89 ID:jiz/CQ6q]
- >>255
そういうことなの? トピックブランチを用いる場合、そのトピックがあるひとつの目的を表していて、 その目的を達成するための変更が複数のコミットになったりはしょっちゅうあるんだが。 rebase && FFはトピックブランチ使わないってことなのかね。
- 258 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:01:07.06 ID:jiz/CQ6q]
- >>256
なるほどなるほど。そういう意見を待ってた。 ちゃんとトピックごとにブランチを作るのを諦めざるを得ない状況ってことね。 first-parentを見てもマージコミットから単一のトピックが見えるわけじゃなく、 同一の目的であっても複数のマージコミットに情報が分散してしまう。 ならもういっそのこと rebase && FF でとにかく全体をいっぺんに見れるようにしよう、 って感じかな。 感謝感謝。
- 259 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:15:23.14 ID:GKmjQvWP]
- なぜトピックブランチ使わないって結論に至るの?
FFをスムーズに実現するなら トピックごとに細かくブランチを切る方が得策じゃないの まあ黙るならそれでいいというか少なくとも俺はもう黙るよ 逃げてすまんね
- 260 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:17:02.13 ID:EYu9TTok]
- さっきからrebase && FFが問題であるかのように言ってるが、
問題なのは「FF only の masterマージ」だろう? rebaseはFF onlyにするのに、使うかもしれないってだけで、 別にrebaseしなくても、FFでmasterにマージできることもある。 さらに言えば、masterへのマージ以外には 当てはまらないだろう?
- 261 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:19:03.64 ID:EYu9TTok]
- そしてFF only で masterマージ している(かのようなログをした)
有名なライブラリ例を上げておく。 https://github.com/lodash/lodash/commits/master
- 262 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:21:51.52 ID:EYu9TTok]
- >>258
> ちゃんとトピックごとにブランチを作るのを諦めざるを得ない状況ってことね。 ブランチ切らないなら、FFでのmasterマージは ブランチそのものがないから、ありえないだろう? トピックごとにブランチがあるからこそ masterへマージするときにFFにマージすることが出来るんだろう
- 263 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:26:11.71 ID:jiz/CQ6q]
- >>259
いや、お前の主張には納得できなかったが議論してくれたことに感謝する。ありがとう。
- 264 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:29:31.48 ID:jiz/CQ6q]
- >>260
> さっきからrebase && FFが問題であるかのように言ってるが、 > 問題なのは「FF only の masterマージ」だろう? そうなんだけど、FF only の masterマージをしようと思ったら (コンフリクトするかどうか関係なしに) rebase が必須になるよな? > さらに言えば、masterへのマージ以外には > 当てはまらないだろう? 統合ブランチへのマージの話であって、 統合ブランチがmasterとは限らないのでコレは賛同できないが、 話をシンプルにするためにmasterへのマージに限定してもらってもいいよ。
- 265 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:30:46.56 ID:+oyspTjV]
- >>262
ブランチを明示的に分けなくたって、複数人が同じブランチで作業したら実質的にはローカルブランチの分岐が発生しているわけだから、 pushするためにpullするときにマージが発生するでしょ。
- 266 名前:デフォルトの名無しさん mailto: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 マージしてるんだってばよ?
- 267 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:31:51.96 ID:EYu9TTok]
- >>252
> だが利益もないのに「履歴が一直線になってわかりやすい!」とか主張するやつが増えて、 「履歴が一直線になってわかりやすい!」のは明確な利益だよ。 実際にわかりやすいんだから。 さて本当の問題は「FF only の masterマージ」といったわけだが、 no-ffのmasterへのマージ。これでも履歴は一直線に出来る。 履歴は一直線だが、no-ffを使っているから、この場合は問題ないだろう?
- 268 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:40:59.32 ID:jiz/CQ6q]
- >>267
> 「履歴が一直線になってわかりやすい!」のは明確な利益だよ。 > 実際にわかりやすいんだから。 うーん、FFマージせずに、必要に応じてno-FFしてfirst-parentで要約したほうが 直線的なだけでなく情報が圧縮されてわかりやすいと主張しているんだが、 君には伝わってないように思えるな。 >>254 をもう一回読んでみてくれないか?
- 269 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:43:19.24 ID:EYu9TTok]
- >>266
> それで、このライブラリでは何の利点があって FF only で master マージしてるんだってばよ? 俺がそのライブラリの開発者じゃないからしらんけど、 no-ffにする理由がないからだろ? トピックブランチでは複数の修正を行わない。 トピックブランチでは必ず一つの修正のみを行う。 大きな修正はせずに小さく修正する。小さな修正を連続させて開発する。 そうするとトピックブランチに含まれるコミットは必然的に一つになる。 もしくはトピックブランチの内容は必ずsquashしてからマージすると考えてもいい。 そうする--first-parentでまとめてみたいと思っていたログは masterへマージする段階で単に一つのコミットにまとまるだけの話。 逆にまとまって見れれば十分なわけでそれを分割する必要あるの? と考えていると推測。 俺は小さな修正の連続での開発にしきれないから トピックブランチに複数の修正を入れるけどね。
- 270 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:51:05.11 ID:jiz/CQ6q]
- >>269
> > それで、このライブラリでは何の利点があって FF only で master マージしてるんだってばよ? > 俺がそのライブラリの開発者じゃないからしらんけど、 ちゃんと説明できないならこのライブラリの例は無視するよ。 # いったいどこからどこまでがお前の主張なの? 俺もトピックでは複数の修正をよく入れるし、 意味のある単位で分割してる(つもりだ)からsquashなんてしたくない。
- 271 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:53:09.53 ID:EYu9TTok]
- >>270
説明してるじゃねーか。 ライブラリの作者じゃないんだから 作者の本当の考えはわからん。 それは当たり前。 それとは別に推測で ちゃんと説明してる。
- 272 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:59:55.32 ID:EYu9TTok]
- >>270
> 意味のある単位で分割してる(つもりだ)からsquashなんてしたくない。 意味のある単位で分割してるのであれば、 それを一つづつのコミットに分割して、それぞれマージすることは可能だよね? また一つのコミットだけのトピックブランチは作ったこと無いの? コミット一つに対応する、マージコミットを作るなんて無駄だしなくてよい。 (rebase・・・かどうかは実は関係なくて)して FF-onlyでmasterにマージするってのは、単にコミットを 一つづつマージしていると考えれば良い。 大きな修正を一度にするのではなくて、 小さな修正の繰り返しで開発するとこうなるんだよ。
- 273 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:07:40.73 ID:EYu9TTok]
- ちなみに俺が反論している所を明確にしておくと、
「履歴が一直線になってわかりやすい!」というのが メリットではないような言い方をしている点。 トピックブランチに複数のコミットが含まれている時に それをno-ffでマージというのは俺もしている。 履歴が多少一直線になっていなくても、ちょっと見づらいだけだから目をつぶる。 目をつぶるのであって、履歴は一直線になっていたほうがわかりやすい。これは事実。 rebaseなんてコンフリクトが起きなければ大した作業ではないし、 とある誰かが要求しているようにno-ffでのmasterへのマージはちゃんとするんだから 「わかりやすくするためにrebaseで履歴を一直線に直してもいいだろう?」ということ。 (>>261はあくまでFFでmasterにマージするのも 小さな修正の繰り返しで開発できてるならありという例であげただけ)
- 274 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:14:28.12 ID:jobIXRFq]
- トピックブランチのコミットが2個以上なら
マージはどうあれno-ffでやるべきだろ。 ffでマージしちゃったら、 あとでそれらコミットがなんのトピックに属していたのか わかりにくくなるんだから。 そういうケースまで一直線のほうがいいとか言うのはアホ。相手にするだけ無駄。
- 275 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:18:53.63 ID:EYu9TTok]
- 連投するが、俺がいいたいのは
・masterへのマージするときはno-ffをつけろ。(念を押すがmasterへのマージの話) ・コンフリクトが起きるようなmasterへのマージは禁止。 ・rebaseはしたほうがベター。なぜベターなのかというと履歴が一直線になって見やすいから。 ということ この結果、no-ffでmasterへマージする前に「rebaseするのは一般的なオペレーション」になる。 そしてrebaseしていなくても、コンフリクトが起きなければmasterへno-ffマージしてよいので そうするとマージ前のrebaseの有無は関係なくて単に「masterへはno-ffマージしろ」って話になる。
- 276 名前:デフォルトの名無しさん mailto: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も可。
- 277 名前:デフォルトの名無しさん mailto: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 を見るのと、どっちがわかりやすいの?ってこと。
- 278 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:15:08.80 ID:jiz/CQ6q]
- ブラウザによっては結構ずれるな。わかんなきゃ無視してくれ。
- 279 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:24:55.80 ID:VGBInRA4]
- 2.0からデフォルトでFF onlyになるのは知ってるよね君たち
どうしてこうなったのかもちろん議論されてるのも知ってるよね
- 280 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:25:46.52 ID:ABe1tyQZ]
- これもうわかんねえな(バグったときの修正範囲が)
- 281 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:30:04.67 ID:qq5sN0hH]
- >履歴は一直線になっていたほうがわかりやすい。これは事実。
一見わかりやすい気がするっていうのと、意味的にわかりやすいというのは別だと思うのだがどうだろう svn のように時系列にコミットが一直線に並んでるのはわかりやすいか? rebase → ff マージでトピック内の全コミットをフラットにしたのがわかりやすいか? rebase → squash マージだと master のコミットグラフは一見綺麗になるかもしれんが実態はちょっとアレだし そしてfirst-parentオプションつければたとえ一直線でなくとも意味的に見やすいログが手に入るんだろう
- 282 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:44:21.18 ID:jiz/CQ6q]
- >>279
pull.ff 設定が可能になったのは確かだし、単に上流を追従するだけでその上で作業しないリポジトリなら ff-onlyのほうが嬉しいのは確かだが、今議論してる内容とは前提が全然違うぞ。 # rc1だがmergeもpullもデフォルトでFF onlyな動作じゃないのを確認しちまったじゃねーか。
- 283 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:45:53.07 ID:jiz/CQ6q]
- >>281
そうそう。 ちなみに gitk --first-parent すると要約されたコミットグラフは事実上一直線なのがわかると思う。
- 284 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 19:02:08.02 ID:ABe1tyQZ]
- ベースブランチの状態が多いイコール検証箇所も多くなって面倒だからそうならないようコミットも最小限にしたほうがいいんじゃないの
- 285 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 19:47:52.24 ID:6KBRCzBr]
- >>223
というわけで、実験してみた。 ブランチ削除しても履歴はのこるんですね。 そのツリーがごっそりなるものだと思ってた。 マージにしても、前やったときは、強制的に変なコミットログ追加されて気色わるかったきがしたけど、今やると普通だな。 僕含めまわりもまだ不慣れなので、FF縛りは、外せないけどマージするだけなら問題なさそう。
- 286 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 19:56:50.37 ID:EYu9TTok]
- > ちなみに gitk --first-parent すると要約されたコミットグラフは事実上一直線なのがわかると思う。
ね? 一直線は見やすいでしょ? 常にに--first-parentするわけじゃないので、 しなくても一直線になったほうが嬉しいよ。
- 287 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 19:58:40.00 ID:jiz/CQ6q]
- >>285
報告ありがとう。 今後もGitに慣れるにしたがって、見え方も変わってくるかもしれないな。 周りも不慣れということで大変だと思うが、お前のプロジェクトのベストプラクティス確立にむけて頑張ってくれ。 グッドラック。
- 288 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 20:21:45.22 ID:jobIXRFq]
- 一直線バカは救いようのないバカだな
- 289 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 23:30:04.09 ID:+oyspTjV]
- 「履歴が一直線になってわかりやすい!」かどうかって、もはやコミットの順序というものにどういう意味があるかどうかという意味論なのだから、
ケースバイケースでしかないだろう。 アプリケーションの見た目を変更するときにAプランとBプラン、どっちもやってみて、Aプランから20%、Bプランから80%採用、なんてときは履歴が一直線になってないほうがいいだろうし。 (そんな変更をマージコミット一つで済ませてしまうのか、という問題はあるが) 結局、履歴が一直線になってたほうが良い場合もあるし、良くない場合もあるというだけだろ。どっちかが明らかに正しいというもんじゃない。
- 290 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 00:35:08.42 ID:UGHSixxv]
- 一直線が良いケースが挙げられてないけどな
- 291 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 01:11:54.22 ID:pWom3qZR]
- 一直線: 見えを貼りたいだけのバカ。俺はまっすぐ順調に開発をしてきたというアピールがしたい
- 292 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 01:29:11.37 ID:Gbwo+6jG]
- 東大一直線
- 293 名前:デフォルトの名無しさん [2014/04/30(水) 05:04:21.07 ID:mdKtpEfX]
- 意味不明なエラーでpush不可能になった
remote: FATAL: WM refs/heads/*** **** **** DENIED by fallthru remote: error: hook declined to update refs/heads/*** git reset --hard origin/upstream_worktree して差分再適用してやり直したら通った こんな意味不明なことが多発するのがgit 現実的には使い物にならないね
- 294 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 08:30:44.87 ID:1vNQkGgC]
- hook declined
ってかいてあんじゃん
- 295 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 11:02:23.25 ID:4gXDKzV2]
- 書き込み時刻を見ろ 察してやれ
- 296 名前:デフォルトの名無しさん [2014/04/30(水) 14:42:09.85 ID:mdKtpEfX]
- dis発言に対してはただ叩くだけ
それも論理的に叩けないから人格攻撃に走るしかない 情けない奴らだよな
- 297 名前:デフォルトの名無しさん [2014/04/30(水) 14:48:31.80 ID:mdKtpEfX]
- 別リポジトリで他人による大量の更新があって
半端にマージした挙げ句途中でこけて 半端にステージングした状態になり 結局 git reset --hard origin/upstream_worktree するしかなくなった ここまで致命的に腐ってると使い物になるならない以前の次元だね
- 298 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 14:55:49.07 ID:nKoANYQ+]
- またいつものコンフリクト恐怖症の人か
- 299 名前:デフォルトの名無しさん [2014/04/30(水) 18:26:55.40 ID:mdKtpEfX]
- コンフリクト解消で済めばいいんだが腐ってるから済まないんだよね
- 300 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 18:51:13.84 ID:h9gMUOtr]
- なるほど、コンフリクトの解消の仕方が分からないから
コンフリクト恐怖症になってしまったのか
- 301 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 18:51:51.42 ID:rHgIYikH]
- Aリポジトリでもらったpull requestを
Bリポジトリに反映する方法を教えてください
- 302 名前:デフォルトの名無しさん [2014/04/30(水) 18:59:19.90 ID:1L5gAVQy]
- ところで、大声でジットと呼ぶ人がいて困ってるんだ
ディスクトップパソコンみたいな 職場がSubversion教に汚染されてるので仕方ないな
- 303 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 19:12:36.93 ID:ZY5HChQC]
- じっと我慢汁
- 304 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 19:50:56.80 ID:fWhizGrM]
- レーダーデスクカラオケ
- 305 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 19:56:34.41 ID:EonfyA0Y]
- ギットギトにしてやんよ
- 306 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 20:25:07.89 ID:WuyiDL68]
- >>297
> 半端にマージした挙げ句途中でこけて (コンフリクトしたときのデフォルトの動作だ・・・) > 半端にステージングした状態になり (コンフリクトしたときのデフォルトの動作だ・・・) > 結局 > git reset --hard origin/upstream_worktree > するしかなくなった (コンフリクト解消できなかったなら git merge --abort すればよかったんじゃ・・・)
- 307 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 21:19:26.86 ID:livyiFPX]
- >>297
> git reset --hard origin/upstream_worktree わろたwwww え? あんた自分の作業けしちゃったの?www 馬鹿だなぁ。 gitはsubversionと違ってmergeやrebaseの途中で コンフリクト起きてごちゃごちゃなっても、 merge/rebase作業をキャンセルして簡単に戻せるのにwww 情けだ、ヒントをあげよう。 mergeしてるってことはコミットしてるってこと。 そのコミットIDはgit reflogすればわかるので あとはそのコミットIDをチェックアウトすれば前の状態に戻せる。 gitはコミットしたものが消えることはない。 gitって安全だよねー
- 308 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 21:28:01.99 ID:upmIhAH5]
- >>217
プロジェクト名に言語が入ってないとなんの言語で作ってるのかわからないじゃん 言語を変えたらリポジトリ名を変更すればいいじゃん
- 309 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 21:58:49.74 ID:Y0BKcERE]
- >>308
悪いことは言わないから足を洗え。
- 310 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 22:12:33.53 ID:livyiFPX]
- そういやgithubってプロジェクトで使用している言語がわかるようになったよね。
gitだと、カラフルなバーをクリックすると以下のように表示される。 C 45.5% Shell 34.6% Perl 9.6% JavaScript 3.4% Python 2.9% Tcl 2.6% Other 1.4% >>308 で、このようにリポジトリにプロジェクト名入れなくても githubならわかるし、gitのように複数言語使ってる時どうすんの? そんなことも考えれずに、言語名にこだわるなら、 センス無いなとしか言えないなw
- 311 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 22:41:41.21 ID:rUdHCEgh]
- githubだけの視野で語られても
- 312 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 22:42:55.54 ID:livyiFPX]
- github以外のプロジェクトでも
複数言語でアプリ作るのは一般的だけど?w
- 313 名前:デフォルトの名無しさん [2014/04/30(水) 23:26:12.17 ID:mdKtpEfX]
- 307は本当に馬鹿なんだなぁ
管理されてないファイルがreset --hardの対象にならないことは以前に確認済みだから関係ないし コミットしたものはすぐに権限持ちに差分送ってるし コンフリクトは元々未来分の作業は既に入っててそこからコメント消す程度 俺が泣かなくて残念だったな
- 314 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 23:51:07.78 ID:1vNQkGgC]
- 結局gitのおかげで無事でした
めでたしめでたし
- 315 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 00:28:44.24 ID:WukXr8jq]
- >>312
プロジェクトを1つのディレクトリに詰め込むタイプですか?
- 316 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 09:28:45.91 ID:PzUwUPDQ]
- >>313
意味がわからないなあ コミットしたものを権限持ちに既に送ってあるとしたら、 お前が上流からマージしようとしたブランチは一体何なの? お前がコミットしたものを含んでいないブランチ?
- 317 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 11:07:25.45 ID:PVO7jj2i]
- >>315
なんでそんな発想が出てくるんだ? (w
- 318 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 11:24:48.42 ID:/DVUm5po]
- おれはさ
php/wiki php/cms php/mailform っていうふうに管理してるの 他の言語で同じ物を作ることもあるから ruby/wiki みたいに言語をネームスペースにすると管理が楽なんだよ
- 319 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 17:12:30.25 ID:PzUwUPDQ]
- >>318
それとGitと何の関係があるんだ?
- 320 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 17:20:29.51 ID:U31MyfYF]
- Gitはソースコードを管理するわけだからプロジェクトと関係あるだろ
C:/appData/User/toyohiko/マイドキュメント/mycode/php/wiki これを外部のリポジトリ管理サービスに突っ込むときのリポジトリ名はphp-wiki
- 321 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 17:24:28.79 ID:n23f7Uie]
- 名前付けのポリシーとか別に好きにすればいいと思う。
- 322 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 17:44:02.84 ID:PzUwUPDQ]
- >>320
そんなもん上流のリポジトリ管理方針次第だ 例えば俺はandroidのapp01プロジェクトを ssh://remotehost/repo/android/app01.git とかに格納してる
- 323 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 17:52:02.03 ID:U31MyfYF]
- >>310
複数言語使っているときは C:/appData/User/toyohiko/マイドキュメント/mycode/other/wiki というようにして言語名のフォルダにいれず名前空間に言語名を付けない
- 324 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 18:01:12.45 ID:n23f7Uie]
- もう自由にタグ付けできる自分用プロジェクト管理ツール使っちゃえよ。
- 325 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 18:13:02.15 ID:ZgnY/tZG]
- >>318
コードネームつければいい。 phpは犬の種類、rubyは猫の種類とか原則を持たせても良い。
- 326 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 19:05:29.45 ID:PzUwUPDQ]
- >>323
githubがリポジトリを「https://github.com/ユーザー名/リポジトリ名」で管理してるのは githubの管理方針であって、gitとは直接関係無いということが理解できた?トヨヒコくん
- 327 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 19:26:56.62 ID:3NSQaEE2]
- だからさGitHubだけで語るな
- 328 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 22:47:07.56 ID:dcOXu/fE]
- 確かにSubversion使ってたときは一つのリポジトリに色々入れてたけど(そしてSubversionを適当に使う限りではそれで事足りてた)、
Gitは部分チェックアウトも出来ないしコミットもブランチも困ることだらけだからプロジェクトごとにリポジトリ分けるのが当然だよな。 自分もGit初心者の頃はSubversionと比較しちゃって部分チェックアウトが出来ないのが不便だのsvn:externalsと完璧に同等のものがないのが困るだの言ってたけど、 そのときGitユーザーから「Subversionとは思想が違うから比較するのは意味が無い」的なことを言われたけど、今はまさにそのとおりだと思うよ。 とりあえずSubversionでややこしい開発はしたくないね、もう。
- 329 名前:デフォルトの名無しさん [2014/05/02(金) 03:41:26.83 ID:ZGvM0amq]
- >>316 pullするだけでその状態になることすらわからないとかお前本当に馬鹿だな
|

|