[過去ログ]
Git 18 (1002レス)
Git 18 http://mevius.5ch.net/test/read.cgi/tech/1650651945/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
1: デフォルトの名無しさん (ワッチョイ 9ce4-E6ke) [] 2022/04/23(土) 03:25:45.27 ID:HOOXt/T30 ソースコード管理を行う分散型バージョン管理システム、Gitについて語ろう。 Git - Fast Version Control System http://git-scm.com/ ◆関連サイト Pro Git - Table of Contents http://git-scm.com/book/ja Git入門 http://www8.atwiki.jp/git_jp/ ◆前スレ Git 16©2ch.net https://mevius.5ch.net/test/read.cgi/tech/1502726047/ Git 17 https://mevius.5ch.net/test/read.cgi/tech/1599016710/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT w
as configured http://mevius.5ch.net/test/read.cgi/tech/1650651945/1
876: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 17:58:44.17 ID:646uiMLL0 >>874 ああコミットメッセージについては考えてなかったが、 俺ならそのままぐちゃっと貼り付けるけど。 つまり、 ・commit 1「aaa を追加」 aaa ・commit 3「bbb を追加」「bbb を ccc に置き換えた」 aaa ccc になる。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/876
877: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 18:03:19.55 ID:646uiMLL0 >>875 親が複数あるだけの単方向リストだよ。 まあこれを単方向リストと呼ぶかは微妙だから、ツリーと言った方が通じたか? ツリーが複数重なり合った状態になってるだけだよ。 単線の A<-B<-C なら A<-C になる。これは自明だよな。 マージの場合、(BがADのマージ結果ね) A<-B<-C D<-| を A<-C D<-| にする。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/877
878: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:18:30.70 ID:5Oe/8sYX0 >>876 ようやく理解したか。 だからお前がやってるのはただのバックアップを取ってるだけだっていってんだよ バージョン管理というのは何をどう変えたかという変化を記録するものだ スナップショットじゃねーんだよ、あーほ http://mevius.5ch.net/test/read.cgi/tech/1650651945/878
879: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:19:21.47 ID:5Oe/8sYX0 >>876 bbbの話がないのだから、 書き間違えなのか全く区別がつかない バグコミットメッセージだな http://mevius.5ch.net/test/read.cgi/tech/1650651945/879
880: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:21:44.83 ID:5Oe/8sYX0 >>873 > ただそれ以前に、俺は既に言ったとおり「記録されてないほうが問題」とするので、 だからお前のテキストエディタでの変更内容を全部記録するって言ってるんだろ? ファイルを保存するたびにコミットするんだろお前は? バージョン管理で記録するのはソースコードの修正履歴であって お前個人の作業履歴じゃねーんだよ 使い物にならないゴミコミットを作るな http://mevius.5ch.net/test/read.cgi/tech/1650651945/880
881: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 18:26:48.37 ID:646uiMLL0 >>878 ああ履歴についての認識が違うんだな。了解した。 履歴は、 俺: スナップショット=「点」の並び 君: 変更した線の並びで、それはcommitメッセージに現れる。 それだと、commitメッセージが間違ってる場合はどうしようもなくなるだろ。 あくまでソースコードが重要で、どこをどう変えたかはdiff取れば済むだけの話、 commitメッセージなんて目安に過ぎないんだよ。 Gitもこちらの立場に近く、VCSとしては珍しく(と聞いているが俺は
そこまで詳しくないが) 差分ではなく本体を記録するだろ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/881
882: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:31:31.07 ID:5Oe/8sYX0 >>881 > 履歴は、 > 俺: スナップショット=「点」の並び だから、それはバックアップで言うって最初から言ってるだろ お前が完全に間違ってるんだよ > それだと、commitメッセージが間違ってる場合はどうしようもなくなるだろ。 修正しろよ。それが出来るように作られているだろ > commitメッセージなんて目安に過ぎないんだよ。 はっw バージョン管理の素人が。 コミットメッセージの重要性を知らない時点で終わってるよ
http://mevius.5ch.net/test/read.cgi/tech/1650651945/882
883: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 18:32:44.57 ID:646uiMLL0 >>880 > ファイルを保存するたびにコミットするんだろお前は? そこまではしないが、1日10回とか平気ですることもあるし、それが問題だとも思わない。 この辺はポリシーだし、好きなようにすればいいと思うがね。 間違いなく言えるのは、俺は美しいソースコードを目指しているのであって、 美しいコミット履歴を目指しているわけではないんだよ。 そしてコミット履歴が過剰なら、落とせばいいだけだろ、という話。 無い履歴からは生成する
ことは不可能なのだから、大きすぎる粒度より、小さすぎる粒度の方がいいに決まってる。 所詮commitメッセージなんて当てにならないし、diffが取れれば全く問題ない。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/883
884: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:32:45.04 ID:5Oe/8sYX0 > Gitもこちらの立場に近く、VCSとしては珍しく(と聞いているが俺はそこまで詳しくないが) > 差分ではなく本体を記録するだろ。 だから最初からバージョン管理は差分を記録するものであり gitの優れた点が、発想の転換で 本体を記録することで差分を表現することにした点なんだろ 実装の話とごっちゃにするな そういうところが技術的に未熟なんだよ http://mevius.5ch.net/test/read.cgi/tech/1650651945/884
885: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:33:34.01 ID:5Oe/8sYX0 >>883 > そこまではしないが、1日10回とか平気ですることもあるし、それが問題だとも思わない。 そりゃお前が素人だから問題であることに気づいてないだけ 誰もやってないからね > この辺はポリシーだし、好きなようにすればいいと思うがね。 お前が未熟だから反論できずにポリシーってことにしようとしてる http://mevius.5ch.net/test/read.cgi/tech/1650651945/885
886: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 18:33:50.55 ID:zDjINlW+0 >>877 分散バージョン管理ではですね、リポジトリのコピーがばらばらに複数存在することが前提なので、 あるひとつのリポジトリのコミット履歴が A<-B<-C で、他のリポジトリではこれが A<-C になっているという状況は不味いんですよ なのでGitではそれができないようにデータ構造が設計されています http://mevius.5ch.net/test/read.cgi/tech/1650651945/886
887: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:34:49.14 ID:5Oe/8sYX0 > 間違いなく言えるのは、俺は美しいソースコードを目指しているのであって、 > 美しいコミット履歴を目指しているわけではないんだよ。 コミット履歴は「使うもの」だって分かってないようだな 一部のコミットだけ抜き取って 他のブランチに組み込む 使うものだ お前はただ見れればいいと思ってる バージョン管理を理解してない http://mevius.5ch.net/test/read.cgi/tech/1650651945/887
888: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:35:50.16 ID:5Oe/8sYX0 >>883 > 所詮commitメッセージなんて当てにならないし、diffが取れれば全く問題ない。 お前が作るコミットがクソだから、使いものにならなくなっているだけだなw http://mevius.5ch.net/test/read.cgi/tech/1650651945/888
889: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 18:39:58.47 ID:646uiMLL0 >>882 まあ君と仕事することは無さそうだから別に問題ないけど、 > 修正しろよ。それが出来るように作られているだろ コミットメッセージをいくら修正したところでそもそも意味無いんだよ。 管理してるのはメッセージじゃなくてソースコードなんだから。 それで、重要なコメントはソースコード上に書いてるから、diff取れれば十分なんだよ。 コミットメッセージは、あくまでGit上から探し出すラベルでしかなくて、何をやったかはdiffで見る
し、それ以外にないよ。 > はっw バージョン管理の素人が。 > コミットメッセージの重要性を知らない時点で終わってるよ まあ俺はGitの達人になりたいわけでもないんで、これで問題ないよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/889
890: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:40:40.33 ID:5Oe/8sYX0 > コミットメッセージをいくら修正したところでそもそも意味無いんだよ。 それはお前だけの感想ですねw http://mevius.5ch.net/test/read.cgi/tech/1650651945/890
891: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:41:08.69 ID:5Oe/8sYX0 > まあ俺はGitの達人になりたいわけでもないんで、これで問題ないよ。 バージョン管理の素人だって言ってる お前、他の人と一緒に仕事ができないよw http://mevius.5ch.net/test/read.cgi/tech/1650651945/891
892: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:41:43.46 ID:5Oe/8sYX0 > コミットメッセージは、あくまでGit上から探し出すラベルでしかなくて、何をやったかはdiffで見るし、それ以外にないよ。 途中を抜いといて、何をやったかなんてわかるわけ無いだろwww http://mevius.5ch.net/test/read.cgi/tech/1650651945/892
893: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:43:50.28 ID:5Oe/8sYX0 >>889 こうやってコミット履歴をちゃんと見れて なんの変更をしたのかわかるようになるまで頑張れよ https://github.com/freebsd/freebsd-src/commits お前のコミットは汚すぎて 使い物にならんのだわ http://mevius.5ch.net/test/read.cgi/tech/1650651945/893
894: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 18:44:39.97 ID:646uiMLL0 >>884 > gitの優れた点が、発想の転換で > 本体を記録することで差分を表現することにした点なんだろ これは違う。 というかね、どっちを記録したところで、正常に動いていればどのみち任意の履歴を取り出せるから関係ないんだ。 ただ、ファイルシステム等がぶっ壊れて、断片的にしか取り出せなくなったときに、Gitみたいに本体を記録してる方が断然強い。 だから基本は「一番大事なもの」で記録するようにしなければいけない、という観
点だったのだけど、 まあこれはフォールトトレラントにしろという話で、ちょっと蛇足ではあったね。 あまり関係ないからこの話は終わりで。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/894
895: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:45:34.09 ID:5Oe/8sYX0 > これは違う。 だーかーら、素人のお前の意見なんか聞いてない http://mevius.5ch.net/test/read.cgi/tech/1650651945/895
896: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:50:58.69 ID:5Oe/8sYX0 > ただ、ファイルシステム等がぶっ壊れて、断片的にしか取り出せなくなったときに、 gitは速度のためにスナップショットにしてると書いています https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E5%9F%BA%E6%9C%AC http://mevius.5ch.net/test/read.cgi/tech/1650651945/896
897: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 18:53:08.44 ID:5Oe/8sYX0 https://www.techpit.jp/courses/33/curriculums/34/sections/286/parts/965 なぜスナップショットとして記録するのか スナップショットとして記録することで、複数人で開発する時のスピードを上げることができます。 詳しくは後ほど解説しますが、複数人での開発の際、並行して開発できるよう、 Gitではブランチというものを切って、バージョンを枝分かれさせて開発していきます。 このブランチでバージョンを枝分かれさせる際や、ブランチを統合(
マージ)する際にスナップショットだと非常に作業が速くできます。 Gitがデータを差分というかたちで持っていると、ブランチを切ってマージする時に差分をいちいち計算しなければなりません。 しかしスナップショットで保存しておけば、差分の計算をしなくて済む分、とても速くブランチを切ったりマージできるようになります。 ちなみに、Git以前のバージョン管理ツールの多くは差分としてデータを保存していて、ブランチを切るのに大変時間がかかっていました。 大規模なプロジェクトになると数十秒かかったりすることもありました。 Gitだとこの作
業が一瞬でできます。こういった事情があって、Linuxの作者のリーナス・トーバルズは 当時、大規模開発であったLinuxカーネル開発のバージョン管理システムを自作しました。これがGitのスタートです。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/897
898: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 18:56:37.48 ID:646uiMLL0 >>886 ああなるほど、ブロックチェーンよろしく親のhashデータも自分のhashに入ってるのか。 しかしそれは、改竄がばれるだけで、リンクを繋ぎ直すことが出来ないわけではないね。 というかね、それは本体ツリーの話で、 余分なcommitはrepoから消せ!とする君らにとっては問題だが、 俺みたいに、スカスカのINDEXでbranchを再構成するのはその場合にも全く問題ないはず。 ところで、 実は今もbranchの実体がどこにあるのか見えてない。 見
る限り .git/logs/refs/heads/各branchにしかなさそうなのだけど、ここかね? これだと毎回reflogを動的に解釈することになるが。 実装としておかしくはないが、普通はこうはしないので、ちょっと不可解だ。 なおオブジェクトツリーにはbranchのデータは無く、branchは各オブジェクトへのリンクの入った配列だと見てる。 だからシャローコピーでしかなく、後からでもいくらでも作れるだろ、という話。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/898
899: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 19:03:07.94 ID:5Oe/8sYX0 > 後からでもいくらでも作れるだろ、という話。 だから速度重視だって言ってる http://mevius.5ch.net/test/read.cgi/tech/1650651945/899
900: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 19:03:54.30 ID:5Oe/8sYX0 >>898 君、ほんと知らないなら黙ってたほうがいいよ 恥ずかしいだけだから http://mevius.5ch.net/test/read.cgi/tech/1650651945/900
901: デフォルトの名無しさん (ワッチョイ 6914-pSqO) [sage] 2022/11/05(土) 19:05:11.02 ID:5Oe/8sYX0 >>898 > 余分なcommitはrepoから消せ!とする君らにとっては問題だが、 余分なコミットじゃなくて、 コミットとして使えないものにする バグコミットを消せと言ってるだけ http://mevius.5ch.net/test/read.cgi/tech/1650651945/901
902: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 19:21:59.71 ID:zDjINlW+0 >>898 まあもう面倒臭くなってきたので全部説明しちゃうが 結果的に親のhashが自分のhashに含まれることになるのだけど、実際には親のhashは自分のコミットオブジェクトに含まれている その自分のコミットオブジェクトから計算して求めるのが自分のhash 親の祖先に変更があれば自分のコミットオブジェクトの作り直しになってhashも計算し直すことになりそれはもう自分ではない ブランチの実体はコミットオブジェクトのハッシュひとつだけ それ
で事足りる ず〜〜〜と思っているんだがどう考えてもお前のブランチへの理解はオカシイ 内部的な構造の話ではなくてユーザとして使う上でも問題があるような酷い理解に見える だから >>815 みたいな謎発言がでてくる DBのINDEXみたいなもの?とかの謎解釈で突き進まれてもついていけない http://mevius.5ch.net/test/read.cgi/tech/1650651945/902
903: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 20:06:13.91 ID:646uiMLL0 >>902 前半の内容は知ってるし、そのつもりで898を書いてる。 それはtutorial2に書いてあったから。 そこのhash値も混ぜてるかどうかは関知してなかっただけ。 ちなみにtutorlal2には「ここのhash値とは違うから、各自のhash値をコピペしてね」 と書いてあるが、実際は同じhash値が生成される。 だからどこまで混ぜ込んでるのかよくわからなった。 名前と時間も混ぜ込んでるぜ!と書いてあるが、どう見てもそうじゃない。 ただまあ、親ハッシ
ュは混ぜ込んでるのは理解した。 > ブランチの実体はコミットオブジェクトのハッシュひとつだけ それは俺の最初の理解、「点」なんだよ。815の通り。エントリポイントだけ、というわけだろ。 ただそれだと、オブジェクトツリーは辿れるが、 master @{1}で「master branch上の」一つ前、という経路情報に変換することが出来ない。 つまり、HEAD~! != @{1} とするには、何らかの情報が何処かに必要なんだよ。 そして今のところ、reflogしかないので、そこを動的に辿ってるのか?みたいなことになってる。 だから「reflogを偽造」(843)なんて話になる
。 言い換えると、エントリポイントからだと、親は辿れるが、 親が複数現れたとき(マージ)に、どちらから来たのか分からないのと、 fast-forwardマージでオブジェクトは一本道でもbranch上では飛ばしている場合に、その情報がないんだよ。 これはどこに格納されてるんだ? http://mevius.5ch.net/test/read.cgi/tech/1650651945/903
904: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 20:19:07.74 ID:646uiMLL0 すまん、分かると思うが、 HEAD~1 != @{1} http://mevius.5ch.net/test/read.cgi/tech/1650651945/904
905: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 20:45:45.41 ID:zDjINlW+0 >>903 reflogのhashは、HEADが変わるような操作をしたときに、その操作の結果のHEADのhashを追記していくだけのログだよ このログがその後のgitの動作に影響を与えることはない HEAD@{0}が常に最新の操作に対応したhashに更新される だからたとえばmasterとfirstという二つのブランチを交互にcheckoutすればこんな感じになる $ git reflog 0956cde (HEAD -> first) HEAD@{0}: checkout: moving from master to first be7e7d7 (master) HEAD
@{1}: checkout: moving from first to master 0956cde (HEAD -> first) HEAD@{2}: checkout: moving from master to first be7e7d7 (master) HEAD@{3}: checkout: moving from first to master 0956cde (HEAD -> first) HEAD@{4}: checkout: moving from master to first be7e7d7 (master) HEAD@{5}: checkout: moving from first to master 最後にcheckout firstしたので HEAD -> first になってる http://mevius.5ch.net/test/read.cgi/tech/1650651945/905
906: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 20:59:53.75 ID:646uiMLL0 >>905 reflogがその形式なのは知ってる。 ただ、頭のポイントだけだと、903で言ったとおり、経路情報にならないだろ。 例えば、815の場合、再記するが、 impl5@feature5, merged to develop and master, add tag of "Version1". impl4@feathre4 impl3@feature3 impl2@feature2, merged to develop, add tag of "Version0". impl1@feathre1 impl0@feature0 initial@master, develop これで、master上で git diff @{1}
では、initial commit との差分 git diff HEAD~1 では、 impl4との差分が出るんだよ。 これが、master->impl5のエントリポイント情報だけだと出来ないから、 maseterはinitial->impl5に移動しましたよ、という経路情報が何処かに必要なんだ。 それで、git reflog では、 どこにswitchして、commit して、mergeした、という履歴が全部出るから、 (多分だが各HEADのreflogを全てcatして時系列にソートしてる) 解釈すれば可能ではあるけど、そんな面倒なことするか?普通はstaticにシャローコピーだろ、というのと、 reflog は gc されるので、
reflogを頼りにする実装は不適切だし、 俺的にbranchを消したり復活させたりする使い方はヤバそうなんだよ。 だからその辺を確認してる。 それで、後で任意のオブジェクト群でbranchを作れるのなら、この辺心配ないのだけど、そうではなさそうだし。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/906
907: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 21:04:51.93 ID:646uiMLL0 ちなみに、843の記事では、Git内のcontrib内のスクリプトが、 branchをreflogを参考に復活させるらしいので、reflog内の情報で足りてはいるらしい。 確かに目で見た限りそうだが、 でもそれだとreflogをgcするのは割と狂気の沙汰だから、おかしいよなーと思ってて。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/907
908: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 21:06:47.08 ID:646uiMLL0 ごめん、書き方が悪かった。 907は、gc対象となるreflogを本番情報として持つのは狂気の沙汰だなーということ。 復活させるときにそこにしか手がかりがないのは仕方ないとして、 生きてるbranchは普通はツリー情報をstaticに持ってるはずだが、見あたらないんだよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/908
909: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 21:15:14.62 ID:zDjINlW+0 >>906 そのリポジトリがどういう構造になっているかわけわからん git show-branch してみろ http://mevius.5ch.net/test/read.cgi/tech/1650651945/909
910: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 21:26:43.61 ID:646uiMLL0 >>909 すまぬ、確かに今見てればちょっとおかしい。 もう一度作るから30分ほどお待ちを。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/910
911: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 21:51:56.84 ID:646uiMLL0 >>909 結果 $ git show-branch ! [develop] impl5 * [master] impl5 -- +* [develop] impl5 $ git branch develop * master http://mevius.5ch.net/test/read.cgi/tech/1650651945/911
912: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 21:52:24.93 ID:646uiMLL0 >>909 $ git diff HEAD~1 diff --git a/test.txt b/test.txt index 3585d98..bbddc42 100644 --- a/test.txt +++ b/test.txt @@ -4,3 +4,4 @@ impl1 impl2 impl3 impl4 +impl5 $ git diff @{1} diff --git a/test.txt b/test.txt index e79c5e8..bbddc42 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,7 @@ initial +impl0 +impl1 +impl2 +impl3 +impl4 +impl5 http://mevius.5ch.net/test/read.cgi/tech/1650651945/912
913: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 21:53:21.88 ID:646uiMLL0 >>909 再現コード #!/bin/bash -x # git init echo 'initial' > test.txt git add test.txt git commit -m 'initial' git branch develop for (( i=0 ; i<6 ; i++ )); do git branch feature$i git switch feature$i echo "impl"$i >> test.txt git add test.txt git commit -m "impl"$i git switch develop git merge feature$i git branch -d feature$i done git switch master git merge develop http
://mevius.5ch.net/test/read.cgi/tech/1650651945/913
914: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 22:01:15.70 ID:646uiMLL0 >>909 ちなreflog $ git reflog 1a804d9 (HEAD -> master, develop) HEAD@{0}: merge develop: Fast-forward b0325fc HEAD@{1}: checkout: moving from develop to master 1a804d9 (HEAD -> master, develop) HEAD@{2}: merge feature5: Fast-forward ba4e962 HEAD@{3}: checkout: moving from feature5 to develop 1a804d9 (HEAD -> master, develop) HEAD@{4}: commit: impl5 ba4e962 HEAD@{5}: checkout: moving from develop to
feature5 ba4e962 HEAD@{6}: merge feature4: Fast-forward a32e11d HEAD@{7}: checkout: moving from feature4 to develop ba4e962 HEAD@{8}: commit: impl4 a32e11d HEAD@{9}: checkout: moving from develop to feature4 a32e11d HEAD@{10}: merge feature3: Fast-forward 8d9924f HEAD@{11}: checkout: moving from feature3 to develop a32e11d HEAD@{12}: commit: impl3 8d9924f HEAD@{13}: checkout: moving from develop to feature3 8d9924f HEAD@{14}: merge feature2: Fast-forward 0f78740 HEAD@{15}: checkout: moving from feature2 to
develop 8d9924f HEAD@{16}: commit: impl2 0f78740 HEAD@{17}: checkout: moving from develop to feature2 0f78740 HEAD@{18}: merge feature1: Fast-forward 47792a3 HEAD@{19}: checkout: moving from feature1 to develop 0f78740 HEAD@{20}: commit: impl1 47792a3 HEAD@{21}: checkout: moving from develop to feature1 47792a3 HEAD@{22}: merge feature0: Fast-forward b0325fc HEAD@{23}: checkout: moving from feature0 to develop 47792a3 HEAD@{24}: commit: impl0 b0325fc HEAD@{25}: checkout: moving from master to feature0 b0325
fc HEAD@{26}: commit (initial): initial http://mevius.5ch.net/test/read.cgi/tech/1650651945/914
915: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 22:02:09.13 ID:646uiMLL0 >>909 ついでに一応、終了時のtest.txt $ cat test.txt initial impl0 impl1 impl2 impl3 impl4 impl5 http://mevius.5ch.net/test/read.cgi/tech/1650651945/915
916: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 22:05:21.84 ID:zDjINlW+0 >>911-915 これ全部FFマージやってるから結果的にdevelopブランチとmasterブランチが同じものになるぞ http://mevius.5ch.net/test/read.cgi/tech/1650651945/916
917: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 22:09:56.21 ID:zDjINlW+0 mergeを全部merge --no-ffにするとマージした構造がわかるようになるし、最後にdevelopとmasterが別のものになる どっちのマージにするかは現場の運用しだい http://mevius.5ch.net/test/read.cgi/tech/1650651945/917
918: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 22:10:47.10 ID:zDjINlW+0 git log --graph --branches --oneline とかするとわかりやすい http://mevius.5ch.net/test/read.cgi/tech/1650651945/918
919: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 22:11:46.51 ID:646uiMLL0 >>916 ああ、それがrebaseしないと履歴が無くなるとかいう話か? 実はそれはまだ確認中だが、とりあえず本件についてはこれでいいし、 俺的には多分こうなる。(基本的にmasterはdevelopの後を追うだけ) けしからんか? それはさておき、本件、HEAD~1 と @{1} が違うものだという経路情報は、 どこにあるのか分かれば教えてくれ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/919
920: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 22:22:33.37 ID:zDjINlW+0 HEAD~1と@{1}は全然関係無いよ? HEAD~1は今のHEADの一番目の親のhash 親が複数いるときにはHEAD^1とかHEAD^2とかで指定する @{1}はひとつ前の操作によってHEADになったhashだから、どういう操作したかで変わり、リポジトリの構造とは関係無い http://mevius.5ch.net/test/read.cgi/tech/1650651945/920
921: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 22:30:34.81 ID:zDjINlW+0 >>914 で説明すると、 @{0}は最後のコミットで、FFマージした結果masterとdevelopがこのhash=1a804d9になった @{1}はgit commit -m 'initial'の結果できた最初のコミット(最後のマージ操作の前のmaster)で、最後にこれにdevelopをマージするためcheckoutしたらこれになってる http://mevius.5ch.net/test/read.cgi/tech/1650651945/921
922: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 22:35:17.82 ID:646uiMLL0 >>920 > @{1}はひとつ前の操作によってHEADになったhashだから、どういう操作したかで変わり、リポジトリの構造とは関係無い だから、それは「そのbranchの」一つ前の操作なんだよ。 結果、diffは、masterブランチでは>>912で、HEAD~1 != @{1} だが、 developブランチでは、以下になって、 HEAD~1 == @{1} なんだよ。 $ git diff HEAD~1 diff --git a/test.txt b/test.txt index 3585d98..bbddc42 100644 --- a/test.txt +++ b/test
.txt @@ -4,3 +4,4 @@ impl1 impl2 impl3 impl4 +impl5 $ git diff @{1} diff --git a/test.txt b/test.txt index 3585d98..bbddc42 100644 --- a/test.txt +++ b/test.txt @@ -4,3 +4,4 @@ impl1 impl2 impl3 impl4 +impl5 だからmasterブランチをdevelopにmergeしかしない運用をした場合、 masterブランチは @{n} でn回前のリリースが検索出来、存在価値が出てくる、という見立てだが、間違ってるか? (@はcommit履歴だと思ってるが、まさか操作履歴か?なら確かに意味無いし、先頭情報しか要らないし、reflogしかなくても納得だが) http://meviu
s.5ch.net/test/read.cgi/tech/1650651945/922
923: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 22:40:04.85 ID:zDjINlW+0 最終的にお前のリポジトリは git merge develop でこうなっているはずだ $ git log --graph --branches --oneline * 1a804d9 impl5 (HEAD -> master, develop) * xxxxxxx impl4 * xxxxxxx impl3 * xxxxxxx impl2 * xxxxxxx impl1 * xxxxxxx impl0 * b0325fc initial 最後のひとつ前の git switch master をやったときにはこうなっていたはず * 1a804d9 impl5 (develop) * xxxxxxx impl4 * xxxxxxx impl3 * xxxxxxx impl2 * xxxxxxx impl1 * xxxx
xxx impl0 * b0325fc initial (HEAD -> master) だから HEAD@{0} = 1a804d9 で、HEAD@{1} = b0325fc http://mevius.5ch.net/test/read.cgi/tech/1650651945/923
924: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 22:46:20.49 ID:646uiMLL0 >>921 @はやっぱcommit履歴だよな? エントリポインタだけだと、commit履歴に出来ないんだよ。 今回はfast-forwardマージしてるから、 init<-0<-1<-2<-3<-4<-5 = master, develop で、単にエントリポイントだけなら master も develop も同じ 5 で区別がない。 当たり前だが両方とも HEAD~1 は4を指してる。 ただ、@{1}は、commit履歴だから、masterでは init を指し、developでは4を指す。 この、commit履歴情報はどこに
記録されてるの?というのが俺の質問。 >>923 そこは理解出来てるはず。上記の通り。 問題はcommit履歴がどこにあるか。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/924
925: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 22:50:12.27 ID:zDjINlW+0 >>922 masterブランチをdevelopブランチにマージする方法が git switch masterとgit merge developの連続実行だけではないし、 HEAD@{n}は適当なタイミングでGCされるから、 HEAD@{n}をそんな用途に使う奴はいない http://mevius.5ch.net/test/read.cgi/tech/1650651945/925
926: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 22:52:10.49 ID:zDjINlW+0 >>924 commit履歴がどこにあるか説明するのに使いたいから、git log --graph --branches --oneline してくれ http://mevius.5ch.net/test/read.cgi/tech/1650651945/926
927: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 22:54:11.54 ID:zDjINlW+0 @はcommit履歴じゃなくて、reflogの履歴 http://mevius.5ch.net/test/read.cgi/tech/1650651945/927
928: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 22:57:39.34 ID:646uiMLL0 >>926 $ git log --graph --branches --oneline * 1a804d9 (HEAD -> master, develop) impl5 * ba4e962 impl4 * a32e11d impl3 * 8d9924f impl2 * 0f78740 impl1 * 47792a3 impl0 * b0325fc initial http://mevius.5ch.net/test/read.cgi/tech/1650651945/928
929: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 23:01:41.48 ID:zDjINlW+0 @{n}はカレントブランチのreflog履歴になるはず reflog履歴はブランチ毎に存在するので master@{n}とdevelop@{n}は違うハッシュになってるはず git reflog masterとgit reflog developで比べてみればわかる http://mevius.5ch.net/test/read.cgi/tech/1650651945/929
930: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 23:04:26.02 ID:646uiMLL0 >>917,926 ちな --no-ff 版、 今出すと余計に混乱するかもだが。 $ git log --graph --branches --oneline * a5aaf72 (HEAD -> master, develop) Merge branch 'feature5' into develop |\ | * e03bcd0 impl5 |/ * 324df68 Merge branch 'feature4' into develop |\ | * c2634c4 impl4 |/ * 68ed20a Merge branch 'feature3' into develop |\ | * 5e12b99 impl3 |/ * 608e5d7 Merge branch 'feature2' into develop |\ | * 4660e46
impl2 |/ * 3924eae Merge branch 'feature1' into develop |\ | * 138d83f impl1 |/ * 7db4424 Merge branch 'feature0' into develop |\ | * 8877414 impl0 |/ * ec041f9 initial http://mevius.5ch.net/test/read.cgi/tech/1650651945/930
931: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 23:08:22.79 ID:646uiMLL0 >>929 $ git reflog master 1a804d9 (HEAD -> master, develop) master@{0}: merge develop: Fast-forward b0325fc master@{1}: commit (initial): initial $ git reflog develop 1a804d9 (HEAD -> master, develop) develop@{0}: merge feature5: Fast-forward ba4e962 develop@{1}: merge feature4: Fast-forward a32e11d develop@{2}: merge feature3: Fast-forward 8d9924f develop@{3}: merge feature2: Fast-forward 0f78740 deve
lop@{4}: merge feature1: Fast-forward 47792a3 develop@{5}: merge feature0: Fast-forward b0325fc develop@{6}: branch: Created from master ってことは、commit履歴はreflogにしか無いって事か? ならbrahchを消すとreflogも消されてcommit履歴が消えるが、マジ? これだとbranchの復活は本質的に無理なことになってしまう。 (他branchに断片的には残ってるんだけどさ) http://mevius.5ch.net/test/read.cgi/tech/1650651945/931
932: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [] 2022/11/05(土) 23:09:25.37 ID:zDjINlW+0 >>928 impl5のコミットオブジェクトの hash = 1a804d9 impl5のコミットオブジェクトの中には親のコミットオブジェクトimpl4の hash = ba4e962 が格納されている impl4のコミットオブジェクトの hash = ba4e962 impl4のコミットオブジェクトの中には親のコミットオブジェクトimpl3の hash = a32e11d が格納されている impl3のコミットオブジェクトの hash = a32e11d impl3のコミットオブジェクトの中には親のコミットオブジェクトimpl2の hash = 8d9
924f が格納されている impl2のコミットオブジェクトの hash = 8d9924f impl2のコミットオブジェクトの中には親のコミットオブジェクトimpl1の hash = 0f78740 が格納されている impl1のコミットオブジェクトの hash = 0f78740 impl1のコミットオブジェクトの中には親のコミットオブジェクトimpl0の hash = 47792a3 が格納されている impl0のコミットオブジェクトの hash = 47792a3 impl0のコミットオブジェクトの中には親のコミットオブジェクトinitialの hash = b0325fc が格納されている initialのコミットオブジェクトの hash = b0325fc initialの
コミットオブジェクトはルートなので親のコミットオブジェクトが存在しない つまり impl5のコミットオブジェクトの hash = 1a804d9 からたどっていけば、コミット履歴が全部わかる 親が複数存在する場合には複数の親のhashを格納する http://mevius.5ch.net/test/read.cgi/tech/1650651945/932
933: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 23:11:25.45 ID:zDjINlW+0 >>930 ¥で表示されるとちょっと見にくいが、慣れれば見やすい http://mevius.5ch.net/test/read.cgi/tech/1650651945/933
934: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 23:14:09.84 ID:zDjINlW+0 >>931 逆だ。コミットのつながりはコミットオブジェクトの中にしかない >>932 みたいにね それを説明してるのが >>902 http://mevius.5ch.net/test/read.cgi/tech/1650651945/934
935: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 23:16:52.31 ID:zDjINlW+0 >>930は最後のdevelopのマージが --no-ff になってないな 最後のも --no-ff にするともっと面白いぞ http://mevius.5ch.net/test/read.cgi/tech/1650651945/935
936: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 23:18:09.46 ID:646uiMLL0 >>932 ごめん、それは分かってる。 それはグローバル履歴=gitオブジェクトを辿った履歴、だろ。 問題は、masterのcommitには b0325fc と 1a804d9 しかない、という情報が、 今のところ master の reflogにしか見あたらないんだよ。 だから、各branchを消したら、それ以前の gitオブジェクト は全部辿れるが、commit履歴は消失してしまう。 今のmasterみたいに、fast-forwardマージで中間をすっ飛ばしてきた、 という情報が無くなってしまうん
だよ。 だから、branchを消す前の状態に完全には戻せない、という話。 だから、常識的に考えればもうちょっとましな何処かに保持してるはずなんだけど、無いんだ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/936
937: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 23:21:56.96 ID:646uiMLL0 >>935 ほい $ git log --graph --branches --oneline * 2fb59f1 (HEAD -> master) Merge branch 'develop' |\ | * 25e1b95 (develop) Merge branch 'feature5' into develop | |\ | | * 4b27393 impl5 | |/ | * 9bfb8cc Merge branch 'feature4' into develop | |\ | | * c2a5b7d impl4 | |/ | * 02d2308 Merge branch 'feature3' into develop | |\ | | * f6d1cf7 impl3 | |/ | * 81e18bb Merge branch 'feature2' into develop
| |\ | | * 01c3871 impl2 | |/ | * 5b57f48 Merge branch 'feature1' into develop | |\ | | * 0fe34d2 impl1 | |/ | * 6272da6 Merge branch 'feature0' into develop | |\ |/ / | * fe1b132 impl0 |/ * 832f464 initial http://mevius.5ch.net/test/read.cgi/tech/1650651945/937
938: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 23:23:27.84 ID:zDjINlW+0 >>936 FFマージしたらその情報は消滅するな --no-ff で全部マージすれば複数親のハッシュをもってるコミットオブジェクトの1番目だけたどればいける ^1 だけみていくね git log にはそれをやるオプションがあるはず >>930をそのオプションで表示すればこんな風に表示されるはず $ git log --graph --branches --oneline --オプション忘れた探せ * a5aaf72 (HEAD -> master, develop) Merge branch 'feature5' into develop * 324df6
8 Merge branch 'feature4' into develop * 68ed20a Merge branch 'feature3' into develop * 608e5d7 Merge branch 'feature2' into develop * 3924eae Merge branch 'feature1' into develop * 7db4424 Merge branch 'feature0' into develop * ec041f9 initial http://mevius.5ch.net/test/read.cgi/tech/1650651945/938
939: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 23:26:10.78 ID:zDjINlW+0 >>937 だとこう表示されるはず $ git log --graph --branches --oneline --オプション忘れた探せ * 2fb59f1 (HEAD -> master) Merge branch 'develop' * 832f464 initial http://mevius.5ch.net/test/read.cgi/tech/1650651945/939
940: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 23:35:28.93 ID:646uiMLL0 >>938 $ git log --graph --branches --oneline --first-parent * a5aaf72 (HEAD -> master, develop) Merge branch 'feature5' into develop * 324df68 Merge branch 'feature4' into develop * 68ed20a Merge branch 'feature3' into develop * 608e5d7 Merge branch 'feature2' into develop * 3924eae Merge branch 'feature1' into develop * 7db4424 Merge branch 'feature0' into develop * ec041f9 initial >>939 $ git log
--graph --branches --oneline --first-parent * 2fb59f1 (HEAD -> master) Merge branch 'develop' | * 25e1b95 (develop) Merge branch 'feature5' into develop | * 9bfb8cc Merge branch 'feature4' into develop | * 02d2308 Merge branch 'feature3' into develop | * 81e18bb Merge branch 'feature2' into develop | * 5b57f48 Merge branch 'feature1' into develop | * 6272da6 Merge branch 'feature0' into develop |/ * 832f464 initial http://mevius.5ch.net/test/read.cgi/tech/1650651945/940
941: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/05(土) 23:41:19.40 ID:zDjINlW+0 >>939がそう表示されるのは、--no-ff マージの手順が何か普通とちがうからかもしれん >>939みたいに表示させるマージの手順もあるはずだから工夫してみるんだな http://mevius.5ch.net/test/read.cgi/tech/1650651945/941
942: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/05(土) 23:41:56.11 ID:646uiMLL0 >>938 なるほど了解した。 データ側に混ぜ込んでて、保持したければ --no-ff で使えってことか。 そもそも同じハッシュなら同じgitオブジェクトにリンクするようになってるのだし、 (つまり見た目が膨らんでるだけで実際の容量は大して食わない) --no-ff がデフォのほうがよかった気がするが。 まあとにかく了解した。長々とありがとう。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/942
943: デフォルトの名無しさん (ワッチョイ 527c-zlm6) [sage] 2022/11/06(日) 00:38:34.83 ID:UPUgwCSv0 FFがデフォじゃなと使いにくい気がするのだがw http://mevius.5ch.net/test/read.cgi/tech/1650651945/943
944: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 09:32:37.27 ID:OfQ8ymDc0 >>943 ffがデフォのメリットって何だ?特にないと思うが。見た目すっきり、か? ただまあ、デフォだし、サル先生他も特に何も言ってないので、ffでの運用が多数派なのだろう。 --no-ffはcommitオブジェクトが別に作られるだけで、 スナップショットに比べたらゴミなので全体としては大して増えない。 commit履歴はgitオブジェクトツリー内に混ぜ込まれ、完全に保持される。 ffの場合は、commit履歴情報はreflogにしか無いので、branchを削除
したら基本的に失われる。 そしてreflogもgc対象なので、Linusはcommit履歴は基本的に保持する必要がないとの立場なのだろう。 また、branchを削除しろといいつつffなのは、その人達もcommit履歴は要らない、と考えていることになる。 ただこれは奇妙な実装だ。 カーナビを考えれば分かるが、当たり前だが地図情報とルート情報は別なのだ。混ぜ込むのはあり得ない。 commit履歴が要らないってのは、経路(線)は不問で、目的地(点)に着いてるかどうかだけだ、と言っているわけ。 それはバージョン管理の達人()にとっては、違うんだろ。バージョン管理は
「線」であると! ただ、Linusも「点」の立場だね。まあプログラマ的にはこれで正しいんだよ。 コンピューターは今現在のソースコードしか見てなくて、どの経路を辿ったかなんて関係ない。 だからどういう紆余曲折(「線」)があったかではなく、結局は前回の「点」と今回の「点」のdiffだけが価値を持つ。 そしてLinusの個人的ツールであるGitも、この流れなわけだ。 とはいえ俺はルート情報はまた別に重要だと思うから、保持したい。 混ぜ込まれてる場合は後からbranchを追加することが絶対に出来ない。 まあ開発ツールとしては別経路から同じ点に到
達しました!なんてのは現実的にあり得ないから、 偽造を防ぐ為にもこれでいいのかもしれんが、一般的に考えればこの実装は奇妙だ。 ちなみに一般文書、例えばEULA(EndUserLicenseAgreement)とかの隙を潰していくタイプの法務文書等は、 別経路だが最終到達時点は同じ、ということが普通にあり得るはず。 だからやっぱりGitはソースコード向けにしか出来てない、ということは認識しておくべきだろう。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/944
945: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 09:32:57.06 ID:OfQ8ymDc0 あと、Gitのドキュメントは全般的によく出来ているが、branchは「線だ!」と言ってるのは不適切だ。 Gitのドキュメントは密結合状態、つまりGitをよく知ってる人向けに書かれているので、 同様に内部実装を見せる形で書くのが正しく、 つまり、「branchは『線』のように見せてますが、実は『点』です!」と言わないと誤解される。俺がそうだが。 これは解像度が統一されてないから起こった問題だ。 一般のマニュアルは疎結合状態、 つまりそのツール
について内部実装なんて全く知らないし知る由もない人向けに書かれるから、 『見た目』線であれば「線」とずっと言い張り、内部実装を曝露してはいけない。 この場合、あくまでユーザーから見たら常に「線」であり、内部がどうであれ「線」としてしか見えないから誤解を生む余地はない。 Gitの場合は内部も見せた上でドキュメントとして外面仕様も説明することになってて、 それが外面仕様なのか内部実装なのか、 またbranchのように外面仕様と内部実装が異なってて隠蔽しきれてない場合とか、(--no-ffの有無で観測可能) それは正しく説明しなければな
らない。 密結合なら、上記の通り、「『線』として見せてますが実は『点』です!」と書くべきだ。 とはいえ全般的にドキュメントはしっかり書かれている。これ自体は素晴らしい。 ただ、そもそも仕様がグダグダ過ぎるし、 或いはユーザーにどこまで見せ、どこからは見せないのか、仕様を管理する感覚がまるでない。 おそらく上層部の連中に仕様管理の経験者がおらず、グダグダになってしまってる。 とはいえ、再度言うが、ドキュメントはよく書いてる方だよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/945
946: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 09:33:22.07 ID:OfQ8ymDc0 ただこれだと、branchを「線」として扱おうとしたら動作が不安定になるわけで、 おそらくfilter-branchが不安定なのはこの辺に起因してる。 そしてドキュメントの何処か(多分showかlog)に、 「これには実はpitfallがあって、マージに遭遇した場合に分岐するから云々」とかいう (当時の俺にとって)謎の記述が挿入されてたのも納得がいく。 commit履歴を保持してないから確定的動作が出来ないんだよ。 これははっきり言って仕様の欠陥で、commit履歴も
完全に保持する仕様だったら自然と回避出来てた。 現仕様では、filter-branchの実装をいくら頑張ったところでどうにもならない。 代わりのfilter-repoも、動作は同様に糞だろうよ。安定して使えるものではないはず。 ここら辺はちょっと惜しいね。Gitが素晴らしいのは、「伽藍とバザール」での > 9. 賢いデータ構造と間抜けなコードのほうが、その逆よりずっとまし。 を体現してるからであって、つまり根っこがしっかりしてるから上部は雑草でも問題なかったんだが、 この点は根っこが駄目だから、上部(filter-branch)が機能しない。 ここら辺はち
ゃんと仕様の大切さを理解してる奴が仕切らないと駄目なのだが、 おそらくGitの連中も、仕様を捏ねてる連中は手を動かしてないと見なし、嫌ってるのだろう。 だから仕様を捏ねることすらしてない。 ただ、それは結局は遠回りでしかない。 今のGitだと、filter-branchも、filter-repoも、その次に出てくる何かも、まともに動作するはずがない。 駄目な仕様だと実装をいくら頑張ってもどうにもならない、と知ってる奴が、ちゃんと仕切らないといけないんだけどね。 ただこれは、それを知らない奴にとってはムカつく奴でしかなく、そいつらを排除した結果
、Gitは暴走中、というわけだ。 Linusがcommit履歴も大切に考える奴だったら違ってたが、惜しいね。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/946
947: デフォルトの名無しさん (ワッチョイ debb-qVfh) [sage] 2022/11/06(日) 10:57:26.83 ID:FBkt/oHG0 長々と無駄な長文と大量投稿でスレを穢すんじゃねー。 単に既存のバージョン管理ツールと、git の考え方の違いが理解できてないだけじゃねーか。 ・git はパッチ管理ツール、作業履歴管理ツールじゃない。 ・ソフトウェアはパッチとパッチを当てる順番で構成されている。 1000回唱えろ。この思想が気に要らなければそもそも git 使うな。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/947
948: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 10:59:15.02 ID:OfQ8ymDc0 >>943 と思ったが、ffじゃないとhashが違うからウザいな。別物扱いだから、一々確認いるし。 オブジェクトツリーはffの方がいい。 ただこれだとcommit履歴が無く、俺的にはまずいので、別に保存したい。 ソースと混ざるとウザイので、可能なら分離したい。 ドキュメントによるとマルチルートも出来るらしいが、これはどうやってやるんだ? > Each project must have at least one root. A project can also have multiple roots, though th
at isn’t common (or necessarily a good idea). http://mevius.5ch.net/test/read.cgi/tech/1650651945/948
949: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 11:04:28.51 ID:OfQ8ymDc0 >>947 > ・git はパッチ管理ツール、作業履歴管理ツールじゃない。 ああ非常に納得出来る。Gitはmerge特化型だ。 確かにそれを日々の業務(非merge)に使おう、というのがフィットしないんだろうよ。 しかし世の中の一般人のGitの使い方は後者だろ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/949
950: デフォルトの名無しさん (ワッチョイ 515f-pSqO) [sage] 2022/11/06(日) 11:33:11.11 ID:sj15aRfA0 ということにしたいのですね。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/950
951: デフォルトの名無しさん (ワッチョイ debb-qVfh) [sage] 2022/11/06(日) 11:46:16.67 ID:FBkt/oHG0 >>949 お前の狭い世間なんて知るか お前は話題の電動ドリル買ってきて釘打つのに不便ガンガンってやりながら文句言ってるのと同じレベル そもそもマニュアルもちゃんと読めてないだろ。root と route を間違える英語レベル 背伸びして git 学ぶ前に高校に進学して英語学んだ方が近道だぞ http://mevius.5ch.net/test/read.cgi/tech/1650651945/951
952: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 11:51:22.62 ID:OfQ8ymDc0 >>950 いや事実だよ。 Linusは確かにmergeしかしないんだろうけど。 だけどその、mergeするパッチを書く奴は、それを一発で書けたわけがないんだ。 何日もかけて、何回も直して、そこに到達してる。 この過程のサポートがGitにはない。 別branchで作業してもmerge時にhash値が組み込まれるから、 確かに俺がやろうとしてる「日々の進捗」をcommitされると除去出来ずウザイんだろうさ。 しかしパッチのコードは必ずGit-repoをクローンしてから
出発するのだから、 Gitにこのサポートが無く、パッチを当てる人はいきなり完成したパッチを書け!勿論でバッグ済みだぞ!みたいな構造なのがおかしい。 すくなくとも、捨てbranch機能があって、そこで日々の作業を終わらせた結果、 mergeするときには本ブランチでその結果がいきなり生えたように見せる機能 (捨てbranchとmergeしても中身の結果だけもらって親にはしない) みたいな機能が必要なんだよ。 ただまあ、これは今でも手動だと出来た気はするが。 だからまあ、確かにパッチ管理ツールであって、 ソフトウェア開発時のバージョン管理ツール
ではないんだろうさ。 だけど、今、全世界のGitで、mergeコミットと通常のcommit、どっちが多いか考えれば、自明だろ。 一つのパッチを作るまでにも何回もcommitが必要なのだから。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/952
953: デフォルトの名無しさん (ワッチョイ debb-qVfh) [sage] 2022/11/06(日) 12:07:06.70 ID:FBkt/oHG0 >>952 アホか。共同開発が全く理解できてねーじゃねーか。 お前の試行錯誤の記録を push しようとしてんじゃねーよ。 手元で試行錯誤して実装できたら、それを元に綺麗なパッチに書き直す作業するんだよ。 そして完成した綺麗なパッチ群のみを共有リポジトリに公開するんだよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/953
954: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 12:19:51.48 ID:OfQ8ymDc0 >>948 一応見つけた。 git worktree らしい。 複数のbranchを同時に開く機能で、DBで言うATTACHっぽい。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/954
955: デフォルトの名無しさん (ワッチョイ b114-pSqO) [sage] 2022/11/06(日) 12:20:57.36 ID:JyiC8cnE0 試行錯誤はすべて記録に残すべき →じゃあテキストエディタで保存するたびに記録するべきっていうのか? こういう話なので無視すんなよ?w http://mevius.5ch.net/test/read.cgi/tech/1650651945/955
956: デフォルトの名無しさん (ワッチョイ b114-pSqO) [sage] 2022/11/06(日) 12:21:44.03 ID:JyiC8cnE0 バージョン管理はソースコードの変更履歴を残すのであって 作業履歴を残すものじゃないっていうのが分かってなさすぎ http://mevius.5ch.net/test/read.cgi/tech/1650651945/956
957: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 12:30:26.14 ID:OfQ8ymDc0 >>953 それはいいんだけどさ、その肝心のパッチを書く人へのサポートがまるでないだろ。 出発点がgit clone で、その上で作業して、終われば pull request する前提なのにさ。 そしてOSSではなく一般企業等で使ってる奴は、 当たり前だが日々の作業のバックアップや巻き戻し出来るシステムが必要で、そう使ってる。 だから、Gitが難しすぎるというのは、目的外使用だから意味が分かりにくい、というのはあるね。 Indexもマージの時にはあった
方が便利なんだろうしさ。(ただのcommitには邪魔でしかない) しかし確かに、Linusに言わせれば、全く問題ないんだろうさ。彼はmergeしかしないしね。 そして他のVCSよりまし、という理由でGitを使う奴は、混乱するんだろうさ。VCSと聞いてきたのだからね。 確かにパッチ管理システムだよGitは。ソースコード生成時のサポートシステムではない。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/957
958: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 12:32:16.81 ID:OfQ8ymDc0 >>955 > こういう話なので無視すんなよ?w 無視する/しない以前に、何が言いたいのか分からないから反応しようがないんだよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/958
959: デフォルトの名無しさん (ワッチョイ 515f-pSqO) [sage] 2022/11/06(日) 12:42:58.45 ID:sj15aRfA0 >>957 > それはいいんだけどさ、その肝心のパッチを書く人へのサポートがまるでないだろ。 rebase あるよ。 元のローカルブランチを消さないでおけば記録もぜんぶ残るし。よかったね。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/959
960: デフォルトの名無しさん (ワッチョイ debb-qVfh) [sage] 2022/11/06(日) 12:43:13.14 ID:FBkt/oHG0 >>957 git ほどパッチを書くのに向いてるツールは他にないぞ。 index 無しでどうやってパッチの分割とかするんだよ? http://mevius.5ch.net/test/read.cgi/tech/1650651945/960
961: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 12:53:16.71 ID:OfQ8ymDc0 >>960 最初から一つずつ書けば分割の必要ないし、 Index無くてもdiffの出力を絞ってpatchに食わせれば普通に分割出来るだろ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/961
962: デフォルトの名無しさん (ワッチョイ b114-pSqO) [sage] 2022/11/06(日) 13:02:38.08 ID:JyiC8cnE0 >>958 書いてあるとおりじゃん。 試行錯誤の履歴を全部取れというなら、テキストエディタで保存するごとに gitでコミットしなければならないはずだ お前の主張はそういうことなんだから、それをちゃんとやれってこと http://mevius.5ch.net/test/read.cgi/tech/1650651945/962
963: デフォルトの名無しさん (ワッチョイ b114-pSqO) [sage] 2022/11/06(日) 13:04:02.78 ID:JyiC8cnE0 >>961 コミットがメチャクチャなのに、どうやってdiffとってパッチできると思ってるの? そのdiffには関係がない修正が大量に入ってるだろ http://mevius.5ch.net/test/read.cgi/tech/1650651945/963
964: デフォルトの名無しさん (ワッチョイ debb-qVfh) [sage] 2022/11/06(日) 13:37:22.28 ID:FBkt/oHG0 >>961 なんも分かってないことを露呈しているな。 A,B,C,D,Eとコミットした後に Cはc1,c2,c3に分割すべきで、BとEは一つにすべきで、Aは不要だったと気づいたらどうすんの? こういうのがお手軽にできて綺麗なパッチ群に整理できるのがパッチ管理ツールである git の利点なんだ。 そういうのやったことないだろ? http://mevius.5ch.net/test/read.cgi/tech/1650651945/964
965: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/06(日) 13:39:49.06 ID:az1H5JFk0 >>954 脊髄反射で理解したつもりになって書いてるだろ正解率が著しく低い git worktreeは一つのリポジトリに追加のワークツリーを用意して、異なるブランチをそれぞれ別のワークツリーにcheckoutできるようにする機能 DBのATTACHとは全然違う マルチルートは普通に作ったリポジトリをfetchやpushで合成してmerge --allow-unrelated-historiesすればできる でもこれはかなり特殊な用途に使うもので普段使いするようなものではない http://mev
ius.5ch.net/test/read.cgi/tech/1650651945/965
966: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 13:46:46.96 ID:OfQ8ymDc0 >>965 実は今し方ドキュメント読んで、これは違うと書こうとしたところだった。 wor,ktreeはstashの代わりで、同時作業用ではないね。 > マルチルートは普通に作ったリポジトリをfetchやpushで合成して ああこれは俺の要求とは違うね。 まあ、もう地味に.git/.xxx/に転がそうと思案中。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/966
967: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 13:57:15.91 ID:OfQ8ymDc0 >>963,964 お前らunixコマンドの使い方知らないだろ。 patch/merge/diff3はgit以前からあるコマンドで、多分初期Gitはそのまま使ってたと思うが。 具体的な使い方は以下。 今、元 fileA に対して、変更後 fileC になってるが、実は中間の fileB が欲しかったとする。このとき、 cp fileA fileB diff fileA fileC | less -N; // ここで該当行を確認する。例えば10-20行目なら、 diff fileA fileC | sed -n '10,20 p' | patch fileB これでfil
eBが得られるんだよ。これ以上色々複雑な時用に diff3 とか merge もある。 だからパッチの分割はすぐ出来るんだよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/967
968: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/06(日) 14:05:27.55 ID:az1H5JFk0 >>967 そういう作業を必要で無くすためにgitが生まれた patchの提出をgitの分散リポジトリ上で可能とするためにね 963とか964が行ってるpatchというのは、いわゆるpatchファイルのことではなく、ブランチ上に存在する差分の事 そのpatchを整理するのに index や rebase がある http://mevius.5ch.net/test/read.cgi/tech/1650651945/968
969: デフォルトの名無しさん (ワッチョイ debb-qVfh) [sage] 2022/11/06(日) 14:19:49.14 ID:FBkt/oHG0 もしかして、もしかすると、git では「パッチ=コミット」っていうことすら理解できてないのだろうか。 まさかそんな人はいないよね。単に言動が変な人なだけだよね。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/969
970: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 14:25:32.34 ID:OfQ8ymDc0 >>968 知ってるよ。 ただまあ、確かにパッチ管理ツールだ。 プログラマはこれをソースコード管理ツールとして使おうとするから問題なのだろう。 バックアップが取れて、履歴が戻れれば何でもいいんだが、mergeも出来るから便利だからね。 なお俺は > ブランチ上に存在する差分の事 も所詮はdiffだ、という立場だよ。だから元のunixコマンドで何とでもなるし、 それをシェルスクリプトで集大成したのが初期Gitだろ。 http://mevius.5ch.ne
t/test/read.cgi/tech/1650651945/970
971: デフォルトの名無しさん (ワッチョイ debb-qVfh) [sage] 2022/11/06(日) 14:31:58.60 ID:FBkt/oHG0 >>970 ちがうぞ。最初からパッチ管理ツールとして設計されるぞ。 そしてパッチ管理ツールなんだから、パッチの出力機能さえあれば良いんだぞ。 それ以外の差分が欲しかったら別の外部ツール使えば良いんだぞ。それこそ基本だろ http://mevius.5ch.net/test/read.cgi/tech/1650651945/971
972: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 14:33:28.64 ID:OfQ8ymDc0 >>969 各commmit「点」でdiff取ったときに落ちる情報って何? ああcommitメッセージか?そんなのは知らんし要らんよ、って立場。 つか、commitメッセージガーなんて言い訳にならないから、 どのみちソースコードを確認するしかないんだよ。 commitメッセージはその手がかりとラベルに過ぎない。これが俺、というか多分普通のプログラマの立場。 お前らはcommitメッセージが間違ってたら、そいつに責任を負わせられるんだろうさ。 ソースコード
読めないからね。 ソースコード読める奴ならこんな言い訳効かないんだよ、何でお前が上にいるんだ!監督する為だろ!になる。 さすがに素通しはヤバい。 そしてどう見てもヤバいパッチを素通ししてるから、なんじゃあこりゃあ?ってなってる。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/972
973: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 14:36:33.55 ID:OfQ8ymDc0 >>971 ああそれが diff のデフォルト出力をさせない理由だな。 651から一周回ったが、なるほど色々状況は理解出来たよ。賛同はしないが。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/973
974: デフォルトの名無しさん (ワッチョイ debb-qVfh) [sage] 2022/11/06(日) 14:45:12.77 ID:FBkt/oHG0 >>972 だからお前の考えてるような作業履歴管理ツールじゃないんだから、あきらめて他所へ行け。 gitはパッチ管理ツール。そしてパッチは何時、誰が、何のために作成したかが重要情報なんだよ。それを管理してるんだよ。 ソースコードの保管するツールじゃねーぞ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/974
975: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 14:49:22.34 ID:OfQ8ymDc0 >>974 そこは違うんだな。 みんな結局自分でやるのも作るのも面倒だから、既に動いてるツールを使ってるだけだよ。 Gitの機能のサブセットで十分にカバー出来るのなら、Git使えばいいだけ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/975
976: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 14:56:19.71 ID:OfQ8ymDc0 >>974 だからな、前言ったように、ブッ込んでおけば後で取り出せるバケツでしかないんだよ。 そのバケツにゴテゴテ付いてるから難しそうだが、要らない機能は使わなければいいだけ。 ただ、履歴保持の範囲を知らずに使って、実は記録されていませんでは困るから、使う前に調べてる。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/976
977: デフォルトの名無しさん (ワッチョイ 515f-nsye) [sage] 2022/11/06(日) 15:45:34.08 ID:o7v4FvnP0 https://www.praha-inc.com/lab/posts/commit-message そもそもコミットメッセージは何のためにあるのでしょうか? コミットログのうちコードの変更履歴には「コードをどのように変更したか」という情報が含まれていますが、「コードを何故変更したのか」という情報はコミットメッセージを読まないと分かりません。機能追加、バグ修正、パフォーマンスのためなど、変更した理由は様々なものが考えられます。 もちろんコードを変更した本人に聞けば
変更した意図はわかると思いますが、変更した本人にいつでも聞ける状況であるとは限りません。 「何故コードを変更したのか」という情報が欲しい時のためにコミットメッセージが存在します。 加えて、コミットメッセージは基本的に他人が読むものです。 他人というと同僚やコントリビューターなどが挙げられると思いますが、この「他人」には未来の自分も含んでいます。自分が書いたコミットメッセージを数ヶ月先の自分が読む場合、過去の自分のコミットメッセージを未来の自分が読むことになります。 つまり、コミットメッセージは自分以外の人の
ために存在するのです。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/977
978: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/06(日) 15:52:02.65 ID:az1H5JFk0 まあこいつは分散バージョン管理の難しさを理解できていない 一人でしかプログラム組んだことがないのだろう gitのややこしいと感じる仕様のほとんどは分散リポジトリ管理に起因していて、分散リポジトリ管理の問題をできるだけ明示的にシンプルに解決しようという意図で設計されている http://mevius.5ch.net/test/read.cgi/tech/1650651945/978
979: デフォルトの名無しさん (ワッチョイ b114-pSqO) [sage] 2022/11/06(日) 15:55:03.47 ID:JyiC8cnE0 ほんとなぁ、POSIX原理主義だからユニケージだかUSP研究所だかしらんが 例のあいつも、バージョン管理のツールを、バックアップツールとしてしか考えてねぇ だからとりあえずファイルを入れておけば差分はdiffで見れるだろとか 訳のわからんことを言い出す ある時点とある時点の差を見たいんじゃねーんだよ ある修正にどのような差分があるかを記録=コミットしたいわけで その記録なしに差分だけみれても役に立たないっつーの そこが根本的に違うと
いうか、バージョン管理の役目がわかってない http://mevius.5ch.net/test/read.cgi/tech/1650651945/979
980: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/06(日) 16:10:07.15 ID:az1H5JFk0 「ブッ込んでおけば後で取り出せるバケツ」など言っているが、 必要とされていたのは内容を同期できる複数のバケツで、 なおかつバケツ同士が常にオンラインで通信しているわけではない そういう問題に取り組んだ結果だ http://mevius.5ch.net/test/read.cgi/tech/1650651945/980
981: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/06(日) 16:12:28.94 ID:az1H5JFk0 そういう魔法のバケツを生み出すために、ただのバケツならできることがgitでは制限されていたりもする ユーザから見て不自由のない完全な魔法のバケツを生み出そうとしたプロジェクトは複雑すぎてことごとく失敗してきた http://mevius.5ch.net/test/read.cgi/tech/1650651945/981
982: デフォルトの名無しさん (ワッチョイ b114-pSqO) [sage] 2022/11/06(日) 16:14:37.71 ID:JyiC8cnE0 バケツの中に入っている袋詰めの塩や砂糖を、一つづつ取り出したいのであって バケツの中に全部入ってるから、遠心分離機でも使って 取り出せばいいだろうじゃないんだよなw http://mevius.5ch.net/test/read.cgi/tech/1650651945/982
983: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [sage] 2022/11/06(日) 16:36:01.68 ID:az1H5JFk0 前スレは消費に1年半かかってるのに、このスレは半年ぐらいで終わりだな 次スレ立ててみるけど失敗したらゴメン http://mevius.5ch.net/test/read.cgi/tech/1650651945/983
984: デフォルトの名無しさん (ワッチョイ 09e4-chQ5) [] 2022/11/06(日) 16:41:37.94 ID:az1H5JFk0 次スレ Git 19 http://mevius.5ch.net/test/read.cgi/tech/1667720427/ http://mevius.5ch.net/test/read.cgi/tech/1650651945/984
985: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 19:18:45.16 ID:OfQ8ymDc0 相変わらずお前ら盛大に勘違いしてるが、とりあえず、 × Gitはパッチ管理ツールである ○ Gitはパッチ適用ツールである ○ Gitはパッチ記録ツールである としよう。管理は出来てない。何を管理すべきか分かってないから。 commitメッセージなんてただのラベルに過ぎない。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/985
986: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 19:19:20.86 ID:OfQ8ymDc0 例えば今回俺が送った再現コード、あれはどこに配置されるのだ? >>977の通り、「何故この変更を行ったのか」の完全情報がそこにある。 まさか捨てたりしないよな? バグパッチに於いて、重要な物から順に、 1. そのバグを修正するコード 2. そのバグを再現するコード : 10000, commitメッセージ だ。どんなに丁寧にcommitメッセージを書いたところで、「それ、あなたの感想ですよね?」でしかない。 肝心なところを書き間違ってるかもしれ
ないし、信用も出来ない。 この点、再現コードは情報が完全で、全ての情報を過不足無く含んでいて、曖昧さもない。 だからcommitメッセージの情報価値なんて再現コードと比べたらゴミ以下で、 再現コードに対してのリンクで十分なんだよ。つまり、 ○年○月○日に○○から送られてきた○○のバグ(メモリリーク)を修正する。 詳細はXXXX で、XXXXのところ、Git流ならSHA1ハッシュで、 その中に再現コードと詳細、今回なら全員のメールの全文を入れておくのがバグ管理だよ。 これで、「何故この変更を行ったのか」の完全情報が保たれる。 そして、再現
コードは今後ずっとregressionテストに使う資産にする。 そうすれば、少なくとも過去と同じバグはリリース前に見つかる。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/986
987: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 19:20:02.27 ID:OfQ8ymDc0 こうなってないだろ。一回パッチ当てて動きました!満足です!じゃないんだよ。 繰り返すが、commitメッセジーをいくら丁寧に書いても意味無い。 再現コードに比べたら本当にゴミ以下。 逆に、再現コードに辿り着けるのなら、後はラベルが正しく付いてれば十分なんだ。 それ以上の情報は、commitメッセージのテキストではなく、 再現コードとバグ報告=完全情報を見た方がいいから。 で、GitHubはまあこれに近いよ。 そもそもバグ報告自体Webだし、
少なくともIssueからバグの完全情報に当たれる。 Gitはどうなの? 今回の俺と同様の、過去のバグ報告の再現コードを生かせてるのか? ならそういうディレクトリがあって、 bug_patches/XXXXXなハッシュが名前になってるディレクトリに再現コードその他がブチ込まれてて、 出荷前(というのもおかしいが)には全部一通り通せ、となってるはずだけど、 どう見てもそうなってないでしょ。 パッチ当てたから満足です、で終わってる。 こんなのでバグが収束するはずがない。 同じ連中が書いてるのだから、放置したら同レベルのバグを繰り返す。 だから本来は
何故こんなバグが発生したのか?からコード構造を見直して、 そもそもそうならないようにするのだけど、そういう学びもないし、(だから基本すら出来てない) regressionテストのネタにもしないのだから、今後ともバグだらけだよ。 ああ、Gitの達人揃いだから、「記録」は出来てるのだろうよ。だけどそれは「管理」ではない。 ただ、これがバザール流だ!と来るなら、はーそうですかー(棒)だよ。 目も手も数が違うし、俺には何が最適か分からんし。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/987
988: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 19:20:37.38 ID:OfQ8ymDc0 ちなみにchromeの連中は気持ち悪いほどregressionテストしてるぞ。 本来は、ああするべきなんだろうよ。 regressionテスト自体はタダ(スクリプトで自動実行)だからね。 バグ「管理」というのなら、原因を究明して、少なくとも同じバグが出ないようにしないといけない。 それはcommitメッセージをいくら丁寧に詳細に書いても、達成出来るものではない。 分かりやすく言うとな、「体調管理」と言われれば、少なくとも同じ原因で風邪を引かないように
するだろ。 なら、「バグ管理」なら、最低限レビューしてregressionテストしないと駄目だよ。 それはcommitメッセージ云々では出来ない。だからパッチ「適用」「記録」ツール。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/988
989: デフォルトの名無しさん (ワッチョイ ad14-pSqO) [sage] 2022/11/06(日) 19:24:47.08 ID:VM2X6i580 >>985 > commitメッセージなんてただのラベルに過ぎない。 その言葉からお前がわかってないのが明らかなんだけど? http://mevius.5ch.net/test/read.cgi/tech/1650651945/989
990: デフォルトの名無しさん (ワッチョイ ad14-pSqO) [sage] 2022/11/06(日) 19:26:23.98 ID:VM2X6i580 >>988 うん。だからそのchromeはここまで徹底してコミットを管理してる それを見習え https://github.com/chromium/chromium/commits/main http://mevius.5ch.net/test/read.cgi/tech/1650651945/990
991: デフォルトの名無しさん (ワッチョイ ad14-pSqO) [sage] 2022/11/06(日) 19:27:42.33 ID:VM2X6i580 regressionする際にもコミットを管理するのは重要で コミット単位で戻してテストする 動かないコードをコミットすることはない お前みたいにテキストエディタで修正するたびにコミットとかしない http://mevius.5ch.net/test/read.cgi/tech/1650651945/991
992: デフォルトの名無しさん (ワッチョイ ad14-pSqO) [sage] 2022/11/06(日) 19:28:57.43 ID:VM2X6i580 なんでchromeのコミットメッセージが こんなに詳しく書かれているのか、その理由を考えたら? http://mevius.5ch.net/test/read.cgi/tech/1650651945/992
993: デフォルトの名無しさん (ワッチョイ ad14-pSqO) [sage] 2022/11/06(日) 19:32:31.47 ID:VM2X6i580 バージョン管理はソースコードの変更履歴を管理するものなので そこにバグ管理という別の概念を持ち出すのも頭悪い バグ管理は別のツールでやれ http://mevius.5ch.net/test/read.cgi/tech/1650651945/993
994: デフォルトの名無しさん (ワッチョイ 515f-pSqO) [sage] 2022/11/06(日) 19:55:47.23 ID:sj15aRfA0 >>986 > 例えば今回俺が送った再現コード、あれはどこに配置されるのだ? 修正コミットのログから URL で辿れるようになるかな。 https://public-inbox.org/git/20221102220142.574890-2-szeder.dev@gmail.com/ http://mevius.5ch.net/test/read.cgi/tech/1650651945/994
995: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 20:08:52.18 ID:OfQ8ymDc0 >>994 それは鯖に置いてるだけだろ。まあそれはそれで十分で、(この意味では最初のMLでも十分) 問題は、 1. .git上、つまりソースコード改変ツリーから簡単に辿れるよう、 commitメッセージにそのリンクは落とされている(落とされる予定)なのか? そうじゃないと>>977が達成出来ないだろ。 2. そしてregressionテストパターンとして登録され、今後ずっと実行されるのか? 3. そもそも根本の原因はソースコードの程度が酷いことであり
、レビューしろよマジで だよ。 レイヤーの考え方がない奴等ばかりなので通じないかもしれないが、 gitは適用/記録という下層レイヤーであって、バグ/パッチ「管理」は上位レイヤーの戦略だから、 gitで「管理」出来ると思ってるのが間違いなんだよ。記録は出来るが、管理は出来ない。 gitで出来るのは上の1だけだね。 だからcommitメッセージは勿論丁寧に書くべきなんだけど、丁寧に書けばいいわけでもないんだ。 それでバグやパッチが減るわけでもないから。 目的と手段の混同はどの界隈でもあるけど、ここの連中も大概だよ。 http://mevius.5ch.n
et/test/read.cgi/tech/1650651945/995
996: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 20:11:50.13 ID:OfQ8ymDc0 >>994 と思ったがすまん、見落とした。 > 修正コミットのログ つまりこれ、コミットメッセージそのものなのか? ちょっと確認したいんだが、どこ見ればいいんだ?GitのGitHubから? http://mevius.5ch.net/test/read.cgi/tech/1650651945/996
997: デフォルトの名無しさん (ワッチョイ 515f-pSqO) [sage] 2022/11/06(日) 20:22:10.42 ID:sj15aRfA0 >>996 そう。コミットメッセージを含めてML上でレビュー中。まだ本体リポジトリには入ってない。 挙がってるレビューコメントを受けてそのうち第2弾が投稿されて取り込まれるんじゃないかな。 君もソースコードの質が気になるなら修正を送ってくれていいんだよ。さぁさぁ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/997
998: デフォルトの名無しさん (ワッチョイ 617b-8+ss) [sage] 2022/11/06(日) 20:38:50.28 ID:OfQ8ymDc0 >>997 つまりあれがそのままに近い状態で入るのか? まあそれは見守るとして、本来はちゃんとラベルを付け替えないとまずい。 俺が送った段階では高い確率で「free忘れによるメモリリーク」と推定出来たが、 断定は出来なかったので、単に「メモリ食いすぎ」としてる。 だから、メモリリークだと「断定」出来た人が概略を書き直さないといけない。 が、まあ、これは多分為されるだろう。見守るよ。 > 君もソースコードの質が気になるな
ら修正を送ってくれていいんだよ。さぁさぁ。 これは本質的に無理だ。多分俺、というか、いわゆるCコードを拒絶すると思うよ。 間違いなく、連中は自己の能力に自信持ってて、傲慢で、言うこと聞かない連中だ。 世の中のCコードなんて、基本通りやってる物でほぼ全部だから、見たこと無いわけが無い。 それが何故そうなってるか理解出来ない、 つまり、王道を王道と理解出来ない奴等だからデタラメやってるわけで、 言うこと聞く連中ならそうはならない。 通常だと、やらせるだけやらせて、でもどうにももうダメポなときに、 そもそもお前のコードが
おかしい、ここをこう直せ、なら簡単にメモリリークは抑えられる、とすると効くのだろうけど、 問題はバザールで、無限にモグラ叩き出来てしまって、実際にそれでやろうとしてることだよ。 マジかー、って、ちょっと驚きだが、まあ観戦だ。 ああちなみに、俺以外の誰でも、まともなC書ける奴なら、ちょっと引くコードだよ。 だからそこら辺の奴等に書かせても、もっとましなコードになるよ。そして俺もその程度だし。 というか単発のコードでそんなに技量の差なんて出ないし。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/998
999: デフォルトの名無しさん (ワッチョイ ad14-pSqO) [sage] 2022/11/06(日) 20:40:54.42 ID:VM2X6i580 >>998 お前がちゃんとやれって言われるだけだよ お前雑なんだよ。無能なのに張り切るな。空回りしてるぞw http://mevius.5ch.net/test/read.cgi/tech/1650651945/999
1000: デフォルトの名無しさん (ブーイモ MM96-1bV6) [sage] 2022/11/06(日) 20:46:49.73 ID:wlljBD17M 質問いいすか? http://mevius.5ch.net/test/read.cgi/tech/1650651945/1000
1001: 1001 [] ID:Thread このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 197日 17時間 21分 4秒 http://mevius.5ch.net/test/read.cgi/tech/1650651945/1001
1002: 1002 [] ID:Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《プレミアム会員の主な特典》 ★ 5ちゃんねる専用ブラウザからの広告除去 ★ 5ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 月300円から匿名でご購入いただけます。 ▼ プレミアム会員登録はこちら ▼ https://premium.5ch.net/ ▼ 浪人ログインはこちら ▼ https://login.5ch.net/
login.php http://mevius.5ch.net/test/read.cgi/tech/1650651945/1002
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.048s