[過去ログ] Git 18 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
652(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/30(日) 22:10:12.22 ID:IOU525bY0(4/6) AAS
>>651
マジかー。クソ過ぎ。仕様考えた奴馬鹿すぎ。
スクリプトに食わす為に先頭の+-の文字を変更するオプションとかあるのだけど、
これでいいと思った奴は死ねだな。
653(1): デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/30(日) 22:14:38.98 ID:b5HYhcbp0(3/4) AAS
>>652
git はパッチ管理システムなんだから、それ以外が考慮されてると思う方が贅沢。
654(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/30(日) 22:34:52.61 ID:IOU525bY0(5/6) AAS
>>653
いやそうじゃねえ。というかこれはソフトウェアの構成を間違ってるよ。
diffだってバグはあるのだから、内製は止めて、普通にdiffのdllをコールすべきなんだよ。
GitはLinusが1日で作ったらしいし、最初はどう考えてもそうなっていたはず。
だから俺は config の中にデフォで diff -u みたいなエイリアスがあるのかと思ってた。
diffを内包する事に、何のメリットもない。
この名残がexternal driverで、それが使えればいいという事なのだろうけど、
ご丁寧にこれを禁止するオプションまである。(-no-ext-diff)
多人数の開発では、同じ画面を見ていた方が何かと楽だから、揃える方向で努力するのはごもっともだが、
禁止するのは違う。どこかでおかしな思想が混入しているよ。
そもそも、それ以外を考慮しない=外部コマンドで十分出来る事はdllを呼ぶ、であって、
この構成だとGitがdiffも構成してるから、君は認識を間違ってる。
Gitは明らかにおかしい方向で無駄な事をやってしまっている。
そしてそれは君の価値観的にもNGなはずだよ。
655(1): デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/30(日) 23:37:53.37 ID:b5HYhcbp0(4/4) AAS
>>654
Linus のこと知ってるのなら長文書く前に調べろ。
git 作る以前から、みんなが勝手なフォーマットでパッチ送って来るのは非常に困るので推奨のパッチ形式を決めてあったんだよ。
で git 作る時に強制的にその形式に統一されるようにした。どうしても他の形式で出したい場合はひと手間かかるのが設計意図どおり。
656: デフォルトの名無しさん (ワッチョイ 8b8f-5UCg) [sage] 2022/10/30(日) 23:53:15.06 ID:LXgcbV870(1) AAS
Linusも言ってたような気がするけど、気に食わなければ自分で作れ
以上
657(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/30(日) 23:58:47.31 ID:IOU525bY0(6/6) AAS
>>655
Linusはデフォを -u にして、patch送るならオプション無しで送れ、としただけでしょ。
これは間違ってない。
問題は、元のdiffの形式の出力が出来なくなってる事だよ。
オプションで出来るよ、でよかっただけ。
オプションすら禁止なら、今のgit diff に各種出力オプションがあること自体が君的に矛盾するだろ。
何故君がそんな意味不明なポジショントークをするのか分からないが、
Gitが方針を間違ってるのは事実だよ。
オプション禁止なら、git diff にオプションを何一つ付けてはいけない。
(仮にこれであれば、賛同はしないが理解はする)
ただまあ、ドキュメントの雰囲気だと、
おそらく昔は --no-patch で元のdiff形式が出せたのではないかと推測される。
君がどこまで知っているのか知らないけど、多分君の歴史理解も間違ってると思うよ。
658: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 00:04:41.05 ID:h5Hfu9WR0(1/9) AAS
>>657
お前以外は誰もオプションとか必要ないから作ってないだけだよ。むしろ邪魔。どうしてもやりたければ外部コマンド指定でできるんだからオプションとかでやるよりよっぽど汎用性がある。
オープンソースなんだからオプション必要ならお前が自分でつくればいい。
659: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 00:08:19.51 ID:h5Hfu9WR0(2/9) AAS
あと −−no-patch には昔からパッチ出さない機能しかないぞ。頭悪い推測とかする暇があったら過去のソース確認してこい。
それこそ git で調べればすぐだぞ
660(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 00:21:01.40 ID:J+3pjzxx0(1/22) AAS
>>859
そうか?ならマニュアルの
> to cancel the effect of --patch
の部分は明らかに不要だから削除要請出しといてくれ。
というか君の「昔」がどれ位か知らんが、Linusの言ってた?フォーマットが統一されてないってのは、
diffの各種オプションではなく、edやsharに対してだと思うぞ。
661: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 00:43:54.22 ID:h5Hfu9WR0(3/9) AAS
>>660
不要だと思ってるのはお前だけ。その思い込みが勘違いの原因だろ。
662: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 07:08:10.92 ID:J+3pjzxx0(2/22) AAS
色々確認したが、Gitの現状認識としては651であってるっぽい。
そして外部ツール使うしかないが、これは環境設定無しでコマンドだけで出来る。(動作確認済み)
git difftool --extcmd=/usr/bin/diff <commit> <commit>
> https://qastack.jp/programming/255202/how-do-i-view-git-diff-output-with-my-preferred-diff-tool-viewer
ついでにその中、
> Gitについて学ぶほど、それは1人の人、つまり元のプログラマーのために作られたものだと感じます。
これもよく言われてるようだが、俺も今回の件で同意だ。
合理性に欠ける判断をしているのだから色々文句言われるのも当然だ。
ただLinusは自分用に作った物を公開したら勝手に使われてるだけだから、知ったこっちゃ無いってのも分かる。
ただそれならそうと、いつもの調子でドキュメントにも書いててくれないと困るね。
合理的な構成を推定すると迷子になってしまう。
俺は絶対に diff -u 以外のフォーマットを許さない!絶対にだ!
とか書いてあれば、最初から諦めるので無駄に探す必要はなかった。
俺はLinusのこういった感情的な部分はわりと好きなのだが、まあ昨今の code of conduct では書いても消されるんだろうけども。
663(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 10:11:41.92 ID:J+3pjzxx0(3/22) AAS
てかGitってまさかのモノリシックかよ!
こりゃ文句言われるのも分かるわ。完全に方向を間違ってる。
結果的に肥大化していったのだろうけど、現在の状況でこれは駄目だよ。
つかこれシェル化する方向のプロジェクトはないの?
子コマンド群のバイナリだけ貰いたいんだけどさ。
664: デフォルトの名無しさん (ワッチョイ a95f-Tk+f) [sage] 2022/10/31(月) 10:39:47.64 ID:sko8U7ef0(1/2) AAS
>>663 好きに fork しなよ。
665(1): デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 12:23:13.35 ID:h5Hfu9WR0(4/9) AAS
自分でやってみればいいよ。
自分で多数の人が参加する巨大なプロジェクトを管理するようになれば、形式が統一されていることがどれだけ重要かわかる。
仕様を強制されているようでも、これこそが git の使い易さ、戦闘証明済の実力だと気付くよ。空想と現場は違う。
666: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 13:21:07.66 ID:J+3pjzxx0(4/22) AAS
>>665
それが従来形式のdiffの出力をさせない理由なら、
現在のGitプロジェクトの思想は俺とまるで合わない。
今時モノリシックとか、多分じきにこのプロジェクトは頓挫するよ。
multicsの再来だね。(俺は使ったこと無いけど)
自覚症状もあるみたいだし。
> Git is a fast, scalable, distributed revision control system with an unusually rich command set
> unusually
> https://www.git-scm.com/docs/git
ただまあ本当にdiffも内製しているようで、ちょっと驚きだよ。
ただwikiによると当初はローレベルエンジン+シェルスクリプトで、これは俺の思想と合致してる。
windowsに移植する際にシェルスクリプトをCに書き換え、そこでモノリシック化したようだ。
それで環境変数を見るとか、完全に開発の方向性を間違ってる。
当初のシェルスクリプト方式ならdiffを呼ぶだけだから、シンボリックリンクで好きなのと簡単に交換出来た。
この場合、Git側にコードは全く必要ないし、ユーザー側に予備知識も必要ない。
それをモノリシックにしてしまったから、環境変数を読むコードを必要とし、
ユーザーはマニュアルを読むことを強制させられる。
お互いに完全に無駄だ。
このメンテナは、ソフトウェアアーキテクチャはどうあるべきか、全く理解出来てない。
今ですらGitは難しすぎると文句言われてるだろ。
コードを書く為にコード管理システムの勉強が必要とか、完全に本末転倒だし。
じきに巨大な躯体を支えきれなくなって、分割プロジェクトが発生すると思うぜ。
それが多分Next-gitになるのだろうよ。
つか、何でGitはモノリシックを選択してんの?全く意味ねえと思うぞマジで。
本当にdiffとかを絶対に交換させない為?ならマジで死ねでしかないね。
667(1): デフォルトの名無しさん (ブーイモ MM33-wVCK) [sage] 2022/10/31(月) 14:15:23.19 ID:Yrczlr02M(1) AAS
Simple is not easy
Gitは後者を選択することでSIerのドカタまで幅広く受け入れられたということだ
668(1): デフォルトの名無しさん (ワッチョイ 8b8f-5UCg) [sage] 2022/10/31(月) 14:29:14.51 ID:Pk1WyFqz0(1) AAS
(だからgit difftoolが用意されてんだろと言いたいけど、linux原理主義者みたいだし黙っとこう)
669: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 15:04:18.65 ID:J+3pjzxx0(5/22) AAS
>>667
他よりましなだけだろ。
ただ俺が思うに、Gitはもっと簡単に出来て、
・勉強しないといけないGit(今)
・勉強しなくてもなんとなく使えちゃうGit(次世代)
に分離すると思うよ。次世代版の需要圧力はもう既に十分あるし。
実のところ、今のgitにラッパシェルスクリプト群を被せれば次世代版出来ちゃうし、
(勿論見た目だけだがそれが重要)
俺はそれ作って使おうかとも思案中。
Gitは業務プロセス名のコマンドだから、実際何が起こっているのか分かりにくいのが一番の問題だよ。
コマンド名変えるだけでも相当変わる。
670(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 15:05:02.85 ID:J+3pjzxx0(6/22) AAS
>>668
それに辿り着くのにググったりマニュアルを読まないといけないのが問題なんだよ。
今のGitは世界中のプログラマに努力を強いてて、その犠牲の上に成り立ってる。
3時間程度あれば、再現コード付きのバグ報告が出来てしまう。
それをマニュアルを読むのに費やしてるのだから、無駄でしょ。
世界中のプログラマが3時間を世界が進歩する方向に費やせたら、Gitももっとよくなってたはずだよ。
671(1): デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 15:39:10.00 ID:oV1LtMOH0(1/19) AAS
それは世界中の人が俺に1円を恵んでくれたら
俺は大金持ちになっていたと言っているようなもんだな
672(1): デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 15:57:50.61 ID:h5Hfu9WR0(5/9) AAS
>>670
もっと良い物ができると主張するんなら作って広めてから出直してこい
もともと git を使ってきたやつらがどういう連中かわかって無さ過ぎ
linux カーネルコミュニティとか、文句言ってる暇があったらコード書いて変更した方が速いってやつらばかりだぞ
そういう連中がのべ何万人も十年以上使い続けた結果で今の仕様になってる。本当に問題だったら誰かがとっくに直してる
お前にはこの言葉を贈ろう「馬鹿でも使えるものは馬鹿しか使わない」
673: デフォルトの名無しさん (ワッチョイ 8901-Gf1x) [sage] 2022/10/31(月) 16:18:24.02 ID:SCCWpcRv0(1) AAS
gitにdiffの書式の多様性を求めるなら、自分が使ってるコマンドの方を多様性を受け入れるようにすれば良いんじゃね
674(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 16:37:40.55 ID:GzQExg5g0(1/10) AAS
gitにとってファイルの差分を抽出する機能は、単にユーザへ表示したりパッチをつくるだけじゃなくて、gitの特徴的なマージやリベースを実現するための核心的機能なんだよ
なので専用のものを内製する意味はある
675(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 18:09:11.73 ID:J+3pjzxx0(7/22) AAS
>>671
OSSが世界中のプログラマからの元気玉なのは事実だろ
元気をマニュアルに消費されてなければ、もっと大きな元気玉になってただろうよ
676(1): デフォルトの名無しさん (ワッチョイ 8901-ZlL6) [] 2022/10/31(月) 18:20:34.93 ID:5K9TC9u30(1) AAS
初歩的な質問ですが教えてください。
コミットの履歴が汚くなった場合、皆さんはどのように管理されてますでしょうか?
具体的には、
gitでdevelopからブランチを切ったAで作業しました。
ブランチAのコミット履歴が汚くなったので
新たに作成するブランチBにブランチAで変更したファイルを
一回のコミットで整理したいです。
git cherry-pick -n fromID..toID
などで整理しているのでしょうか?
677: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 18:28:03.00 ID:oV1LtMOH0(2/19) AAS
>>675
タラレバ
678(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 18:33:43.29 ID:J+3pjzxx0(8/22) AAS
>>672
> のべ何万人も十年以上使い続けた結果
それは言いすぎ。カーネルコミュニティって400人規模と聞いた覚えがある。
毎年全員入れ替わっても1万人規模だよ。
まあこれは本質ではないのでいいが。、
> 「馬鹿でも使えるものは馬鹿しか使わない」
これって誰の言葉だ?Linusが
> マジで、Cを選択する理由が「何もなかった」としてもだ、C++プログラマー避けになるというだけで、Cを使う大義名分になる。
> https://cpplover.blogspot.com/2013/05/linus-torvalsc.html
と言ってるのは知ってるが。(しかもこれはGitの話らしい)
ちなみに俺はLinusの意見にも賛同する。プロジェクトに馬鹿が混入しないことは本当に重要なことだ。
ただ君と根本的に違うのは、「簡単は正義」と思ってることだ。
簡単に出来るのなら、簡単な方がいい。
馬鹿をふるい落とす為に敢えて難しい構造やコードにすることはない。
俺が見る限りLinusもそうしているわけではないが、君がそうしたいのは理解した。
まあ機会があれば実装して広めることになるかもしれない。
ただ俺は別のことをやろうとしてるから、Gitなんて動けば何でもいい程度でしかないので、優先順位は極めて低い。
あとたぶん、君は
> 文句言ってる暇があったらコード書いて変更した方が速い
の意味を誤解している。が、これは今言っても通じないと思う。
679: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 18:41:18.26 ID:oV1LtMOH0(3/19) AAS
小1「掛け算よりも足し算のほうが簡単だ!」
680: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 18:42:37.79 ID:oV1LtMOH0(4/19) AAS
しょう1「かけざんよりもたしざんのほうがかんたんだ!かんじよりもひらがなのほうがかんたんだ!」
681: デフォルトの名無しさん (ワッチョイ a95f-Tk+f) [sage] 2022/10/31(月) 18:50:02.57 ID:sko8U7ef0(2/2) AAS
>>678
> ただ俺は別のことをやろうとしてるから、Gitなんて動けば何でもいい程度でしかないので、優先順位は極めて低い。
これまでの開発者を含めて他の人もそうだっただけという可能性に思い至れば何の不思議もないことなのに。
682(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 18:50:46.86 ID:J+3pjzxx0(9/22) AAS
>>674
不可欠な機能ではあるが、核心的機能ではない。
事実として、Git内のdiffをGNUdiffに差し替えても、マージやリベースが出来なくなるわけではないだろ。
Gitは方針を間違ってる。
もし仮にGNUdiffのアルゴリズムが糞過ぎて出力が糞でマージが出来ないとしても、
アルゴリズム部分はGNUdiffにcontributeし、Gitがそのソースコードを使えばいいだけ。
Git内のdiffもGNUdiffからforkしたのだろうし、普通はこうすると思うけど。
別に実装すべきなのはフォーマッタで、--word-diffとかの部分だよ。
勿論GNUdiffに入れるのがベストだが、この辺は断られてもおかしくないし。
ただこれも人間用であって、マージする為に必要な機能部分ではないから、
君らから見てもGitではなくdiffに入れておけ、となるはずだが。
まあdiffに手を入れたくなるのは分かるが、それはソフトウェア開発ではやってはいけない方向で、
我慢してGNUdiffにcontributeしておく方が全体の長期的利益になるんだよ。
Gitがこの辺、アルゴリズムとViewをごちゃ混ぜに扱ってるのも気になる。
MVCとかまるで言われない世界ではあるけど、それでも基本として理解しておくべきだよ。
ビューを分離しておくことはものすごく重要だから。
683: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 19:41:41.79 ID:oV1LtMOH0(5/19) AAS
え?まさかgit diffを差分を見るだけのツールだと思ってるの?
684(1): デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 19:42:41.80 ID:oV1LtMOH0(6/19) AAS
GNU diffに依存したら、GNU diffが使われないところで
動かないってわからんかなぁ
diffは移植性低いんだよ?
685(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 19:49:40.38 ID:J+3pjzxx0(10/22) AAS
ちなみに652で既に言ったが
> --output-indicator-new=<char>
> --output-indicator-old=<char>
> --output-indicator-context=<char>
> Specify the character used to indicate new, old or context lines in the generated patch. Normally they are +, - and ' ' respectively.
> https://www.git-scm.com/docs/git-diff
このオプションが相当にヤバい。
これはデフォで
diff | less
となってる部分を、
diff --output-indicator-new='>' | less
とすれば幸せになれますよ、ということだが、これは
diff | sed 's/^\+/>/' | less
とすれば出来ることなので、gnuにこれを提案しても当然「そんなんイラネーよ」で終わってしまう。
Cで実装すべき案件ではないから。
そこで何故断られたのかを理解せず、だったらforkしますのノリなので、完全に無能の働き者だよ。
多分こいつらは本当にCしか書けない、Cしか知らない連中だ。
sed/awk/perl/python/rubyのどれかでも少しでも出来れば、この発想にはならない。
コントリビューターがこれを出してくるのも、メンテナがこれを止めないのも狂ってる。
プロジェクトにはいまだに正規表現を書けない老害しかいないと分かる。
だからこのオプションは、Linus的に言えば、常識的なプログラマー除けにはなってしまってるだろうよ。
686(1): デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 19:51:14.64 ID:oV1LtMOH0(7/19) AAS
git diffはパッチファイルを作るために利用されるし、
diffは環境依存するコマンドなんだから、
そんなのに依存したら、gitの移植性が低くなる
別の環境で実行したら、diffコマンドの出力がおかしくて
正しくパッチ当てられませんとかなったら困るやろ
常識で考えろや
687: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 19:53:03.45 ID:oV1LtMOH0(8/19) AAS
>>685
> とすれば出来ることなので、gnuにこれを提案しても当然「そんなんイラネーよ」で終わってしまう。
あのさぁ、提案するのはGNUだけじゃだめだって理解してないの?
688(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 19:53:31.39 ID:J+3pjzxx0(11/22) AAS
>>684
どういう意味?
少なくともどのプラットフォームにもdiffはあるだろ。
689(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 19:56:13.88 ID:GzQExg5g0(2/10) AAS
>>682
diff.externalやdifftoolによる置き換えは差分表示に使うdiffを置き換えるだけで、git内部でマージやリベースを行うための差分抽出には使わないだろ
690(1): デフォルトの名無しさん (ワッチョイ 699f-ZlL6) [sage] 2022/10/31(月) 20:00:09.03 ID:9mfNegYM0(1) AAS
ん?
これはもしかして以前来てたPOSIX原理主義者氏か?
691(1): デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:00:09.25 ID:oV1LtMOH0(9/19) AAS
>>688
全部同じ実装じゃねーよ
それぞれ全部細かい違いがある
すべてのプラットフォームのdiffにまで対応するなんて
大変な作業なんて誰もやろうとは思わん
692(1): デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:01:01.17 ID:oV1LtMOH0(10/19) AAS
例えば2004年版のdiffには-uがないからな
The Open Group Base Specifications Issue 6
https://pubs.opengroup.org/onlinepubs/009604499/utilities/diff.html
693(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 20:02:19.83 ID:J+3pjzxx0(12/22) AAS
>>686
> diffは環境依存するコマンド
は?
まあ仮にそうだったとして、Git内のdiffがあらゆる環境で同じdiffを生成するように小細工してるとでも?
ただまあこの場合、ぶっちゃけ、小細工出来る=原因が分かってる≒多分Intサイズとかの違い、だから、
リモートリポジトリのマージで(俺は実際何を送ってくるのか知らんが)diffを送ってくるのなら、
それはマージ時点で鯖に問い合わせてdiffで済むかファイル本体を送らせてローカルでdiff取るかすればいいだけでしょ。
正直、原因究明して小細工するより後者の方が断然楽なので、合理的判断ならそうしてると思うけど。
>>691
前後したが上記。
>>689
その内部でマージやリベースを行う為のdiffをGNUdiffのdllコールと置き換えて、
マージやリベースが動かなくなるかって話だよ。普通に動くと思うけど。
694(1): デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:03:29.56 ID:oV1LtMOH0(11/19) AAS
> まあ仮にそうだったとして、Git内のdiffがあらゆる環境で同じdiffを生成するように小細工してるとでも?
同じdiffを生成するために、gitで実装してるんだろ
頭悪いのか?
依存ライブラリ(この場合はコマンドだが)を減らすのは
移植性を高めるための常識だ
695(1): デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:04:11.62 ID:oV1LtMOH0(12/19) AAS
OSの標準コマンドに依存したら
移植性は低くなるんだよ
常識やろ
696(2): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 20:08:10.94 ID:J+3pjzxx0(13/22) AAS
>>692
> ユニファイド形式diffを最初に開発したのはウェイン・デイヴィソンで、
> 1990年8月のことであった(comp.sources.miscのVolume 14にunidiffとして投稿)。
> リチャード・ストールマンがGNUプロジェクトのdiffコマンドにこの機能を1ヶ月後に加え、
> 1991年1月リリースのGNU diff 1.15から使えるようになった。
> https://ja.wikipedia.org/wiki/Diff
ただそれ以前に、-uがある/ないはGitでマージ出来る/出来ないにはならないだろ。
それは完全に人間用であってさ。
697(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 20:10:05.98 ID:J+3pjzxx0(14/22) AAS
>>694,695
だからファイル本体をダウンロードして、mergeするマシン上でdiff取ればいいだけだろ。
これでマシン依存をなくせるし、普通の実装だよ。
通じないのか?どうもお前の書き込みは頭が悪そうだし。ならここら辺で切り上げるが。
698(1): デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:15:24.67 ID:oV1LtMOH0(13/19) AAS
>>696
-u がないとハンクの精度が下がるだろ
ほんとしらんならだまっとけよ
699: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:15:53.77 ID:oV1LtMOH0(14/19) AAS
>>697
パッチファイルを受け取って
他の人がマージすることもあるだろ
ほーんと、しらんならだまっとけ
700: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:16:36.27 ID:oV1LtMOH0(15/19) AAS
>>696
他のOSで使えるとは限らんだろうが
GNUしか頭にないんか
701(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 20:38:58.71 ID:J+3pjzxx0(15/22) AAS
>>690
違うし、565からの議論は俺にとっては一部意味不明だが、正直相当不毛なのは分かる。
それはGitの構造が糞だからだ。
結局のところGitはファイルシステム上のblobツリーを管理するツールでしかない。
そしてblobが気に入らないのなら、テキストにしてしまえばいいだけで、それもまたGitでしかない。
これを理解出来ない馬鹿同士で議論してて空回りしてるだけのように見える。
具体的には、git cat-fileがblob読み出しで、対になる書き込みツールもあるはずだが知らないが、
それらを個別に交換出来れば何とでもなるだけ。PHPで一般的に使われてるPDO方式だが、
要は最終段のI/Oだけは各種取りそろえて、切り替えれば何でも出来る構造にする。つまり、
Git謹製の cat-file バイナリ:Git純正blob形式
オレオレバイナリかシェルスクリプト: Git謹製blobファイルの名前でディレクトリを作り、
その中に自分の好きな形式で突っ込んでおけばいいだけ。
XMLでもJSONでも、ただのテキストでもいい。
それらがssh用ならリモートリポジトリを読むし、DB用ならDBに格納されることになる。
最終段のI/Oを読み書きセットで交換してしまえば、その上のコードは全く同一でいけるんだよ。
繰り返すが、PHPやWebの連中は常識的にこれをやってる。(理由は複数のDBに対応する為)
それをsshは別に実装してるようだし、方針自体がかなり狂ってるよ。
LinusもDBに入れてるのを糞に言ってるが、保存先は本質ではないし、
適切なアーキテクチャであれば簡単に交換可能なものだ。
だから本来、こんな議論が発生する余地もないのだけど。
702: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:39:57.17 ID:oV1LtMOH0(16/19) AAS
>>701
> それはGitの構造が糞だからだ。
結論ありきで理由を探すな
お前はクソな理由を一つも言っていない
703: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:40:47.45 ID:oV1LtMOH0(17/19) AAS
以前来てたPOSIX原理主義者氏ではなく
また別のPOSIX原理主義者氏のようだなw
704: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:41:49.56 ID:oV1LtMOH0(18/19) AAS
自分が認めているもの以外「全部方針が狂ってるよ」
その理由は、自分が認めていないからだよ
世界が認めていても
「俺が認めていないから世界の方が狂ってるんだよ!」
705(1): デフォルトの名無しさん (ブーイモ MMeb-uk66) [] 2022/10/31(月) 20:45:31.00 ID:GrGctmUAM(1) AAS
POSIX原理主義はWindowsでの開発がめんどくさくなるんで本当に嫌いだわ
あと今更awkやsedの読みづらい文法覚えるより他のスクリプト言語で書いた方が楽だし、POSIX原理主義はPOSIXに慣れている奴のポジショントークにすぎないと思うね
706(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 20:46:22.02 ID:GzQExg5g0(3/10) AAS
>>693
gitのバージョン管理されているファイルツリーはdiffコマンドがそのまま解釈できるような形式でファイルシステム上に存在しないからファイル単位で変換して外部関数呼び出すとか馬鹿だな
さらにgit内部で保持されるファイルの差分情報をdiffの出力みたいな字句解析が必要なバイト配列で取り扱うのも馬鹿げてる
このファイル差分抽出は間違いなくgitの核心的機能これが無ければVCSとして機能しない
707: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:49:18.25 ID:oV1LtMOH0(19/19) AAS
>>705
POSIX原理主義者はPOSIXを理解してないよ。
708: デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 20:55:34.73 ID:GzQExg5g0(4/10) AAS
>>698
-uをサポートする前は、patch作るなら-cのコンテクスト形式だろ
-cなら-uとハンクの精度は変わらん
709(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 21:08:17.57 ID:J+3pjzxx0(16/22) AAS
>>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知ってればそうはならない。
710: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 21:09:37.44 ID:J+3pjzxx0(17/22) AAS
Webの連中は馬鹿なのも事実だけど、馬鹿でも上手く行くように色々上手く出来てるのも事実なんだよ。
Cの連中は一度Webをやってみると凄く勉強になると思うよ。俺もそうだったし。
ただしWebはかなり糞なのも事実だが。
711(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 21:15:30.28 ID:GzQExg5g0(5/10) AAS
>>709
マージやリベースでやってる差分抽出は最終段のI/Oじゃないし
C言語でシンプルに実装されてるgitをMSが作る馬鹿みたいに重いツールにしないでくれよ
712(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 21:34:40.89 ID:GzQExg5g0(6/10) AAS
BitKeeperを元にGitを実装したリーナスはBitKeeper以前のVCSを糞みたいに言ってるんだよね
https://ezoeryou.github.io/blog/article/2015-04-08-linus-git-interview.html
edとdiffを使ったようなVCSは眼中になかった
713(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 21:39:28.36 ID:J+3pjzxx0(18/22) AAS
>>711
だから普通は、内部的に圧縮されたファイルへのアクセスは、
1. 単純にメモリ展開する
2. 何らかのプロキシオブジェクトでエミュレートする
のどちらかで、大概前者だしGitでもそうなってる。
だからここで速度低下とかは関係ない話だ。
(なお後者は/dev/zeroとか/dev/randomとかと言えば分かるだろう)
そこを他の言語、PHP/JS/Go/Rustのどれかを知ってれば、
そこでオブジェクトにしてI/O分離してマルチターゲットにしてしまうのも常識。
これを思いつけない/知らないのだから多分本当にCしか知らない連中だけでやってるよ。
君からもそれを感じる。
ちなみに重くなる/ならないなら、SQLiteは大量の小さいファイルならファイルよりも速いぜ!とか言ってるし、
他DBと違ってローカルだから試してみると面白いかもよ。
https://www.sqlite.org/fasterthanfs.html
714(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 21:52:54.41 ID:GzQExg5g0(7/10) AAS
>>713
内部的に圧縮されたファイル?
「ファイルツリーはdiffコマンドがそのまま解釈できるような形式でファイルシステム上に存在しない」
これを勘違いしたのかな?
ファイルじゃなくてファイルツリーね
gitのディレクトリーのツリー構造を保持する方法独特だからその各ファイルをdiff取ってもらうためにツリーをtraverseするインターフェースを提供する必要が有る
ファイル単位の差分抽出なんて複雑な処理でもないんだからそれをやってもらうためにそれよりはるかに複雑なインターフェースを設計するとか無駄以外の何物でもないな
715(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 21:54:31.60 ID:J+3pjzxx0(19/22) AAS
>>712
ただそれはedとdiffが問題だったわけではないだろうし、
仮にそうだったとしても、正しくソフトウェアを構成していればすぐに交換可能で、全く問題にならないんだよ。
その辺がソフトウェア階層の意識がないなあと思うところだよ。
Cはそういう世界でもあるけどさ。
edとdiffで展開するのが駄目なら、他方式の cat-file 階層に交換してしまえば何とでもなるんだよ。
Gitの方式が優れていれば、他VCSがGitの末端階層のI/Oコードを取り込めば済むだけ。
だからそこを問題にする時点でズレてる。
例えばgzipの様なストリーミング方式の cat-file にしてもう動作するし、7zipでも何でもいいんだよ。
(バージョン管理システムの場合は個別ファイルではなくファイルセットでの圧縮なので実際はこれらは適切ではないが)
それでLinusが言ってるように、キモは
> 問題はコード量ではなくて、どのようにデータを扱うかだった。
> 初期の実際のコード量は、かなり少ない。基本的な考え方が正しいかどうかにかかっている。開発を始める前からそのアイディアについて考察していたわけだ。
であって、要はツリーコントロールであって、I/Oではないだろ。
716(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 22:11:44.63 ID:J+3pjzxx0(20/22) AAS
>>714
ああ、ファイルと勘違いしていたのは事実だが、それでも意味は同じだよ。
> gitのディレクトリーのツリー構造を保持する方法独特だからその各ファイルをdiff取ってもらうためにツリーをtraverseするインターフェースを提供する必要が有る
勿論その通りだが、つまりこれはファイルシステムであって、その先に隠蔽出来るんだよ。
NTFSかext4かbitlockerを使ってるか圧縮DISKかをアプリは気にしないだろ。
それはOSがファイルシステムの違いを隠蔽してくれるから。これと同じ。
同様に、 cat-file で末端のファイルの形式の違いは隠蔽出来て、
ファイルシステムドライバ(とでも言うべきか?)で、ツリー詳細構造の違いは隠蔽出来るんだよ。
そしてそれは当然Gitにも入ってる。
だからその上位からはGit形式のファイルツリー/オブジェクトツリーを
普通のファイルシステム/オブジェクトと同じように見せることは可能なんだよ。
そして実際にそうしてるはずだよ。
だからな、自分が管轄してる階層以外の所は、はっきり言って関係ないしコードからも見えないんだよ。
Cの場合はその辺の階層意識が希薄で、実際君との空回りもこれだが、Gitもこの辺は正しく実装されてるはず。
717(3): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 22:17:17.34 ID:GzQExg5g0(8/10) AAS
>>716
cat-fileは単にblobの中身を表示するコマンドってだけで、逆をやるblobを作るコマンドが用意されてるわけじゃない
つまりここでソフトウェア的に階層がきれいに分かれてるわけじゃない
ここを置き換えて自由な圧縮アルゴリズムを使えるようになっていたとしたら
Libgit2 みたいな別実装のライブラリが出現する余地もなかっただろう
ここは変にインターフェース階層なんて用意しなくて正解
gitはツールであるとともにフォーマットでもあるんだよ
フォーマットに自由なオプションが用意されているとか別の実装を作る側としては悪夢でしかない
718: デフォルトの名無しさん (ブーイモ MMeb-wVCK) [sage] 2022/10/31(月) 22:33:44.64 ID:DiR+92tnM(1) AAS
そう、このクレーマーはGitのデータモデルやデータフォーマットとしての側面を見落としてる
確固とした優れたデータモデルを持つってのは立派なUNIX哲学の一つなんだけどねえ
719: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 22:39:17.91 ID:h5Hfu9WR0(6/9) AAS
>>715
いいから、お前に git は向いてないから消えろ。git は万人向けじゃない。
自分で納得がいくものを作ってそれを使え。
どうせ多人数がかかわるようなプロジェクトとかには縁がないだろから、一人で寂しく使ってろ。
720(2): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 22:41:57.65 ID:J+3pjzxx0(21/22) AAS
>>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は上から下まで全管轄出来るんだけど、無駄にやりすぎてるコードになりがちなのも事実。
なまじ出来るものだからやっちゃうのだけど、それは正しい構成ではないんだよ。
721: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 22:45:45.36 ID:h5Hfu9WR0(7/9) AAS
>>720
糞理論いいから、まずは作って見せろ。
722(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 22:50:56.79 ID:GzQExg5g0(9/10) AAS
>>720
そんな入れ替え可能な階層分けが必要なら最初から全部C言語以外で作ればよかったんだよ
でもリーナスはC言語を選んでほぼunixシステムコールを直接叩く方式で実装した
hqなんかの方がお前の好みに近いだろうけど、hqは廃れてgit全盛となった
むかしはこのスレにもhq信者が盛んにチョッカイかけに来たもんだけど、いまは何してるんだろうな
723: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 22:55:40.76 ID:h5Hfu9WR0(8/9) AAS
もはや名前すらちゃんと覚えてもらえてない hg さん。
724(2): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 22:59:10.92 ID:J+3pjzxx0(22/22) AAS
>>717
あーだからな、フレームワークを一度使ってみれば勉強になると思うよ。
フレームワークは型に嵌められるのだけど、
その型はそれなりの奴が一生懸命考えた型だから、それなりなんだよ。
なるほどこうすればファイルもネットワークもDBも全部同じコードでいけるのか、とか分かるよ。
ファイルシステム構造も、末端のファイル自体も、
上位には関係ないように隠蔽出来るし、難しいことではない。
実際、Git cat-file はGitファイルシステムを隠蔽してる、とも言えるだろ。
>>722
つかなんか勘違いしてると思うが、階層を分けたら遅くなるとかではないんだよ。
(厳密に言えば関数コールが1つ入るからその分は遅くなるが)
725: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/10/31(月) 23:00:32.54 ID:h5Hfu9WR0(9/9) AAS
>>724
いいからお前は自分で作れ git 使う必要はないぞ
726(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/10/31(月) 23:25:07.54 ID:GzQExg5g0(10/10) AAS
>>724
結局gitがどういう方式で実装されているかなんてことよりファイルフォーマットの方が重要ってことだ
だからgitの実装とファイルフォーマットを切り離すようなインターフェース階層は必要無いしだれも実装しない
必要無いものを実装すれば余計なメンテの手間もかかる
727: デフォルトの名無しさん (ワッチョイ 531d-rkLt) [sage] 2022/10/31(月) 23:25:57.99 ID:Sz6pT8cp0(1) AAS
すごい勢いでスレ消費してるな…
>>676
1回のコミットで整理っていうのは、1つのコミットにまとめるってことかな?
それとも1回のコマンドで済ませたいってことかな(何度もcherry-pickしたくない)?
merge squashじゃあかんかね。
連続してない部分的なコミットをまとめるならrebase squashでもいいよ。
連続してないコミットなら、rebase -i使えばいいよ。いらないコミットはdropできるよ。
rebaseするときは、元のブランチ消えるから、必要なら復帰用にブランチ作っておくといいよ。
728(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 00:01:33.71 ID:Jzc3CN/20(1/8) AAS
>>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マクロで実体を呼ぶかラッパを呼ぶか簡単に切換可能なので、
実際どうするかはともかく、ソースコードはメンテしておくべきだよ。
729(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/11/01(火) 00:33:10.99 ID:kz7RaJ2H0(1/5) AAS
>>728
現状の.git/* の形式が十分にシンプル明解でこれが共通I/Fになっている
すでにこの共通I/Fに沿っていろいろな実装が存在している
結果これを変更するための内部的なI/F階層が必要とされていない
内部的な構造としてはそんなことよりSHA-1をSHA-256に変更することの方が重要で実験的実装が進んでいる
切り口が違うからお前の言うような階層をつくってもハッシュの形式の変更には対応できない
そんなくだらないことに割く労力は無い
730: デフォルトの名無しさん (ワッチョイ a95f-Tk+f) [sage] 2022/11/01(火) 00:33:26.41 ID:1wY/uhrP0(1) AAS
長いからまとめたよ。
「俺は実装しないけど、俺以外の誰かが俺の推測に沿うように実装しておくべきなんだ。俺は実装しないけど。」
731: デフォルトの名無しさん (ワッチョイ 8b8f-5UCg) [sage] 2022/11/01(火) 01:23:19.93 ID:ju8ytuSJ0(1/2) AAS
なんでgitの話でフレームワークの話が出て来んのかな
732(1): デフォルトの名無しさん (ワッチョイ 7997-uk66) [] 2022/11/01(火) 01:46:22.68 ID:Mxyz6tUC0(1/2) AAS
無限の自由度の代わりに組み合わせ爆発が生じてエッジケースでバグが出まくり、というのは嫌だという設計思想なんじゃないかな
確かにWeb系でDIするのは当たり前だけど、RDBMSやビジネスロジック以外はトラブってもいいWeb系と違ってgitでトラブル続発したら困るし。
ファイルシステムみたいなものでは。
733(1): デフォルトの名無しさん (ワッチョイ 7997-uk66) [] 2022/11/01(火) 01:52:53.48 ID:Mxyz6tUC0(2/2) AAS
あと大体git自体が膨大なLinuxカーネルのVCSとしてかなり高速に、確実に動作する必要があったという大前提があるだろう。
そこを無視して汎用的にはこっちの方がいいってのは違うんじゃないかな。
汎用的な用途としてのVCSが欲しいならばpost-gitを作るしかないと思うよ。
734: デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/11/01(火) 02:08:49.56 ID:QdibabTL0(1/2) AAS
そもそも汎用性がある方が良いというのから幻想
道具は利用目的にあっているかどうかが全て十徳ナイフありがたがるやつは素人
735(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 03:17:45.94 ID:Jzc3CN/20(2/8) AAS
>>729
それも根本的に間違ってる。
ハッシュはハッシュでレイヤーを切るから、正しく構成されてるソフトウェアなら、
ハッシュを変更するのはハッシュ生成関数内だけで済むんだよ。
具体的には、全体は get_hash() を呼んでハッシュを受け取るようにしておいて、
その get_hash() 内でSHA-1かSHA-256かmd5かを変更するだけにするんだよ。
というかこんなの当たり前すぎてお前らが理解出来てないのにびびる。
オブジェクト指向では基本中の基本とされてることだぞ。
お前らプログラマじゃねえだろマジで。プログラマなら、ちょっと勉強し直さないとヤバいぜ。
ただこれは、本質的に「返ってくるオブジェクトのサイズは予想出来ない」事になり、
C的な「返ってくるオブジェクトのサイズは呼ぶ前に完全に予期出来ている(だいたい固定)」の世界にはフィットしない。
C++とかはデストラクタで、その他言語はGCで対応するのが常策だが、
これに関してはバイナリにハードコードで問題ないから#defineでいい。
ただC++だと#defineは悪とされてるから、絶対にデストラクタでやるんだ!いやスマポだ!みたいな奴も居て、
それを勧めてくるからLinusはブチ切れてるわけだが。
だけどハッシュサイズなんて動的に変化すること無いのだから、#defineで全く問題ない。
そしてそれに手こずってる時点で、#defineでの切換すら出来ない、
全体がそれぞれで勝手にSHA-1を生成してたコードになってるって事だよ。
それはマジで糞だよ。(まあ、でも直せば済む話ではあるんだけどさ)
736: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 03:19:13.38 ID:Jzc3CN/20(3/8) AAS
>>732,733
これをDIと呼ぶのか?はさておき、DIでバグが増えるなんて事はないよ。
そして、get_hash()でのオーバーヘッドは関数呼び出し一回でしかなく、
それで致命的に遅くなるなんて事もないよ。
というか、GitのマージってI/Oバウンドだと思ってるが違うのか?
737(1): デフォルトの名無しさん (ワッチョイ d9e4-Ojdt) [sage] 2022/11/01(火) 03:55:08.59 ID:kz7RaJ2H0(2/5) AAS
>>735
ただ単純にハッシュアルゴリズムをSHA-1からSHA-256に変更するわけじゃないぞ
既存のSHA-1リポジトリも全部(リベース状態にすることなしに)SHA-256で運用できるようにしたりするんだよ
gitの開発はリポジトリのフォーマットの継続性をとても重視してる
738: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 08:06:29.98 ID:Jzc3CN/20(4/8) AAS
>>737
同じだよ。
正しく構成されてる場合は何種類混在しても全く問題ないし、簡単に変更可能だ。
つかマジでそれオブジェクト指向(OOP)の基本中の基本だから。
ただ、混在なら、Cで一般的に使われてるSIZEOFの#defineでは対応出来ないが、
Linusのコードなら、Cでは一般的に禁止されてる小文字マクロで
普通にそこら辺の関数もマクロだらけの可能性があり、(linuxカーネルコードがそう)
この場合は、#define内のマクロ定義を一箇所変更するだけで対応可能ではある。
が、まあ、マクロ云々の話は本来はNGとされてて他言語では厳禁だから、いわゆる正しい方策を示すと、
全体の関数はハッシュの中身が何か知らない状態で記述するんだよ。
get_hash()でハッシュのポインタを貰いました、中身は知りませんので具体的な操作はできません、
なので一々投げ返して操作して貰いますがよろしいですね?とする。
739: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 08:06:50.06 ID:Jzc3CN/20(5/8) AAS
と書くと意味不明だが、この場合は要は貰ったポインタを一々投げ返して操作してもらう。
具体的には、
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って何?みたいな質問が掲示板上でもやたらでてくるわけでさ。
740: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 08:51:54.94 ID:Jzc3CN/20(6/8) AAS
補足。
分からなければ「OOP 抽象化」でググって色々読んでみてくれ。
死ぬほどでてくるはず。マジで基本中の基本だから。
ハッシュを交換することに手こずるようなら、その『コード』は間違いなく糞だ。(Git自体が糞と言っているわけではない)
ただ、修正すればいいだけ、要は漏れなく上記のようにしてしまえばいいだけではあるが。
正しく構成すれば、Hash変更なんて簡単に出来るし、
そもそもそうなってないコードなんてOOPでは存在を許されてない。
(そうとは書けないように構成されてる。
それを強制的にやらせるシステムの一つがprivateだが、これはこれで間違った使われ方も多いが)
741(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/11/01(火) 09:16:06.92 ID:kz7RaJ2H0(3/5) AAS
長々とご苦労さんだがお前SHA-256対応の意味が理解できてないよ
742(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 09:26:52.60 ID:Jzc3CN/20(7/8) AAS
>>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を示されていきなり意義を理解出来る奴はほぼ居ないのも事実。
でも、君は確実に老害扱いされてると思うよ。
743: デフォルトの名無しさん (ワッチョイ f15f-iYvO) [sage] 2022/11/01(火) 09:32:09.77 ID:WFTKMpG40(1) AAS
なんだか知らんけど5chでうだうだ言ってて何になるの
744(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/11/01(火) 09:36:58.90 ID:kz7RaJ2H0(4/5) AAS
>>742
君はその記事の意味することを理解できてないね
コミットオブジェクトの構造とか役目を理解出来てないと難しいかもしれない
745(2): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/01(火) 09:57:34.79 ID:Jzc3CN/20(8/8) AAS
>>744
そう思いたいんだろうけど、残念ながらそうじゃない。
少なくとも君はソフトウェア階層やOOPの基本事項について全く理解出来てない。
だから今、老害と言われ続けるか、再び学び直して熟練者と言われるかの分水嶺にいるだけ。
俺は君に何も強制することは出来ないが。
確かに俺はGit初心者なので、記事の理解は間違ってるかもしれない。
でも、ハッシュの中身や長さが変わったり混在したところで、
正しく構成されてるソフトウェアなら数行の変更で対応可能なのは事実だよ。
そして君と同様の人達によってGitが作られているのであれば、
そりゃそうなってなくて苦労するんだろうさ。
まあいいけどね。もう水掛け論だから終わりにしようぜ。これ以上やってもお互い得る物もないし。
746: デフォルトの名無しさん (ワッチョイ 8b8f-5UCg) [sage] 2022/11/01(火) 10:12:34.67 ID:ju8ytuSJ0(2/2) AAS
> GITは、すべてのファイルオブジェクトとコミットの識別と整合性チェックをSHA-1に強く依存しています
こう書いてあるのになんで無視するんだろう
747(1): デフォルトの名無しさん (ワッチョイ d9e4-Xmag) [sage] 2022/11/01(火) 10:29:09.24 ID:kz7RaJ2H0(5/5) AAS
>>745
数行で対応w
それが出来ないgithubは無能集団なんですねw
糞MSに買われちゃうぐらいだから仕方ないか
748: デフォルトの名無しさん (オッペケ Src5-8VyY) [sage] 2022/11/01(火) 12:34:56.06 ID:lDKItQe4r(1) AAS
Git初心者に語らせると頓珍漢な文章が生まれるという好例
749(1): デフォルトの名無しさん (ワッチョイ 8bbb-VzUj) [sage] 2022/11/01(火) 12:39:40.93 ID:QdibabTL0(2/2) AAS
>>745
お前日本語読めなさそうだな
ましてやリンク先にある英語とかかけらも理解できてないだろ
混在とかじゃないぞ。二つを同時につけて「安全」に相互変換するということだぞ
安全にすることが目的でSHA-256を使えば解決みたいな話じゃない
お前みたいなのが目的と手段を取り違えるタイプの典型
OOPとかアホなプログラマでも理解できる単純なことなわけないだろ
そんなんで済むならとっくに終わってる
まずは常識で考えろ
できないなら黙って勉強しろ
750: デフォルトの名無しさん (ワッチョイ 699f-1Eu/) [sage] 2022/11/01(火) 18:29:25.93 ID:/+vO/8+o0(1) AAS
長文すげー
751: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/11/02(水) 05:40:42.57 ID:n+gr/3CY0(1/2) AAS
>>749
どうであれ同じだよ。
複数付けようが、何をどう組み合わせようが、
抽象化の向こうの実体については知らないし、取り扱うコードも存在してないから、
同じバイナリで動作するんだよ。それが抽象化と隠蔽で、これはOOPの基本中の基本。
上下前次1-新書関写板覧索設栞歴
あと 251 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.042s