[過去ログ]
Git 18 (1002レス)
Git 18 http://mevius.5ch.net/test/read.cgi/tech/1650651945/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
703: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:40:47.45 ID:oV1LtMOH0 以前来てたPOSIX原理主義者氏ではなく また別のPOSIX原理主義者氏のようだなw http://mevius.5ch.net/test/read.cgi/tech/1650651945/703
704: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:41:49.56 ID:oV1LtMOH0 自分が認めているもの以外「全部方針が狂ってるよ」 その理由は、自分が認めていないからだよ 世界が認めていても 「俺が認めていないから世界の方が狂ってるんだよ!」 http://mevius.5ch.net/test/read.cgi/tech/1650651945/704
705: デフォルトの名無しさん (ブーイモ MMeb-uk66) [] 2022/10/31(月) 20:45:31.00 ID:GrGctmUAM POSIX原理主義はWindowsでの開発がめんどくさくなるんで本当に嫌いだわ あと今更awkやsedの読みづらい文法覚えるより他のスクリプト言語で書いた方が楽だし、POSIX原理主義はPOSIXに慣れている奴のポジショントークにすぎないと思うね http://mevius.5ch.net/test/read.cgi/tech/1650651945/705
706: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 20:46:22.02 ID:GzQExg5g0 >>693 gitのバージョン管理されているファイルツリーはdiffコマンドがそのまま解釈できるような形式でファイルシステム上に存在しないからファイル単位で変換して外部関数呼び出すとか馬鹿だな さらにgit内部で保持されるファイルの差分情報をdiffの出力みたいな字句解析が必要なバイト配列で取り扱うのも馬鹿げてる このファイル差分抽出は間違いなくgitの核心的機能これが無ければVCSとして機能しない http://mevius.5ch.net/test/read.cgi/tech/1650651945/706
707: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:49:18.25 ID:oV1LtMOH0 >>705 POSIX原理主義者はPOSIXを理解してないよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/707
708: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 20:55:34.73 ID:GzQExg5g0 >>698 -uをサポートする前は、patch作るなら-cのコンテクスト形式だろ -cなら-uとハンクの精度は変わらん http://mevius.5ch.net/test/read.cgi/tech/1650651945/708
709: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 21:08:17.57 ID:J+3pjzxx0 >>706 そこら辺の機能はGit以前から完全に機能してるんだよ。 > diffが作られてしばらくは、ソフトウェアコードや技術文書のマークアップのソース部分の変更箇所を比較する、 > プログラムのデバッグ出力の検証、ファイルシステム中のファイル一覧の比較といった使い方が一般的であった。 > ed用の出力により、ファイルへの一連の変更をひとまとめにしてファイル容量を節約するというアイデアが出てきた。 > Source Code Control System(SCCS)はそのようなアイデアを実装したものとして1970年代後半に実装がなされた。 > https://ja.wikipedia.org/wiki/Diff だからそれはGitのアイデアでも全然無く、Git以前からdiffとedを組み合わせれば誰でも出来る物だった。 勿論diffの出力がキモだから出来るだけ--minimumなのは目指すとしても、 それはdiffを改善すべき話で、Git本体が対応する話ではない。 てかこの辺のソフトウェア階層の話が通じないところを見ると、割と階層無しの文化=本当にCしか知らない感じだな。 例えばJSとかでは、扱うデータの先がDBなのか、ローカルファイルなのか、メモリ上のStringなのかを 上位のコードは区別しないで済むようにコーディングすることが普通で、 と言うか実際はそうしか出来なくて、強制的にそうさせられるわけだが、 形式的には、ネットワークでもローカルファイルでもメモリ上のStringでも、 プログラミングモデル側からは全部読み書き出来る状態になってから制御が渡される。 (メモリ上に展開し終えてから渡されるイメージ、なおこれをRubyでは上手いこと遅延読み出しにしてたりするが) CでI/Oを分離するにしても普通はそうするし、実際、Gitでもそうなってる。 でないと git log -L で全展開の倍ほどメモリ食うとかあり得ないし。 最終段のI/Oは普通はそうやって上位のコードと分離するもので、Gitもcat-fileでそうなってる。 ただ、それを交換出来ないので、テキストやDBに保存したい奴に対応出来てないだけ。 これはGitの構造の問題だよ。 それでsshを別に実装しますとか、かなり馬鹿げた方針だ。 少なくともJS知ってればそうはならない。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/709
710: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 21:09:37.44 ID:J+3pjzxx0 Webの連中は馬鹿なのも事実だけど、馬鹿でも上手く行くように色々上手く出来てるのも事実なんだよ。 Cの連中は一度Webをやってみると凄く勉強になると思うよ。俺もそうだったし。 ただしWebはかなり糞なのも事実だが。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/710
711: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 21:15:30.28 ID:GzQExg5g0 >>709 マージやリベースでやってる差分抽出は最終段のI/Oじゃないし C言語でシンプルに実装されてるgitをMSが作る馬鹿みたいに重いツールにしないでくれよ http://mevius.5ch.net/test/read.cgi/tech/1650651945/711
712: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 21:34:40.89 ID:GzQExg5g0 BitKeeperを元にGitを実装したリーナスはBitKeeper以前のVCSを糞みたいに言ってるんだよね https://ezoeryou.github.io/blog/article/2015-04-08-linus-git-interview.html edとdiffを使ったようなVCSは眼中になかった http://mevius.5ch.net/test/read.cgi/tech/1650651945/712
713: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 21:39:28.36 ID:J+3pjzxx0 >>711 だから普通は、内部的に圧縮されたファイルへのアクセスは、 1. 単純にメモリ展開する 2. 何らかのプロキシオブジェクトでエミュレートする のどちらかで、大概前者だしGitでもそうなってる。 だからここで速度低下とかは関係ない話だ。 (なお後者は/dev/zeroとか/dev/randomとかと言えば分かるだろう) そこを他の言語、PHP/JS/Go/Rustのどれかを知ってれば、 そこでオブジェクトにしてI/O分離してマルチターゲットにしてしまうのも常識。 これを思いつけない/知らないのだから多分本当にCしか知らない連中だけでやってるよ。 君からもそれを感じる。 ちなみに重くなる/ならないなら、SQLiteは大量の小さいファイルならファイルよりも速いぜ!とか言ってるし、 他DBと違ってローカルだから試してみると面白いかもよ。 https://www.sqlite.org/fasterthanfs.html http://mevius.5ch.net/test/read.cgi/tech/1650651945/713
714: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 21:52:54.41 ID:GzQExg5g0 >>713 内部的に圧縮されたファイル? 「ファイルツリーはdiffコマンドがそのまま解釈できるような形式でファイルシステム上に存在しない」 これを勘違いしたのかな? ファイルじゃなくてファイルツリーね gitのディレクトリーのツリー構造を保持する方法独特だからその各ファイルをdiff取ってもらうためにツリーをtraverseするインターフェースを提供する必要が有る ファイル単位の差分抽出なんて複雑な処理でもないんだからそれをやってもらうためにそれよりはるかに複雑なインターフェースを設計するとか無駄以外の何物でもないな http://mevius.5ch.net/test/read.cgi/tech/1650651945/714
715: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 21:54:31.60 ID:J+3pjzxx0 >>712 ただそれはedとdiffが問題だったわけではないだろうし、 仮にそうだったとしても、正しくソフトウェアを構成していればすぐに交換可能で、全く問題にならないんだよ。 その辺がソフトウェア階層の意識がないなあと思うところだよ。 Cはそういう世界でもあるけどさ。 edとdiffで展開するのが駄目なら、他方式の cat-file 階層に交換してしまえば何とでもなるんだよ。 Gitの方式が優れていれば、他VCSがGitの末端階層のI/Oコードを取り込めば済むだけ。 だからそこを問題にする時点でズレてる。 例えばgzipの様なストリーミング方式の cat-file にしてもう動作するし、7zipでも何でもいいんだよ。 (バージョン管理システムの場合は個別ファイルではなくファイルセットでの圧縮なので実際はこれらは適切ではないが) それでLinusが言ってるように、キモは > 問題はコード量ではなくて、どのようにデータを扱うかだった。 > 初期の実際のコード量は、かなり少ない。基本的な考え方が正しいかどうかにかかっている。開発を始める前からそのアイディアについて考察していたわけだ。 であって、要はツリーコントロールであって、I/Oではないだろ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/715
716: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 22:11:44.63 ID:J+3pjzxx0 >>714 ああ、ファイルと勘違いしていたのは事実だが、それでも意味は同じだよ。 > gitのディレクトリーのツリー構造を保持する方法独特だからその各ファイルをdiff取ってもらうためにツリーをtraverseするインターフェースを提供する必要が有る 勿論その通りだが、つまりこれはファイルシステムであって、その先に隠蔽出来るんだよ。 NTFSかext4かbitlockerを使ってるか圧縮DISKかをアプリは気にしないだろ。 それはOSがファイルシステムの違いを隠蔽してくれるから。これと同じ。 同様に、 cat-file で末端のファイルの形式の違いは隠蔽出来て、 ファイルシステムドライバ(とでも言うべきか?)で、ツリー詳細構造の違いは隠蔽出来るんだよ。 そしてそれは当然Gitにも入ってる。 だからその上位からはGit形式のファイルツリー/オブジェクトツリーを 普通のファイルシステム/オブジェクトと同じように見せることは可能なんだよ。 そして実際にそうしてるはずだよ。 だからな、自分が管轄してる階層以外の所は、はっきり言って関係ないしコードからも見えないんだよ。 Cの場合はその辺の階層意識が希薄で、実際君との空回りもこれだが、Gitもこの辺は正しく実装されてるはず。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/716
717: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 22:17:17.34 ID:GzQExg5g0 >>716 cat-fileは単にblobの中身を表示するコマンドってだけで、逆をやるblobを作るコマンドが用意されてるわけじゃない つまりここでソフトウェア的に階層がきれいに分かれてるわけじゃない ここを置き換えて自由な圧縮アルゴリズムを使えるようになっていたとしたら Libgit2 みたいな別実装のライブラリが出現する余地もなかっただろう ここは変にインターフェース階層なんて用意しなくて正解 gitはツールであるとともにフォーマットでもあるんだよ フォーマットに自由なオプションが用意されているとか別の実装を作る側としては悪夢でしかない http://mevius.5ch.net/test/read.cgi/tech/1650651945/717
718: デフォルトの名無しさん (ブーイモ MMeb-wVCK) [sage] 2022/10/31(月) 22:33:44.64 ID:DiR+92tnM そう、このクレーマーはGitのデータモデルやデータフォーマットとしての側面を見落としてる 確固とした優れたデータモデルを持つってのは立派なUNIX哲学の一つなんだけどねえ http://mevius.5ch.net/test/read.cgi/tech/1650651945/718
719: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 22:39:17.91 ID:h5Hfu9WR0 >>715 いいから、お前に git は向いてないから消えろ。git は万人向けじゃない。 自分で納得がいくものを作ってそれを使え。 どうせ多人数がかかわるようなプロジェクトとかには縁がないだろから、一人で寂しく使ってろ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/719
720: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 22:41:57.65 ID:J+3pjzxx0 >>717 > 逆をやるblobを作るコマンドが用意されてるわけじゃない ではなくて、用意するんだよ。 そうすれば何でも簡単に出来るようになるだけ。 実際は内部的には持っててコマンドとして公開してないだけだから、実装は簡単だし。 まあ本当にソフトウェア階層の話が通じないので困るが、もう一度懲りずに繰り返してみる。 Cで言うと、printfの先はcrt.oに繋がってるだろ。 アプリはprintfまで管轄してて、crt.oの階層は知らずに済む。 そしてcrt.oをそれぞれのマシンに用意すれば、同じソースコードが動くわけだ。(勿論コンパイル必要だが) で、そのcrt.oをネットワーク用のにしたらssh先の端末に結果が表示され、 DB用にしたらDBにデータが格納され、 普通のcrt.oを使えば画面に文字が表示される、というだけ。 階層を導入しても苦労する事はないし、 逆にC以外の言語ではI/O階層を導入する以外の方法がない程に一般的だよ。 (と言うかC以外の言語ではI/Oを直接叩くことは一般的に出来ない) Cは上から下まで全管轄出来るんだけど、無駄にやりすぎてるコードになりがちなのも事実。 なまじ出来るものだからやっちゃうのだけど、それは正しい構成ではないんだよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/720
721: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 22:45:45.36 ID:h5Hfu9WR0 >>720 糞理論いいから、まずは作って見せろ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/721
722: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 22:50:56.79 ID:GzQExg5g0 >>720 そんな入れ替え可能な階層分けが必要なら最初から全部C言語以外で作ればよかったんだよ でもリーナスはC言語を選んでほぼunixシステムコールを直接叩く方式で実装した hqなんかの方がお前の好みに近いだろうけど、hqは廃れてgit全盛となった むかしはこのスレにもhq信者が盛んにチョッカイかけに来たもんだけど、いまは何してるんだろうな http://mevius.5ch.net/test/read.cgi/tech/1650651945/722
723: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 22:55:40.76 ID:h5Hfu9WR0 もはや名前すらちゃんと覚えてもらえてない hg さん。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/723
724: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 22:59:10.92 ID:J+3pjzxx0 >>717 あーだからな、フレームワークを一度使ってみれば勉強になると思うよ。 フレームワークは型に嵌められるのだけど、 その型はそれなりの奴が一生懸命考えた型だから、それなりなんだよ。 なるほどこうすればファイルもネットワークもDBも全部同じコードでいけるのか、とか分かるよ。 ファイルシステム構造も、末端のファイル自体も、 上位には関係ないように隠蔽出来るし、難しいことではない。 実際、Git cat-file はGitファイルシステムを隠蔽してる、とも言えるだろ。 >>722 つかなんか勘違いしてると思うが、階層を分けたら遅くなるとかではないんだよ。 (厳密に言えば関数コールが1つ入るからその分は遅くなるが) http://mevius.5ch.net/test/read.cgi/tech/1650651945/724
725: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 23:00:32.54 ID:h5Hfu9WR0 >>724 いいからお前は自分で作れ git 使う必要はないぞ http://mevius.5ch.net/test/read.cgi/tech/1650651945/725
726: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 23:25:07.54 ID:GzQExg5g0 >>724 結局gitがどういう方式で実装されているかなんてことよりファイルフォーマットの方が重要ってことだ だからgitの実装とファイルフォーマットを切り離すようなインターフェース階層は必要無いしだれも実装しない 必要無いものを実装すれば余計なメンテの手間もかかる http://mevius.5ch.net/test/read.cgi/tech/1650651945/726
727: デフォルトの名無しさん (ワッチョイ 531d-rkLt) [sage] 2022/10/31(月) 23:25:57.99 ID:Sz6pT8cp0 すごい勢いでスレ消費してるな… >>676 1回のコミットで整理っていうのは、1つのコミットにまとめるってことかな? それとも1回のコマンドで済ませたいってことかな(何度もcherry-pickしたくない)? merge squashじゃあかんかね。 連続してない部分的なコミットをまとめるならrebase squashでもいいよ。 連続してないコミットなら、rebase -i使えばいいよ。いらないコミットはdropできるよ。 rebaseするときは、元のブランチ消えるから、必要なら復帰用にブランチ作っておくといいよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/727
728: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 00:01:33.71 ID:Jzc3CN/20 >>726 ファイルフォーマットというか、 Gitのキモはオブジェクトをハッシュでツリーにして管理すれば全て行けたって事だろ。 そして末端のファイルはblobだけど(既に言ったが)ディレクトリやJSONでもいいし、 中間のファイルフォーマットも実はどうでも良くて、 結局はメモリ上のオブジェクトツリーをどうやってファイルシステムにマッピングするかでしかないんだよ。 traverseさえ出来れば何も問題ないわけでさ。 例えば今のGitはハッシュ上2文字でディレクトリを作って分けてるが、 実は3文字の方が速い場合とかもあるはずだが、そこで階層を正しく切ってないと対応出来ないだろ。 まあこれについてはGitはおそらく対応出来てて、traverseエンジンは多分一つしかないから、それを交換すればいいだけ。 多分DBだとフラットの方が速い。(DB内に高性能のハッシュが実装されてる、というかDBってそれがキモなので) 或いは昔のNTFS(2000かXPの頃)だと、ディレクトリ内にハッシュがなかったので、 同一ディレクトリに20,000個とかファイルを置くととんでもなく遅くなったから、上8文字とか多めにしないと死ぬ。 この辺、つまり上何文字でディレクトリ切った方が速いかは、その下の階層のハッシュの実装によるでしょ。 こういうとき、ちゃんと階層を切ってれば、簡単に切り替えられる、ということ。 そんなの変数で~#defineで~ってのがC流かもしれんが、そういう事じゃないんだよ。 そこでぶった切ることによって、その先が、ファイルシステムであっても、ネットワークであっても、DBであっても、圧縮されてても、 要はtraverseさえ出来れば何でもいい、同じコードで走行出来るし、設定も自由に変えられるし、という自由度が得られる。 代償は関数コールが一段増えることだが、今はこれは問題にされないわけでね。 まあとにかく、後日にしようぜ。 ソフトウェアの階層の切り方についてはゆっくり考えてみてくれ。 基本的には、上記の通り、関数コールが一段増えるだけで無限の自由度が得られるだけ。 Cの場合は#defineマクロで実体を呼ぶかラッパを呼ぶか簡単に切換可能なので、 実際どうするかはともかく、ソースコードはメンテしておくべきだよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/728
729: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/11/01(火) 00:33:10.99 ID:kz7RaJ2H0 >>728 現状の.git/* の形式が十分にシンプル明解でこれが共通I/Fになっている すでにこの共通I/Fに沿っていろいろな実装が存在している 結果これを変更するための内部的なI/F階層が必要とされていない 内部的な構造としてはそんなことよりSHA-1をSHA-256に変更することの方が重要で実験的実装が進んでいる 切り口が違うからお前の言うような階層をつくってもハッシュの形式の変更には対応できない そんなくだらないことに割く労力は無い http://mevius.5ch.net/test/read.cgi/tech/1650651945/729
730: デフォルトの名無しさん (ワッチョイ a95f-Tk+f) [sage] 2022/11/01(火) 00:33:26.41 ID:1wY/uhrP0 長いからまとめたよ。 「俺は実装しないけど、俺以外の誰かが俺の推測に沿うように実装しておくべきなんだ。俺は実装しないけど。」 http://mevius.5ch.net/test/read.cgi/tech/1650651945/730
731: デフォルトの名無しさん (ワッチョイ 8b8f-5UCg) [sage] 2022/11/01(火) 01:23:19.93 ID:ju8ytuSJ0 なんでgitの話でフレームワークの話が出て来んのかな http://mevius.5ch.net/test/read.cgi/tech/1650651945/731
732: デフォルトの名無しさん (ワッチョイ 7997-uk66) [] 2022/11/01(火) 01:46:22.68 ID:Mxyz6tUC0 無限の自由度の代わりに組み合わせ爆発が生じてエッジケースでバグが出まくり、というのは嫌だという設計思想なんじゃないかな 確かにWeb系でDIするのは当たり前だけど、RDBMSやビジネスロジック以外はトラブってもいいWeb系と違ってgitでトラブル続発したら困るし。 ファイルシステムみたいなものでは。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/732
733: デフォルトの名無しさん (ワッチョイ 7997-uk66) [] 2022/11/01(火) 01:52:53.48 ID:Mxyz6tUC0 あと大体git自体が膨大なLinuxカーネルのVCSとしてかなり高速に、確実に動作する必要があったという大前提があるだろう。 そこを無視して汎用的にはこっちの方がいいってのは違うんじゃないかな。 汎用的な用途としてのVCSが欲しいならばpost-gitを作るしかないと思うよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/733
734: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/11/01(火) 02:08:49.56 ID:QdibabTL0 そもそも汎用性がある方が良いというのから幻想 道具は利用目的にあっているかどうかが全て十徳ナイフありがたがるやつは素人 http://mevius.5ch.net/test/read.cgi/tech/1650651945/734
735: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 03:17:45.94 ID:Jzc3CN/20 >>729 それも根本的に間違ってる。 ハッシュはハッシュでレイヤーを切るから、正しく構成されてるソフトウェアなら、 ハッシュを変更するのはハッシュ生成関数内だけで済むんだよ。 具体的には、全体は get_hash() を呼んでハッシュを受け取るようにしておいて、 その get_hash() 内でSHA-1かSHA-256かmd5かを変更するだけにするんだよ。 というかこんなの当たり前すぎてお前らが理解出来てないのにびびる。 オブジェクト指向では基本中の基本とされてることだぞ。 お前らプログラマじゃねえだろマジで。プログラマなら、ちょっと勉強し直さないとヤバいぜ。 ただこれは、本質的に「返ってくるオブジェクトのサイズは予想出来ない」事になり、 C的な「返ってくるオブジェクトのサイズは呼ぶ前に完全に予期出来ている(だいたい固定)」の世界にはフィットしない。 C++とかはデストラクタで、その他言語はGCで対応するのが常策だが、 これに関してはバイナリにハードコードで問題ないから#defineでいい。 ただC++だと#defineは悪とされてるから、絶対にデストラクタでやるんだ!いやスマポだ!みたいな奴も居て、 それを勧めてくるからLinusはブチ切れてるわけだが。 だけどハッシュサイズなんて動的に変化すること無いのだから、#defineで全く問題ない。 そしてそれに手こずってる時点で、#defineでの切換すら出来ない、 全体がそれぞれで勝手にSHA-1を生成してたコードになってるって事だよ。 それはマジで糞だよ。(まあ、でも直せば済む話ではあるんだけどさ) http://mevius.5ch.net/test/read.cgi/tech/1650651945/735
736: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 03:19:13.38 ID:Jzc3CN/20 >>732,733 これをDIと呼ぶのか?はさておき、DIでバグが増えるなんて事はないよ。 そして、get_hash()でのオーバーヘッドは関数呼び出し一回でしかなく、 それで致命的に遅くなるなんて事もないよ。 というか、GitのマージってI/Oバウンドだと思ってるが違うのか? http://mevius.5ch.net/test/read.cgi/tech/1650651945/736
737: デフォルトの名無しさん (ワッチョイ d9e4-Ojdt) [sage] 2022/11/01(火) 03:55:08.59 ID:kz7RaJ2H0 >>735 ただ単純にハッシュアルゴリズムをSHA-1からSHA-256に変更するわけじゃないぞ 既存のSHA-1リポジトリも全部(リベース状態にすることなしに)SHA-256で運用できるようにしたりするんだよ gitの開発はリポジトリのフォーマットの継続性をとても重視してる http://mevius.5ch.net/test/read.cgi/tech/1650651945/737
738: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 08:06:29.98 ID:Jzc3CN/20 >>737 同じだよ。 正しく構成されてる場合は何種類混在しても全く問題ないし、簡単に変更可能だ。 つかマジでそれオブジェクト指向(OOP)の基本中の基本だから。 ただ、混在なら、Cで一般的に使われてるSIZEOFの#defineでは対応出来ないが、 Linusのコードなら、Cでは一般的に禁止されてる小文字マクロで 普通にそこら辺の関数もマクロだらけの可能性があり、(linuxカーネルコードがそう) この場合は、#define内のマクロ定義を一箇所変更するだけで対応可能ではある。 が、まあ、マクロ云々の話は本来はNGとされてて他言語では厳禁だから、いわゆる正しい方策を示すと、 全体の関数はハッシュの中身が何か知らない状態で記述するんだよ。 get_hash()でハッシュのポインタを貰いました、中身は知りませんので具体的な操作はできません、 なので一々投げ返して操作して貰いますがよろしいですね?とする。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/738
739: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 08:06:50.06 ID:Jzc3CN/20 と書くと意味不明だが、この場合は要は貰ったポインタを一々投げ返して操作してもらう。 具体的には、 Hash* hp = get_hash(myObject); // myObjectからHashを生成して貰う、Hashの実体は何か知らない Stream* sp = traverse(hp); // hashをtraverseに投げてstraem的な何かを示している末端のポインタを貰う、traverseはtraverse出来る何か、ファイルかDBかssh先のストレージか知らんが、とにかくtraverse出来る何かをtraverseして、末端のポインタを返す GitObject* go = cat_file(sp); // cat_fileに末端のポインタを渡して、GitObjectを貰う とする。これをOOP文法(Cにはないが)で一般的にはメソッドにして、 Hash* hp = get_hash(myObject); // 管理するのはhashのポインタのみ、中身は知らない GitObject* go = hp.traverse().cat_file(); // hashを手がかりに翻訳させ、GitObjectを得る とするんだよ。結果、全体のコードは実際のHashの中身がSHA-1かSHA-256かなんて知る必要もないし、 とにかくtraverseに投げてさらにcat_fileに投げれば、欲しかったGitObjectのポインタが得られる、という構造にする。 こうすれば、本体のコードはハッシュの種類(SHA-1かSHA-2576か)とは依存しなくなる(=どちらでも全く同じバイナリで動かせるようになる) そして travserseする実体がDBであったり、末端ファイルの中身がJSONであったりしても、 本体のコードはそれに依存しないから、何でも自由に選べるようになる。 本体のコードは、自身が使う GitObject の中身は知っているが、 それ以外はhashを手がかりに、treeはtraverseに翻訳させ、末端の何かはcat_fileに翻訳させ、その具体的な実体は何か知らない状態で記述するんだよ。 これは拡張性ではなく保守性を上げる為の方策だが、マジで、あおり抜きで、OOPでは基本中の基本だ。 だからフレームワークとかはこうとしか書けないように構成されてるから、一回使ってみれば上手く矯正されると思うぞ。 とにかく、このレベルが理解出来ないのはヤバイってもんじゃない。 多分OOPの授業では1日目とかのレベル。 もっとも、1日目で意味を理解出来る奴は居ないが。 だからOOPって何?みたいな質問が掲示板上でもやたらでてくるわけでさ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/739
740: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 08:51:54.94 ID:Jzc3CN/20 補足。 分からなければ「OOP 抽象化」でググって色々読んでみてくれ。 死ぬほどでてくるはず。マジで基本中の基本だから。 ハッシュを交換することに手こずるようなら、その『コード』は間違いなく糞だ。(Git自体が糞と言っているわけではない) ただ、修正すればいいだけ、要は漏れなく上記のようにしてしまえばいいだけではあるが。 正しく構成すれば、Hash変更なんて簡単に出来るし、 そもそもそうなってないコードなんてOOPでは存在を許されてない。 (そうとは書けないように構成されてる。 それを強制的にやらせるシステムの一つがprivateだが、これはこれで間違った使われ方も多いが) http://mevius.5ch.net/test/read.cgi/tech/1650651945/740
741: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/11/01(火) 09:16:06.92 ID:kz7RaJ2H0 長々とご苦労さんだがお前SHA-256対応の意味が理解できてないよ http://mevius.5ch.net/test/read.cgi/tech/1650651945/741
742: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 09:26:52.60 ID:Jzc3CN/20 >>741 俺は以下記事の理解書いてる。 俺が書いた事の意味が分からないのは君の問題。 https://www.infoq.com/jp/news/2020/11/git-2-29-sha-256/#:~:text=%E3%81%A4%E3%81%BE%E3%82%8A%E3%80%81Git%E3%81%AF%E3%80%81%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E5%90%8D%E3%81%A8%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%ABSHA-256%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B0%E3%81%97%E3%81%84%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E5%BD%A2%E5%BC%8F%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%9F%E3%80%82,%E3%81%93%E3%81%AE%E6%96%B0%E3%81%97%E3%81%84%E5%BD%A2%E5%BC%8F%E3%81%AF%E3%80%81%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9FSHA-256%E5%90%8D%E3%81%A8SHA-1%E5%90%8D%E3%81%AE%E9%96%93%E3%81%AE%E5%8F%8C%E6%96%B9%E5%90%91%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%82%82%E3%83%97%E3%83%AD%E3%83%93%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E3%80%82 ただ、初めてOOPを示されていきなり意義を理解出来る奴はほぼ居ないのも事実。 でも、君は確実に老害扱いされてると思うよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/742
743: デフォルトの名無しさん (ワッチョイ f15f-iYvO) [sage] 2022/11/01(火) 09:32:09.77 ID:WFTKMpG40 なんだか知らんけど5chでうだうだ言ってて何になるの http://mevius.5ch.net/test/read.cgi/tech/1650651945/743
744: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/11/01(火) 09:36:58.90 ID:kz7RaJ2H0 >>742 君はその記事の意味することを理解できてないね コミットオブジェクトの構造とか役目を理解出来てないと難しいかもしれない http://mevius.5ch.net/test/read.cgi/tech/1650651945/744
745: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 09:57:34.79 ID:Jzc3CN/20 >>744 そう思いたいんだろうけど、残念ながらそうじゃない。 少なくとも君はソフトウェア階層やOOPの基本事項について全く理解出来てない。 だから今、老害と言われ続けるか、再び学び直して熟練者と言われるかの分水嶺にいるだけ。 俺は君に何も強制することは出来ないが。 確かに俺はGit初心者なので、記事の理解は間違ってるかもしれない。 でも、ハッシュの中身や長さが変わったり混在したところで、 正しく構成されてるソフトウェアなら数行の変更で対応可能なのは事実だよ。 そして君と同様の人達によってGitが作られているのであれば、 そりゃそうなってなくて苦労するんだろうさ。 まあいいけどね。もう水掛け論だから終わりにしようぜ。これ以上やってもお互い得る物もないし。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/745
746: デフォルトの名無しさん (ワッチョイ 8b8f-5UCg) [sage] 2022/11/01(火) 10:12:34.67 ID:ju8ytuSJ0 > GITは、すべてのファイルオブジェクトとコミットの識別と整合性チェックをSHA-1に強く依存しています こう書いてあるのになんで無視するんだろう http://mevius.5ch.net/test/read.cgi/tech/1650651945/746
747: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/11/01(火) 10:29:09.24 ID:kz7RaJ2H0 >>745 数行で対応w それが出来ないgithubは無能集団なんですねw 糞MSに買われちゃうぐらいだから仕方ないか http://mevius.5ch.net/test/read.cgi/tech/1650651945/747
748: デフォルトの名無しさん (オッペケ Src5-8VyY) [sage] 2022/11/01(火) 12:34:56.06 ID:lDKItQe4r Git初心者に語らせると頓珍漢な文章が生まれるという好例 http://mevius.5ch.net/test/read.cgi/tech/1650651945/748
749: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/11/01(火) 12:39:40.93 ID:QdibabTL0 >>745 お前日本語読めなさそうだな ましてやリンク先にある英語とかかけらも理解できてないだろ 混在とかじゃないぞ。二つを同時につけて「安全」に相互変換するということだぞ 安全にすることが目的でSHA-256を使えば解決みたいな話じゃない お前みたいなのが目的と手段を取り違えるタイプの典型 OOPとかアホなプログラマでも理解できる単純なことなわけないだろ そんなんで済むならとっくに終わってる まずは常識で考えろ できないなら黙って勉強しろ http://mevius.5ch.net/test/read.cgi/tech/1650651945/749
750: デフォルトの名無しさん (ワッチョイ 699f-1Eu/) [sage] 2022/11/01(火) 18:29:25.93 ID:/+vO/8+o0 長文すげー http://mevius.5ch.net/test/read.cgi/tech/1650651945/750
751: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/02(水) 05:40:42.57 ID:n+gr/3CY0 >>749 どうであれ同じだよ。 複数付けようが、何をどう組み合わせようが、 抽象化の向こうの実体については知らないし、取り扱うコードも存在してないから、 同じバイナリで動作するんだよ。それが抽象化と隠蔽で、これはOOPの基本中の基本。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/751
752: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/02(水) 05:41:43.29 ID:n+gr/3CY0 んー、お前ら完全に化石だわ。若い奴からは確実に馬鹿にされてるよ。 というか、現在において有名OSSにこんな化石居住区が存在してたことにびっくりだわ。 >>747 数行ってのは誇張ではなく、実際にそんなもんなんだよ。 例えばMMDは3DVision対応に20-30行と言ってるが、 > そのため、樋口氏がMMDの3D Vision対応に要したのは、20~30行程度の簡単なコーディングのみだった。 > https://pc.watch.impress.co.jp/docs/topic/feature/415525.html この樋口氏はVer5->7でDirectX対応してて、その時もインタビュー受けてて(ググッても出てこないが) 確か「よくよく確認して、実際に変更する必要があるのは2-3行だったのでほっとしました」 とか言ってたはず。 これは特殊ケースではなく、こうなるように設計するんだよ。 これに対してGitはマニュアル見てもそういう思想が全く見あたらず、「頑張ればいいよね」で終わってる。 だから糞なソースも「頑張って」修正して何とかするんだ、のノリだ。 ソフトウェア工学はそんなのは20年前にクリアしてて、今は、 A. どうすれば変更に対して強くなるか(仕様変更があってもソースコードを変更せずに済むか) B. どうすればそもそもソースコードを記述する必要すらなく出来るのか(全ての状況に対し同じバイナリで対応する) C. どうすれば出来るだけ早い段階でバグを検出出来るか とか移ってて、大体馬鹿がCに対して悪ノリしてるからLinusがこき下ろす事態になるのだが、 ABはちゃんとやらないと話にならないよ。 だからまあ、次のGitは「勉強をがんばらなくてすむGit」で、 実装で一番簡単な方法は、Gitをバックエンドに使ってシェルスクリプトでラップすることだよ。これらは既に言ったが。 でも君らは「頑張らなくちゃいけない」「頑張るべきものだ」と思っちゃってるみたいだから、 今のGitプロジェクトからはこれは出てこないだろう。 となると、上記のようにして簡単に実装したNext-Gitに成果をかっさらわれ続ける事態になると思うよ。 ちょうどGNU/Linuxの形に似てるが。 あれはLinusが悪いわけではないし、ストールマンも別になんとも思ってないようだけど。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/752
753: デフォルトの名無しさん (ワッチョイ c114-Tk+f) [sage] 2022/11/02(水) 06:01:09.34 ID:z+vraLDY0 > これは特殊ケースではなく、こうなるように設計するんだよ。 > これに対してGitはマニュアル見てもそういう思想が全く見あたらず、「頑張ればいいよね」で終わってる。 それあなたの感想ですよね? gitはソースコード1行程度で変更終わりですよ http://mevius.5ch.net/test/read.cgi/tech/1650651945/753
754: デフォルトの名無しさん (ワッチョイ c114-Tk+f) [sage] 2022/11/02(水) 06:03:01.35 ID:z+vraLDY0 > 実装で一番簡単な方法は、Gitをバックエンドに使ってシェルスクリプトでラップすることだよ。これらは既に言ったが。 シェルスクリプトは移植性低いって分かってる? シェルスクリプトでラップしようものなら Linuxでは動くがFreeBSDでは動かないってことが しょっちゅう発生する シェルスクリプトで頑張るものじゃない http://mevius.5ch.net/test/read.cgi/tech/1650651945/754
755: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/11/02(水) 07:01:05.57 ID:S2ENS6Jw0 git の一部機能は git コマンドを使ったスクリプトで実装されていたんだけど、多くのユーザーの要望に応える形でそれらのC言語化進めてる http://mevius.5ch.net/test/read.cgi/tech/1650651945/755
756: デフォルトの名無しさん (JP 0H8d-8VyY) [sage] 2022/11/02(水) 09:34:00.28 ID:33j+wJW8H シェルでラップw USPから悪い影響でも受けたか? http://mevius.5ch.net/test/read.cgi/tech/1650651945/756
757: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/11/02(水) 10:35:32.50 ID:sFE/M4aa0 OOPなんて初心者プログラマ訓練ギブスってことを理解できなくてアホ理論展開しているやつがいてw http://mevius.5ch.net/test/read.cgi/tech/1650651945/757
758: デフォルトの名無しさん (ワッチョイ fb66-Q7eZ) [sage] 2022/11/02(水) 14:42:23.54 ID:LlnSL/r70 OOPなんか、そん辺のサンデープログラマでもかなり深い所までメリットデメリット含め浸透してるがな。 関数指向やクロージャがある言語も同様で もはや当たり前のようにハイブリッドになってて一部の原理主義者以外いい塩梅で使ってるから話題にはならん。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/758
759: デフォルトの名無しさん (オッペケ Src5-5UCg) [sage] 2022/11/02(水) 15:33:51.58 ID:4T0OIw/dr OOPそれほど語るなら、お前の大好きなシェルスクリプトはみんなOOP意識して作られてるのかって感じだな http://mevius.5ch.net/test/read.cgi/tech/1650651945/759
760: デフォルトの名無しさん (ブーイモ MMdd-ntN1) [sage] 2022/11/02(水) 18:08:31.10 ID:mw55lzgRM リーナスを中心としたOSSコミュニティの起源にタネンバウムとのモノリシックカーネル・マイクロカーネル論争があることを知らないのかな? 結果として無駄な抽象階層を積み重ねることの無意味さをLinuxカーネルの成功が証明してしまった もちろんLinuxカーネルもファイルシステムとか必要なとこは抽象化されてるけどね http://mevius.5ch.net/test/read.cgi/tech/1650651945/760
761: デフォルトの名無しさん (ガックシ 06dd-uk66) [] 2022/11/02(水) 18:41:51.51 ID:1AIcQZnX6 今どきの若い奴(というか最新の風潮)ってなんでもかんでもオブジェクト指向を徹底するって感じじゃないと思うけどなあ それこそオブジェクト指向主義みたいなのが滅茶苦茶強かったのって20年前ぐらいじゃない? WindowsもNTでマイクロカーネルにしたけどオーバーヘッドデカすぎて一部はカーネル空間に戻したりしたでしょ。 SIerの階層が深い開発なんかだとオブジェクト指向を徹底しないと事故が起こりそうだけど、そういうとこしか知らない人間なのか? http://mevius.5ch.net/test/read.cgi/tech/1650651945/761
762: デフォルトの名無しさん (オッペケ Src5-8VyY) [sage] 2022/11/02(水) 22:26:03.48 ID:KtYxSAYnr 何でもかんでもシェルでやろうとするやつは病気 名前を呼んではいけないあの開発手法とか推してそう http://mevius.5ch.net/test/read.cgi/tech/1650651945/762
763: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 05:47:24.09 ID:AHw2USmo0 >>755 それはどのプラットフォームで問題になったの? 賢い選択とは思えないけどね。 具体的なデメリットは既に666で挙げたとおり。 俺はシェルの互換性問題なんて有ったとは思えないけど、 (昔からsh《bsh》は互換性は高かったし、今はその後継のbashで統一されてる。 ああ確かにcsh/tcsh/ksh/zshはゴミだったし死滅したよ) それが問題なら、GitのC化ではなく、直接シェルの互換性を上げるのが常策だよ。 互換性がC化で達成出来るのなら、 既にあるbash(多分C)ソースをコンパイルしただけのものを同梱し、 gsh(=gitsh)だ!これを使え!と強弁すれば済んだろ。 なんかやっぱり無能の働き者を地で行ってる気はする。 仕事を減らす努力をしてないよね。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/763
764: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 05:49:10.00 ID:AHw2USmo0 >>758 その通りだ。だからアマチュアの樋口Pも正しく対応出来てた。 だからこそ、このスレのこれまでのやりとりに驚いている。 今時初心者でも、他言語スレでもあり得ない流れだ。 で、パッチ出てきたけど、あれでは駄目だね。 彼等はC流のメモリ管理の方法を知らず、Gitは完全に糞コードで出来てる。 あれでは他にもメモリリークだらけだよ。 (ただこれも想定内っぽいし、 リークしたところでアプリとしては大した問題でもないのも事実だが) 彼等は、バグを直す努力はしているが、 バグが出にくいコードにする努力は全くしてない。 OOPもやりすぎると問題だが、何故彼等はそうするのかを学んで、 美味しいところだけ貰えばいいのにとは思うよ。 OOP原理主義者も、Gitプロジェクトやこのスレ民みたいなOOP排除原理主義者も、同様に問題だよ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/764
765: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 06:07:03.27 ID:AHw2USmo0 ただ見る限りGit界隈は密結合主義のようだ。 つまり、Gitと知識的に密結合した、Gitに詳しい奴だけがGitを使うべきであり、 tutorial1が基本コマンドなら普通はtutorial2は応用コマンドのところ、 なんと内部データ構造の紹介になってるし、 (ただこれは俺には極めて有効に作用したが、普通はブーイングの嵐だろう) http://mevius.5ch.net/test/read.cgi/tech/1650651945/765
766: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 06:07:22.90 ID:AHw2USmo0 ソースコードも密結合、これは馬鹿除けだ!と言い放つ。 糞コードでもパッチの手数で勝負だ!カリスマLinusならモグラ叩き志願者は無限に募れる! とまあ、他の誰も出来ないアプローチだね。 ただまあ、ソースコードを清潔に保つ目的は長期的メンテの為であり、 それは実際出来てるしいいだろ、と言われれば、はーそうですねー(棒)だが。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/766
767: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 06:07:59.96 ID:AHw2USmo0 これ見てたら、buggyな糞コードでもとりあえず動けば受け入れてどんどん改訂し、バグもパッチの手数で勝負するのと、 普通のプロジェクトがやってる、レビューして駄目なコードは最初からrejectするのと、 (つまり手間をかけてもrejectされる可能性があるからコードを投げるのを躊躇される) どっちが良いのだろう?とは考えさせられるよ。 リソースが無限にあるOSSでは、前者の方がいいのだろうか? LinusはBillJoyに対して「オープンソースを理解してない」と思ったらしいが、こういう事なのだろうか? (この発言はLinus著作本にあるらしいが、俺は読めてない) しかしこのアプローチでは、絶対に浄化はしない。 自分の糞を片づけるのは仕方ないとして、 他人の糞を片づけたがる奴はいないし、そもそもその界隈が掃除に価値を置いてない。 しかし糞コードならどんどん投げてもらえるし、それらを受け入れる限り、進化が止まることもない。 はーなんだかねー。なるほど研究者と色々衝突するのも分かる気はする。 そういや大昔「伽藍とバザール」読んだなーと思って今読み返してみたが、これがバザールなのか? (NGにかかったので分割した) http://mevius.5ch.net/test/read.cgi/tech/1650651945/767
768: デフォルトの名無しさん (ワッチョイ d9e4-Ojdt) [sage] 2022/11/03(木) 10:41:57.59 ID:NhDXzDSd0 それだけ文句あるなら本家MLで言うか自分で作り直してみろよ軍師様 これだけ大口叩いておいて英語のMLでコミュニケーションとれないとかだったら笑うが Git は世界中のプログラマが使ってる最重要プロジェクトで、これが改良されるとなれば世界中から絶賛される http://mevius.5ch.net/test/read.cgi/tech/1650651945/768
769: デフォルトの名無しさん (ワッチョイ 699f-1Eu/) [sage] 2022/11/03(木) 10:46:51.87 ID:odT0DHDr0 まだやってのか 暇そうだな http://mevius.5ch.net/test/read.cgi/tech/1650651945/769
770: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 13:22:38.17 ID:AHw2USmo0 >>768 それは無理だね。 仮に時間が十分にあったとしても、俺が改善出来るのはソースコードであって、アプリではない。 アプリの改善には良い仕様にする事が最も重要で、実装は実は大した問題ではない。 (使う分には十分に動けばなんでも良くて、それが糞コードで出来てたから何?でしかない) GitはLinus本人が当時のVCSの問題点を全て把握してたからいい仕様になった。 俺はそうじゃない。今の俺がやったら俺にとって都合がいいだけで、他にとっては糞な物にしかならない。 ただ実際はLinusもこれで、みんな乗り換えて来たから同じ問題を抱えていたんだろ、 という解釈らしいが、いずれにしても使い込んでる奴じゃないといい仕様には出来ないんだよ。 そして例のブランコ問題 > 顧客が本当に必要だったもの > https://dic.nicovideo.jp/a/%E9%A1%A7%E5%AE%A2%E3%81%8C%E6%9C%AC%E5%BD%93%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%A0%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE もあり、顧客自身が実装してるんだから、そりゃ商用VCSでは絶望的に仕様的に太刀打ち出来ない。 そしてソースコード戦略も違う。Gitはコードレビューとか無い世界なんじゃないかな? それで回るってのがスゲエが、多分これは「伽藍とバザール」の衝撃を追体験しただけなのだろう。 ソースコードを綺麗にしたら、新機能の追加が断然早くはなるけど、それは同じ人数での話で、 ここも手数で勝負だ!と来られたら、為す術もない。 ソースコードなんて糞でいいんだ、人数さえ有れば!では、研究者とは対立するよ。 なるほどエンジニアリングの天才だというのも納得ではある。 だからまあ、Gitを根本的に覆すにはGitよりも良い仕様が必要で、これは本当に難しいんだろうさ。 ところで、やはり俺のワークフローではIndexが邪魔なので削除しようと思うんだけど、 そもそもあれはどう使う為に設計されたものなのだ? 多分Indexの存在が一番直感的でなく、『説明されてないと』間違える所だと思うんだが。 今のところadd直後にcommitしてて、邪魔でしかない状態で使ってる。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/770
771: デフォルトの名無しさん (ワッチョイ 7997-uk66) [] 2022/11/03(木) 13:30:44.47 ID:9oLRzF140 index stageなかったら複数ファイルの変更を一度にcommitできないじゃん。コミット粒度の問題から、全部の変更をcommitしたいわけでもないし。 どのcommitを取ってきてもちゃんと動く状態にするのが普通だからどう考えてもいるでしょ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/771
772: デフォルトの名無しさん (ブーイモ MMeb-ntN1) [sage] 2022/11/03(木) 13:52:50.16 ID:/4IN/B1bM indexの意味がわかってない馬鹿が全然関係無いファイルをコミットしてリポジトリをブチ壊す http://mevius.5ch.net/test/read.cgi/tech/1650651945/772
773: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 14:35:27.11 ID:AHw2USmo0 >>771 > index stageなかったら複数ファイルの変更を一度にcommitできないじゃん。 いや普通に出来るよ。曖昧だったが、俺は git add -u; git commit -m "message"; で使ってる。 以降はワークフローの話だからどちらが正しいとかいう事ではないが、 > コミット粒度の問題から、全部の変更をcommitしたいわけでもないし。 これは若干邪道というか基本的に全部commitするものだろうし、commitしてから前に進めばいいだけで、 > どのcommitを取ってきてもちゃんと動く状態にするのが普通だから これは俺の場合はちょっと違ってて、動かないのもcommitしてるしそれでいいと思ってるんだよ。 master/developブランチでは全部動くべきだけど、 featureでは途中のは動く必要ないし、動くようになったらdevelopにマージして消滅するんだろ? なら特に問題ない気がする。 途中経過を記録してないことの方が問題で、記録しすぎてたら出力から間引けばいいだろ、というノリ。 だからdiffが画面1枚に収まらないようならcommitする感じ。 実際はbanchを使うのはこれからで、git flow を真似して上記のようにするつもりだが、何かまずいかな? http://mevius.5ch.net/test/read.cgi/tech/1650651945/773
774: デフォルトの名無しさん (ワッチョイ 8b8f-5UCg) [sage] 2022/11/03(木) 14:40:47.35 ID:5PP47Osh0 git分からない思想も理解できないならSVN使えば? http://mevius.5ch.net/test/read.cgi/tech/1650651945/774
775: デフォルトの名無しさん (ワッチョイ 7997-uk66) [] 2022/11/03(木) 14:46:46.91 ID:9oLRzF140 >>773 そりゃgitの設計思想で想定されたコミットの仕方をしていないからindex stageがいらないと感じるだけでしょ。 大多数は設計思想通りに使っているので、index stageが必要だと理解していると思うよ。 だから、「どう使うために設計された」かと聞かれれば、gitの思想通りにコミット粒度を適度に保つためだとしか言いようがない。 「俺は違うから俺はいらない」はそれはそうだろうが、だから何?って話になる。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/775
776: デフォルトの名無しさん (ブーイモ MMeb-ntN1) [sage] 2022/11/03(木) 15:04:33.12 ID:jVDh6EB5M 適当なタイミングで時系列に修正を記録していくものだと思ってる阿保には理解できないVCS http://mevius.5ch.net/test/read.cgi/tech/1650651945/776
777: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 15:05:56.85 ID:AHw2USmo0 >>775 git add -u を複数回して粒度を上げて動くものだけcommitしてもいいのだけど、 俺の場合は10回に1回程度は2-3回前の変更とdiff取った方が見やすいことがあって、 その場合にhash控えておくのが面倒だし、gcされてたらさらに面倒だし、gc切るのもまた邪道だろうしで、 動かないのもcommitしてfeatureの途中は動きませんと割り切るのが一番ましかと思ってる。 まあでもありがとう。 粒度調整の為ならこちらの予想の範囲内ではあった。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/777
778: デフォルトの名無しさん (ワッチョイ a95f-Tk+f) [sage] 2022/11/03(木) 15:26:33.67 ID:O+O1uzzM0 >>777 > その場合にhash控えておくのが面倒だし、gcされてたらさらに面倒だし、gc切るのもまた邪道だろうしで、 N個前との diff は git diff HEAD~N でハッシュを控える必要もないし gc のくだりは何のこと言ってるのかわからない。 > 動かないのもcommitしてfeatureの途中は動きませんと割り切るのが一番ましかと思ってる。 ローカルブランチなら別に構わないけど、そのノリで作られたブランチをそのままレビューするのは効率悪い。 なのでマージ前のブランチをレビュー対象とする開発では push の際に整理することになるから、 都度整理の際にインデックスはとても有用。 他にも、作業中に全然関係ない typo 直したりするのにも使える。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/778
779: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/11/03(木) 15:53:58.77 ID:HnXRQ5rf0 index の重要性が分からないやつが git 語ってて草。 素人向けに説明すると git の役目は他人に読んでもらうやすい分かり易いパッチを仕上げること。 個人で作る分にはそれほど関係ないが共同作業するには他人への分かり易さ、見た目は最重要といっていい。 料理に例えるならフライパンやまな板のまま出すんじゃなくて、皿に盛って食べ易くしてから出すのが基本。 ワークツリーがフライパンで、インデックスが皿。フライパンからでも直接食えるけど、綺麗に皿に盛って、そこで丁寧にチェックしてから提供すれば他人の作業効率が上がる。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/779
780: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 16:18:44.28 ID:AHw2USmo0 >>778 > N個前との diff は git diff HEAD~N でハッシュを控える必要もないし gc のくだりは何のこと言ってるのかわからない。 (tutorial2を読んだだけの理解だから間違ってるかもしれんが、) 669で言ったように、Gitが分かりにくいのは業務プロセス名がコマンドに付いてるからだよ。 実際には、git add でスナップショットを取ってて、(←これが直感的に認識出来ない) git commit でツリーの頭にそれを付け加えてるだけ。 だからaddしてないと付け加えるべきスナップショットがないからコケる。 それで、>>103-107、stashしてたら何処かに存在してるし、 実はaddした時点で保存されてるから、こちらもgcが行われる以前ならhashさえ分かれば引っ張ってくることが可能。 ただし次のaddでindex先が切り替えられてダングリングになり、gc対象になるから、 存在してるかどうかはgcの動作具合による。 (だから初心者向けには、git add でスナップショットが取れてるなんて死んでも言えないし、余計に分かりにくくなってる) 俺が粒度を上げるのなら、commitせずに複数回addする事になり、 2回以上前のはツリーから外されてるのでHEADからでは辿れない。(git fsckなら探せるはずだが) だから動かない物もcommitしてHEADから辿れるようにしようとしている。 まあちょっと書き方が悪かったかもしれんが。 なので、実際の動作は git add 改め ss (take SnapShot)、git commit 改め relinkなのだけど、 ついでに relink もリストラして ss (git add -u; git commit) と ss -m "message" (git add -u; git commit -m "message")でいい。 これなら alias ss='git add -u; git commit' で済むし、 直感的になってアホでも使える。コミットメッセージが空なら動かない。 これが俺流の「勉強しなくていいGit」だよ。Indexよさらば。アホ向けGitこんにちは。 > マージ前のブランチをレビュー対象とする開発では push の際に整理することになるから 本体リポジトリとルールが違うと収まりが悪いのは了解した。 > 他にも、作業中に全然関係ない typo 直したりするのにも使える。 なるほどこれは微妙に便利かも。 (しかし俺流アホ向けgitでもこれは問題なく出来る。何せgitコマンドはスルーだからな) http://mevius.5ch.net/test/read.cgi/tech/1650651945/780
781: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/03(木) 16:20:05.12 ID:AHw2USmo0 >>779 いやレビュー対象はcommit済みで、index上ではないだろ。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/781
782: デフォルトの名無しさん (ワッチョイ 8b8f-5UCg) [sage] 2022/11/03(木) 16:22:38.83 ID:5PP47Osh0 うんうんわかった 大人しくSVN使え その方が君には向いている http://mevius.5ch.net/test/read.cgi/tech/1650651945/782
783: デフォルトの名無しさん (ワッチョイ d9e4-Ojdt) [sage] 2022/11/03(木) 17:18:17.27 ID:NhDXzDSd0 >>781 779はindex上でレビューするんじゃなくて、indexにいれた状態にしてからdiff --cachedでcommit前の確認をするってことじゃない?自分もそれやるよ http://mevius.5ch.net/test/read.cgi/tech/1650651945/783
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 219 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s