[過去ログ] Git 18 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
685
(1): (ワッチョイ 497b-vCJ4) 2022/10/31(月)19:49 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.
> 外部リンク:www.git-scm.com
このオプションが相当にヤバい。
これはデフォで

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) 2022/10/31(月)19:51 ID:oV1LtMOH0(7/19) AAS
git diffはパッチファイルを作るために利用されるし、
diffは環境依存するコマンドなんだから、
そんなのに依存したら、gitの移植性が低くなる

別の環境で実行したら、diffコマンドの出力がおかしくて
正しくパッチ当てられませんとかなったら困るやろ
常識で考えろや
687: (ワッチョイ 6914-Tk+f) 2022/10/31(月)19:53 ID:oV1LtMOH0(8/19) AAS
>>685
> とすれば出来ることなので、gnuにこれを提案しても当然「そんなんイラネーよ」で終わってしまう。
あのさぁ、提案するのはGNUだけじゃだめだって理解してないの?
688
(1): (ワッチョイ 497b-vCJ4) 2022/10/31(月)19:53 ID:J+3pjzxx0(11/22) AAS
>>684
どういう意味?
少なくともどのプラットフォームにもdiffはあるだろ。
689
(1): (ワッチョイ d9e4-Xmag) 2022/10/31(月)19:56 ID:GzQExg5g0(2/10) AAS
>>682
diff.externalやdifftoolによる置き換えは差分表示に使うdiffを置き換えるだけで、git内部でマージやリベースを行うための差分抽出には使わないだろ
690
(1): (ワッチョイ 699f-ZlL6) 2022/10/31(月)20:00 ID:9mfNegYM0(1) AAS
ん?
これはもしかして以前来てたPOSIX原理主義者氏か?
691
(1): (ワッチョイ 6914-Tk+f) 2022/10/31(月)20:00 ID:oV1LtMOH0(9/19) AAS
>>688
全部同じ実装じゃねーよ
それぞれ全部細かい違いがある

すべてのプラットフォームのdiffにまで対応するなんて
大変な作業なんて誰もやろうとは思わん
692
(1): (ワッチョイ 6914-Tk+f) 2022/10/31(月)20:01 ID:oV1LtMOH0(10/19) AAS
例えば2004年版のdiffには-uがないからな
The Open Group Base Specifications Issue 6
外部リンク[html]:pubs.opengroup.org
693
(1): (ワッチョイ 497b-vCJ4) 2022/10/31(月)20:02 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) 2022/10/31(月)20:03 ID:oV1LtMOH0(11/19) AAS
> まあ仮にそうだったとして、Git内のdiffがあらゆる環境で同じdiffを生成するように小細工してるとでも?

同じdiffを生成するために、gitで実装してるんだろ
頭悪いのか?

依存ライブラリ(この場合はコマンドだが)を減らすのは
移植性を高めるための常識だ
695
(1): (ワッチョイ 6914-Tk+f) 2022/10/31(月)20:04 ID:oV1LtMOH0(12/19) AAS
OSの標準コマンドに依存したら
移植性は低くなるんだよ
常識やろ
696
(2): (ワッチョイ 497b-vCJ4) 2022/10/31(月)20:08 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から使えるようになった。
> 外部リンク:ja.wikipedia.org
ただそれ以前に、-uがある/ないはGitでマージ出来る/出来ないにはならないだろ。
それは完全に人間用であってさ。
697
(1): (ワッチョイ 497b-vCJ4) 2022/10/31(月)20:10 ID:J+3pjzxx0(14/22) AAS
>>694,695
だからファイル本体をダウンロードして、mergeするマシン上でdiff取ればいいだけだろ。
これでマシン依存をなくせるし、普通の実装だよ。

通じないのか?どうもお前の書き込みは頭が悪そうだし。ならここら辺で切り上げるが。
698
(1): (ワッチョイ 6914-Tk+f) 2022/10/31(月)20:15 ID:oV1LtMOH0(13/19) AAS
>>696
-u がないとハンクの精度が下がるだろ
ほんとしらんならだまっとけよ
699: (ワッチョイ 6914-Tk+f) 2022/10/31(月)20:15 ID:oV1LtMOH0(14/19) AAS
>>697
パッチファイルを受け取って
他の人がマージすることもあるだろ
ほーんと、しらんならだまっとけ
700: (ワッチョイ 6914-Tk+f) 2022/10/31(月)20:16 ID:oV1LtMOH0(15/19) AAS
>>696
他のOSで使えるとは限らんだろうが
GNUしか頭にないんか
701
(1): (ワッチョイ 497b-vCJ4) 2022/10/31(月)20:38 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) 2022/10/31(月)20:39 ID:oV1LtMOH0(16/19) AAS
>>701
> それはGitの構造が糞だからだ。
結論ありきで理由を探すな
お前はクソな理由を一つも言っていない
703: (ワッチョイ 6914-Tk+f) 2022/10/31(月)20:40 ID:oV1LtMOH0(17/19) AAS
以前来てたPOSIX原理主義者氏ではなく
また別のPOSIX原理主義者氏のようだなw
704: (ワッチョイ 6914-Tk+f) 2022/10/31(月)20:41 ID:oV1LtMOH0(18/19) AAS
自分が認めているもの以外「全部方針が狂ってるよ」
その理由は、自分が認めていないからだよ

