[過去ログ]
Git 18 (1002レス)
Git 18 http://mevius.5ch.net/test/read.cgi/tech/1650651945/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
700: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:16:36.27 ID:oV1LtMOH0 >>696 他のOSで使えるとは限らんだろうが GNUしか頭にないんか http://mevius.5ch.net/test/read.cgi/tech/1650651945/700
701: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2022/10/31(月) 20:38:58.71 ID:J+3pjzxx0 >>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に入れてるのを糞に言ってるが、保存先は本質ではないし、 適切なアーキテクチャであれば簡単に交換可能なものだ。 だから本来、こんな議論が発生する余地もないのだけど。 http://mevius.5ch.net/test/read.cgi/tech/1650651945/701
702: デフォルトの名無しさん (ワッチョイ 6914-Tk+f) [sage] 2022/10/31(月) 20:39:57.17 ID:oV1LtMOH0 >>701 > それはGitの構造が糞だからだ。 結論ありきで理由を探すな お前はクソな理由を一つも言っていない http://mevius.5ch.net/test/read.cgi/tech/1650651945/702
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 273 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s