世界が認めていても
「俺が認めていないから世界の方が狂ってるんだよ!」
705
(1): (ブーイモ MMeb-uk66) 2022/10/31(月)20:45 ID:GrGctmUAM(1) AAS
POSIX原理主義はWindowsでの開発がめんどくさくなるんで本当に嫌いだわ
あと今更awkやsedの読みづらい文法覚えるより他のスクリプト言語で書いた方が楽だし、POSIX原理主義はPOSIXに慣れている奴のポジショントークにすぎないと思うね
706
(1): (ワッチョイ d9e4-Xmag) 2022/10/31(月)20:46 ID:GzQExg5g0(3/10) AAS
>>693
gitのバージョン管理されているファイルツリーはdiffコマンドがそのまま解釈できるような形式でファイルシステム上に存在しないからファイル単位で変換して外部関数呼び出すとか馬鹿だな
さらにgit内部で保持されるファイルの差分情報をdiffの出力みたいな字句解析が必要なバイト配列で取り扱うのも馬鹿げてる
このファイル差分抽出は間違いなくgitの核心的機能これが無ければVCSとして機能しない
707: (ワッチョイ 6914-Tk+f) 2022/10/31(月)20:49 ID:oV1LtMOH0(19/19) AAS
>>705
POSIX原理主義者はPOSIXを理解してないよ。
708: (ワッチョイ d9e4-Xmag) 2022/10/31(月)20:55 ID:GzQExg5g0(4/10) AAS
>>698
-uをサポートする前は、patch作るなら-cのコンテクスト形式だろ
-cなら-uとハンクの精度は変わらん
709
(1): (ワッチョイ 497b-vCJ4) 2022/10/31(月)21:08 ID:J+3pjzxx0(16/22) AAS
>>706
そこら辺の機能はGit以前から完全に機能してるんだよ。
> diffが作られてしばらくは、ソフトウェアコードや技術文書のマークアップのソース部分の変更箇所を比較する、
> プログラムのデバッグ出力の検証、ファイルシステム中のファイル一覧の比較といった使い方が一般的であった。
> ed用の出力により、ファイルへの一連の変更をひとまとめにしてファイル容量を節約するというアイデアが出てきた。
> Source Code Control System(SCCS)はそのようなアイデアを実装したものとして1970年代後半に実装がなされた。
> 外部リンク:ja.wikipedia.org
だからそれは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) 2022/10/31(月)21:09 ID:J+3pjzxx0(17/22) AAS
Webの連中は馬鹿なのも事実だけど、馬鹿でも上手く行くように色々上手く出来てるのも事実なんだよ。
Cの連中は一度Webをやってみると凄く勉強になると思うよ。俺もそうだったし。
ただしWebはかなり糞なのも事実だが。
711
(1): (ワッチョイ d9e4-Xmag) 2022/10/31(月)21:15 ID:GzQExg5g0(5/10) AAS
>>709
マージやリベースでやってる差分抽出は最終段のI/Oじゃないし
C言語でシンプルに実装されてるgitをMSが作る馬鹿みたいに重いツールにしないでくれよ
712
(1): (ワッチョイ d9e4-Xmag) 2022/10/31(月)21:34 ID:GzQExg5g0(6/10) AAS
BitKeeperを元にGitを実装したリーナスはBitKeeper以前のVCSを糞みたいに言ってるんだよね
外部リンク[html]:ezoeryou.github.io
edとdiffを使ったようなVCSは眼中になかった
713
(1): (ワッチョイ 497b-vCJ4) 2022/10/31(月)21:39 ID:J+3pjzxx0(18/22) AAS
>>711
だから普通は、内部的に圧縮されたファイルへのアクセスは、
1. 単純にメモリ展開する
2. 何らかのプロキシオブジェクトでエミュレートする
のどちらかで、大概前者だしGitでもそうなってる。
だからここで速度低下とかは関係ない話だ。
(なお後者は/dev/zeroとか/dev/randomとかと言えば分かるだろう)
そこを他の言語、PHP/JS/Go/Rustのどれかを知ってれば、
そこでオブジェクトにしてI/O分離してマルチターゲットにしてしまうのも常識。
これを思いつけない/知らないのだから多分本当にCしか知らない連中だけでやってるよ。
君からもそれを感じる。

ちなみに重くなる/ならないなら、SQLiteは大量の小さいファイルならファイルよりも速いぜ!とか言ってるし、
他DBと違ってローカルだから試してみると面白いかもよ。
外部リンク[html]:www.sqlite.org
714
(1): (ワッチョイ d9e4-Xmag) 2022/10/31(月)21:52 ID:GzQExg5g0(7/10) AAS
>>713
内部的に圧縮されたファイル?
「ファイルツリーはdiffコマンドがそのまま解釈できるような形式でファイルシステム上に存在しない」
これを勘違いしたのかな?
ファイルじゃなくてファイルツリーね
gitのディレクトリーのツリー構造を保持する方法独特だからその各ファイルをdiff取ってもらうためにツリーをtraverseするインターフェースを提供する必要が有る
ファイル単位の差分抽出なんて複雑な処理でもないんだからそれをやってもらうためにそれよりはるかに複雑なインターフェースを設計するとか無駄以外の何物でもないな
1-
あと 288 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.021s