Git 18at TECH
Git 18 - 暇つぶし2ch706:は断られてもおかしくないし。 ただこれも人間用であって、マージする為に必要な機能部分ではないから、 君らから見てもGitではなくdiffに入れておけ、となるはずだが。 まあdiffに手を入れたくなるのは分かるが、それはソフトウェア開発ではやってはいけない方向で、 我慢してGNUdiffにcontributeしておく方が全体の長期的利益になるんだよ。 Gitがこの辺、アルゴリズムとViewをごちゃ混ぜに扱ってるのも気になる。 MVCとかまるで言われない世界ではあるけど、それでも基本として理解しておくべきだよ。 ビューを分離しておくことはものすごく重要だから。



707:デフォルトの名無しさん
22/10/31 19:41:41.79 oV1LtMOH0.net
え?まさかgit diffを差分を見るだけのツールだと思ってるの?

708:デフォルトの名無しさん
22/10/31 19:42:41.80 oV1LtMOH0.net
GNU diffに依存したら、GNU diffが使われないところで
動かないってわからんかなぁ
diffは移植性低いんだよ?

709:デフォルトの名無しさん
22/10/31 19:49:40.38 J+3pjzxx0.net
ちなみに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.
> URLリンク(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的に言えば、常識的なプログラマー除けにはなってしまってるだろうよ。

710:デフォルトの名無しさん
22/10/31 19:51:14.64 oV1LtMOH0.net
git diffはパッチファイルを作るために利用されるし、
diffは環境依存するコマンドなんだから、
そんなのに依存したら、gitの移植性が低くなる
別の環境で実行したら、diffコマンドの出力がおかしくて
正しくパッチ当てられませんとかなったら困るやろ
常識で考えろや

711:デフォルトの名無しさん
22/10/31 19:53:03.45 oV1LtMOH0.net
>>685
> とすれば出来ることなので、gnuにこれを提案しても当然「そんなんイラネーよ」で終わってしまう。
あのさぁ、提案するのはGNUだけじゃだめだって理解してないの?

712:デフォルトの名無しさん
22/10/31 19:53:31.39 J+3pjzxx0.net
>>684
どういう意味?
少なくともどのプラットフォームにもdiffはあるだろ。

713:デフォルトの名無しさん
22/10/31 19:56:13.88 GzQExg5g0.net
>>682
diff.externalやdifftoolによる置き換えは差分表示に使うdiffを置き換えるだけで、git内部でマージやリベースを行うための差分抽出には使わないだろ

714:デフォルトの名無しさん
22/10/31 20:00:09.03 9mfNegYM0.net
ん?
これはもしかして以前来てたPOSIX原理主義者氏か?

715:デフォルトの名無しさん
22/10/31 20:00:09.25 oV1LtMOH0.net
>>688
全部同じ実装じゃねーよ
それぞれ全部細かい違いがある
すべてのプラットフォームのdiffにまで対応するなんて
大変な作業なんて誰もやろうとは思わん

716:デフォルトの名無しさん
22/10/31 20:01:01.17 oV1LtMOH0.net
例えば2004年版のdiffには-uがないからな
The Open Group Base Specifications Issue 6
URLリンク(pubs.opengroup.org)

717:デフォルトの名無しさん
22/10/31 20:02:19.83 J+3pjzxx0.net
>>686
> diffは環境依存するコマンド
は?
まあ仮にそうだったとして、Git内のdiffがあらゆる環境で同じdiffを生成するように小細工してるとでも?
ただまあこの場合、ぶっちゃけ、小細工出来る=原因が分かってる≒多分Intサイズとかの違い、だから、
リモートリポジトリのマージで(俺は実際何を送ってくるのか知らんが)diffを送ってくるのなら、
それはマージ時点で鯖に問い合わせてdiffで済むかファイル本体を送らせてローカルでdiff取るかすればいいだけでしょ。
正直、原因究明して小細工するより後者の方が断然楽なので、合理的判断ならそうしてると思うけど。
>>691
前後したが上記。

>>689
その内部でマージやリベースを行う為のdiffをGNUdiffのdllコールと置き換えて、
マージやリベースが動かなくなるかって話だよ。普通に動くと思うけど。

718:デフォルトの名無しさん
22/10/31 20:03:29.56 oV1LtMOH0.net
> まあ仮にそうだったとして、Git内のdiffがあらゆる環境で同じdiffを生成するように小細工してるとでも?
同じdiffを生成するために、gitで実装してるんだろ
頭悪いのか?
依存ライブラリ(この場合はコマンドだが)を減らすのは
移植性を高めるための常識だ

719:デフォルトの名無しさん
22/10/31 20:04:11.62 oV1LtMOH0.net
OSの標準コマンドに依存したら
移植性は低くなるんだよ
常識やろ

720:デフォルトの名無しさん
22/10/31 20:08:10.94 J+3pjzxx0.net
>>692
> ユニファイド形式diffを最初に開発したのはウェイン・デイヴィソンで、
> 1990年8月のことであった(comp.sources.miscのVolume 14にunidiffとして投稿)。
> リチャード・ストールマンがGNUプロジェクトのdiffコマンドにこの機能を1ヶ月後に加え、
> 1991年1月リリースのGNU diff 1.15から使えるようになった。
> URLリンク(ja.wikipedia.org)
ただそれ以前に、-uがある/ないはGitでマージ出来る/出来ないにはならないだろ。
それは完全に人間用であってさ。

721:デフォルトの名無しさん
22/10/31 20:10:05.98 J+3pjzxx0.net
>>694,695
だからファイル本体をダウンロードして、mergeするマシン上でdiff取ればいいだけだろ。
これでマシン依存をなくせるし、普通の実装だよ。
通じないのか?どうもお前の書き込みは頭が悪そうだし。ならここら辺で切り上げるが。

722:デフォルトの名無しさん
22/10/31 20:15:24.67 oV1LtMOH0.net
>>696
-u がないとハンクの精度が下がるだろ
ほんとしらんならだまっとけよ

723:デフォルトの名無しさん
22/10/31 20:15:53.77 oV1LtMOH0.net
>>697
パッチファイルを受け取って
他の人がマージすることもあるだろ
ほーんと、しらんならだまっとけ

724:デフォルトの名無しさん
22/10/31 20:16:36.27 oV1LtMOH0.net
>>696
他のOSで使えるとは限らんだろうが
GNUしか頭にないんか

725:デフォルトの名無しさん
22/10/31 20:38:58.71 J+3pjzxx0.net
>>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に入れてるのを糞に言ってるが、保存先は本質ではないし、
適切なアーキテクチャであれば簡単に交換可能なものだ。
だから本来、こんな議論が発生する余地もないのだけど。

726:デフォルトの名無しさん
22/10/31 20:39:57.17 oV1LtMOH0.net
>>701
> それはGitの構造が糞だからだ。
結論ありきで理由を探すな
お前はクソな理由を一つも言っていない

727:デフォルトの名無しさん
22/10/31 20:40:47.45 oV1LtMOH0.net
以前来てたPOSIX原理主義者氏ではなく
また別のPOSIX原理主義者氏のようだなw

728:デフォルトの名無しさん
22/10/31 20:41:49.56 oV1LtMOH0.net
自分が認めているもの以外「全部方針が狂ってるよ」
その理由は、自分が認めていないからだよ
世界が認めていても
「俺が認めていないから世界の方が狂ってるんだよ!」

729:デフォルトの名無しさん
22/10/31 20:45:31.00 GrGctmUAM.net
POSIX原理主義はWindowsでの開発がめんどくさくなるんで本当に嫌いだわ
あと今更awkやsedの読みづらい文法覚えるより他のスクリプト言語で書いた方が楽だし、POSIX原理主義はPOSIXに慣れている奴のポジショントークにすぎないと思うね

730:デフォルトの名無しさん
22/10/31 20:46:22.02 GzQExg5g0.net
>>693
gitのバージョン管理されているファイルツリーはdiffコマンドがそのまま解釈できるような形式でファイルシステム上に存在しないからファイル単位で変換して外部関数呼び出すとか馬鹿だな
さらにgit内部で保持されるファイルの差分情報をdiffの出力みたいな字句解析が必要なバイト配列で取り扱うのも馬鹿げてる
このファイル差分抽出は間違いなくgitの核心的機能これが無ければVCSとして機能しない

731:デフォルトの名無しさん
22/10/31 20:49:18.25 oV1LtMOH0.net
>>705
POSIX原理主義者はPOSIXを理解してないよ。

732:デフォルトの名無しさん
22/10/31 20:55:34.73 GzQExg5g0.net
>>698
-uをサポートする前は、patch作るなら-cのコンテクスト形式だろ
-cなら-uとハンクの精度は変わらん

733:デフォルトの名無しさん
22/10/31 21:08:17.57 J+3pjzxx0.net
>>706
そこら辺の機能はGit以前から完全に機能してるんだよ。
> diffが作られてしばらくは、ソフトウェアコードや技術文書のマークアップのソース部分の変更箇所を比較する、
> プログラムのデバッグ出力の検証、ファイルシステム中のファイル一覧の比較といった使い方が一般的であった。
> ed用の出力により、ファイルへの一連の変更をひとまとめにしてファイル容量を節約するというアイデアが出てきた。
> Source Code Control System(SCCS)はそのようなアイデアを実装したものとして1970年代後半に実装がなされた。
> URLリンク(ja.wikipedia.org)
だからそれはGitのアイデアでも全然無く、Git以前からdiffとedを組み合わせれば誰でも出来る物だった。
勿論diffの出力がキモだから出来るだけ--minimumなのは目指すとしても、
それはdiffを改善すべき話で、Git本体が対応する話ではない。

てかこの辺のソフトウェア階層の話が通じないところを見ると、割と階層無しの文化=本当にCしか知らない感じだな。
例えばJSとかでは、扱うデータの先がDBなのか、ローカルファイルなのか、メモリ上のStringなのかを
上位のコードは区別しないで済むようにコーディングすることが普通で、
と言うか実際はそうしか出来なくて、強制的にそうさせられるわけだが、
形式的には、ネットワークでもローカルファイルでもメモリ上のStringでも、
プログラミングモデル側からは全部読み書き出来る状態になってから制御が渡される。
(メモリ上に展開し終えてから渡されるイメージ、なおこれをRubyでは上手いこと遅延読み出しにしてたりするが)
CでI/Oを分離するにしても普通はそうするし、実際、Gitでもそうなってる。
でないと git log -L で全展開の倍ほどメモリ食うとかあり


734:得ないし。 最終段のI/Oは普通はそうやって上位のコードと分離するもので、Gitもcat-fileでそうなってる。 ただ、それを交換出来ないので、テキストやDBに保存したい奴に対応出来てないだけ。 これはGitの構造の問題だよ。 それでsshを別に実装しますとか、かなり馬鹿げた方針だ。 少なくともJS知ってればそうはならない。



735:デフォルトの名無しさん
22/10/31 21:09:37.44 J+3pjzxx0.net
Webの連中は馬鹿なのも事実だけど、馬鹿でも上手く行くように色々上手く出来てるのも事実なんだよ。
Cの連中は一度Webをやってみると凄く勉強になると思うよ。俺もそうだったし。
ただしWebはかなり糞なのも事実だが。

736:デフォルトの名無しさん
22/10/31 21:15:30.28 GzQExg5g0.net
>>709
マージやリベースでやってる差分抽出は最終段のI/Oじゃないし
C言語でシンプルに実装されてるgitをMSが作る馬鹿みたいに重いツールにしないでくれよ

737:デフォルトの名無しさん
22/10/31 21:34:40.89 GzQExg5g0.net
BitKeeperを元にGitを実装したリーナスはBitKeeper以前のVCSを糞みたいに言ってるんだよね
URLリンク(ezoeryou.github.io)
edとdiffを使ったようなVCSは眼中になかった

738:デフォルトの名無しさん
22/10/31 21:39:28.36 J+3pjzxx0.net
>>711
だから普通は、内部的に圧縮されたファイルへのアクセスは、
1. 単純にメモリ展開する
2. 何らかのプロキシオブジェクトでエミュレートする
のどちらかで、大概前者だしGitでもそうなってる。
だからここで速度低下とかは関係ない話だ。
(なお後者は/dev/zeroとか/dev/randomとかと言えば分かるだろう)
そこを他の言語、PHP/JS/Go/Rustのどれかを知ってれば、
そこでオブジェクトにしてI/O分離してマルチターゲットにしてしまうのも常識。
これを思いつけない/知らないのだから多分本当にCしか知らない連中だけでやってるよ。
君からもそれを感じる。
ちなみに重くなる/ならないなら、SQLiteは大量の小さいファイルならファイルよりも速いぜ!とか言ってるし、
他DBと違ってローカルだから試してみると面白いかもよ。
URLリンク(www.sqlite.org)

739:デフォルトの名無しさん
22/10/31 21:52:54.41 GzQExg5g0.net
>>713
内部的に圧縮されたファイル?
「ファイルツリーはdiffコマンドがそのまま解釈できるような形式でファイルシステム上に存在しない」
これを勘違いしたのかな?
ファイルじゃなくてファイルツリーね
gitのディレクトリーのツリー構造を保持する方法独特だからその各ファイルをdiff取ってもらうためにツリーをtraverseするインターフェースを提供する必要が有る
ファイル単位の差分抽出なんて複雑な処理でもないんだからそれをやってもらうためにそれよりはるかに複雑なインターフェースを設計するとか無駄以外の何物でもないな

740:デフォルトの名無しさん
22/10/31 21:54:31.60 J+3pjzxx0.net
>>712
ただそれはedとdiffが問題だったわけではないだろうし、
仮にそうだったとしても、正しくソフトウェアを構成していればすぐに交換可能で、全く問題にならないんだよ。
その辺がソフトウェア階層の意識がないなあと思うところだよ。
Cはそういう世界でもあるけどさ。
edとdiffで展開するのが駄目なら、他方式の cat-file 階層に交換してしまえば何とでもなるんだよ。
Gitの方式が優れていれば、他VCSがGitの末端階層のI/Oコードを取り込めば済むだけ。
だからそこを問題にする時点でズレてる。
例えばgzipの様なストリーミング方式の cat-file にしてもう動作するし、7zipでも何でもいいんだよ。
(バージョン管理システムの場合は個別ファイルではなくファイルセットでの圧縮なので実際はこれらは適切ではないが)
それでLinusが言ってるように、キモは
> 問題はコード量ではなくて、どのようにデータを扱うかだった。
> 初期の実際のコード量は、かなり少ない。基本的な考え方が正しいかどうかにかかっている。開発を始める前からそのアイディアについて考察していたわけだ。
であって、要はツリーコントロールであって、I/Oではないだろ。

741:デフォルトの名無しさん
22/10/31 22:11:44.63 J+3pjzxx0.net
>>714
ああ、ファイルと


742:勘違いしていたのは事実だが、それでも意味は同じだよ。 > gitのディレクトリーのツリー構造を保持する方法独特だからその各ファイルをdiff取ってもらうためにツリーをtraverseするインターフェースを提供する必要が有る 勿論その通りだが、つまりこれはファイルシステムであって、その先に隠蔽出来るんだよ。 NTFSかext4かbitlockerを使ってるか圧縮DISKかをアプリは気にしないだろ。 それはOSがファイルシステムの違いを隠蔽してくれるから。これと同じ。 同様に、 cat-file で末端のファイルの形式の違いは隠蔽出来て、 ファイルシステムドライバ(とでも言うべきか?)で、ツリー詳細構造の違いは隠蔽出来るんだよ。 そしてそれは当然Gitにも入ってる。 だからその上位からはGit形式のファイルツリー/オブジェクトツリーを 普通のファイルシステム/オブジェクトと同じように見せることは可能なんだよ。 そして実際にそうしてるはずだよ。 だからな、自分が管轄してる階層以外の所は、はっきり言って関係ないしコードからも見えないんだよ。 Cの場合はその辺の階層意識が希薄で、実際君との空回りもこれだが、Gitもこの辺は正しく実装されてるはず。



743:デフォルトの名無しさん
22/10/31 22:17:17.34 GzQExg5g0.net
>>716
cat-fileは単にblobの中身を表示するコマンドってだけで、逆をやるblobを作るコマンドが用意されてるわけじゃない
つまりここでソフトウェア的に階層がきれいに分かれてるわけじゃない
ここを置き換えて自由な圧縮アルゴリズムを使えるようになっていたとしたら
Libgit2 みたいな別実装のライブラリが出現する余地もなかっただろう
ここは変にインターフェース階層なんて用意しなくて正解
gitはツールであるとともにフォーマットでもあるんだよ
フォーマットに自由なオプションが用意されているとか別の実装を作る側としては悪夢でしかない

744:デフォルトの名無しさん
22/10/31 22:33:44.64 DiR+92tnM.net
そう、このクレーマーはGitのデータモデルやデータフォーマットとしての側面を見落としてる
確固とした優れたデータモデルを持つってのは立派なUNIX哲学の一つなんだけどねえ

745:デフォルトの名無しさん
22/10/31 22:39:17.91 h5Hfu9WR0.net
>>715
いいから、お前に git は向いてないから消えろ。git は万人向けじゃない。
自分で納得がいくものを作ってそれを使え。
どうせ多人数がかかわるようなプロジェクトとかには縁がないだろから、一人で寂しく使ってろ。

746:デフォルトの名無しさん
22/10/31 22:41:57.65 J+3pjzxx0.net
>>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は上から下まで全管轄出来るんだけど、無駄にやりすぎてるコードになりがちなのも事実。
なまじ出来るものだからやっちゃうのだけど、それは正しい構成ではないんだよ。

747:デフォルトの名無しさん
22/10/31 22:45:45.36 h5Hfu9WR0.net
>>720
糞理論いいから、まずは作って見せろ。

748:デフォルトの名無しさん
22/10/31 22:50:56.79 GzQExg5g0.net
>>720
そんな入れ替え可能な階層分けが必要なら最初から全部C言語以外で作ればよかったんだよ
でもリーナスはC言語を選んでほぼunixシステムコールを直接叩く方式で実装した
hqなんかの方がお前の好みに近いだろうけど、hqは廃れてgit全盛となった
むかしはこのスレにもhq信者が盛んにチョッカイかけに来たもんだけど、いまは何してるんだろうな

749:デフォルトの名無しさん
22/10/31 22:55:40.76 h5Hfu9WR0.net
もはや


750:名前すらちゃんと覚えてもらえてない hg さん。



751:デフォルトの名無しさん
22/10/31 22:59:10.92 J+3pjzxx0.net
>>717
あーだからな、フレームワークを一度使ってみれば勉強になると思うよ。
フレームワークは型に嵌められるのだけど、
その型はそれなりの奴が一生懸命考えた型だから、それなりなんだよ。
なるほどこうすればファイルもネットワークもDBも全部同じコードでいけるのか、とか分かるよ。
ファイルシステム構造も、末端のファイル自体も、
上位には関係ないように隠蔽出来るし、難しいことではない。
実際、Git cat-file はGitファイルシステムを隠蔽してる、とも言えるだろ。

>>722
つかなんか勘違いしてると思うが、階層を分けたら遅くなるとかではないんだよ。
(厳密に言えば関数コールが1つ入るからその分は遅くなるが)

752:デフォルトの名無しさん
22/10/31 23:00:32.54 h5Hfu9WR0.net
>>724
いいからお前は自分で作れ git 使う必要はないぞ

753:デフォルトの名無しさん
22/10/31 23:25:07.54 GzQExg5g0.net
>>724
結局gitがどういう方式で実装されているかなんてことよりファイルフォーマットの方が重要ってことだ
だからgitの実装とファイルフォーマットを切り離すようなインターフェース階層は必要無いしだれも実装しない
必要無いものを実装すれば余計なメンテの手間もかかる

754:デフォルトの名無しさん
22/10/31 23:25:57.99 Sz6pT8cp0.net
すごい勢いでスレ消費してるな…
>>676
1回のコミットで整理っていうのは、1つのコミットにまとめるってことかな?
それとも1回のコマンドで済ませたいってことかな(何度もcherry-pickしたくない)?
merge squashじゃあかんかね。
連続してない部分的なコミットをまとめるならrebase squashでもいいよ。
連続してないコミットなら、rebase -i使えばいいよ。いらないコミットはdropできるよ。
rebaseするときは、元のブランチ消えるから、必要なら復帰用にブランチ作っておくといいよ。

755:デフォルトの名無しさん
22/11/01 00:01:33.71 Jzc3CN/20.net
>>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マクロで実体を呼ぶかラッパを呼ぶか簡単に切換可能なので、
実際どうするかはともかく、


756:ソースコードはメンテしておくべきだよ。



757:デフォルトの名無しさん
22/11/01 00:33:10.99 kz7RaJ2H0.net
>>728
現状の.git/* の形式が十分にシンプル明解でこれが共通I/Fになっている
すでにこの共通I/Fに沿っていろいろな実装が存在している
結果これを変更するための内部的なI/F階層が必要とされていない
内部的な構造としてはそんなことよりSHA-1をSHA-256に変更することの方が重要で実験的実装が進んでいる
切り口が違うからお前の言うような階層をつくってもハッシュの形式の変更には対応できない
そんなくだらないことに割く労力は無い

758:デフォルトの名無しさん
22/11/01 00:33:26.41 1wY/uhrP0.net
長いからまとめたよ。
「俺は実装しないけど、俺以外の誰かが俺の推測に沿うように実装しておくべきなんだ。俺は実装しないけど。」

759:デフォルトの名無しさん
22/11/01 01:23:19.93 ju8ytuSJ0.net
なんでgitの話でフレームワークの話が出て来んのかな

760:デフォルトの名無しさん
22/11/01 01:46:22.68 Mxyz6tUC0.net
無限の自由度の代わりに組み合わせ爆発が生じてエッジケースでバグが出まくり、というのは嫌だという設計思想なんじゃないかな
確かにWeb系でDIするのは当たり前だけど、RDBMSやビジネスロジック以外はトラブってもいいWeb系と違ってgitでトラブル続発したら困るし。
ファイルシステムみたいなものでは。

761:デフォルトの名無しさん
22/11/01 01:52:53.48 Mxyz6tUC0.net
あと大体git自体が膨大なLinuxカーネルのVCSとしてかなり高速に、確実に動作する必要があったという大前提があるだろう。
そこを無視して汎用的にはこっちの方がいいってのは違うんじゃないかな。
汎用的な用途としてのVCSが欲しいならばpost-gitを作るしかないと思うよ。

762:デフォルトの名無しさん
22/11/01 02:08:49.56 QdibabTL0.net
そもそも汎用性がある方が良いというのから幻想
道具は利用目的にあっているかどうかが全て十徳ナイフありがたがるやつは素人

763:デフォルトの名無しさん
22/11/01 03:17:45.94 Jzc3CN/20.net
>>729
それも根本的に間違ってる。
ハッシュはハッシュでレイヤーを切るから、正しく構成されてるソフトウェアなら、
ハッシュを変更するのはハッシュ生成関数内だけで済むんだよ。
具体的には、全体は get_hash() を呼んでハッシュを受け取るようにしておいて、
その get_hash() 内でSHA-1かSHA-256かmd5かを変更するだけにするんだよ。
というかこんなの当たり前すぎてお前らが理解出来てないのにびびる。
オブジェクト指向では基本中の基本とされてることだぞ。
お前らプログラマじゃねえだろマジで。プログラマなら、ちょっと勉強し直さないとヤバいぜ。
ただこれは、本質的に「返ってくるオブジェクトのサイズは予想出来ない」事になり、
C的な「返ってくるオブジェクトのサイズは呼ぶ前に完全に予期出来ている(だいたい固定)」の世界にはフィットしない。
C++とかはデストラクタで、その他言語はGCで対応するのが常策だが、
これに関してはバイナリにハードコードで問題ないから#defineでいい。
ただC++だと#defineは悪とされてるから、絶対にデストラクタでやるんだ!いやスマポだ!みたいな奴も居て、
それを勧めてくるからLinusはブチ切れてるわけだが。
だけどハッシュサイズなんて動的に変化すること無いのだから、#defineで全く問題ない。
そしてそれに手こずってる時点で、#defineでの切換すら出来ない、
全体がそれぞれで勝手にSHA-1を生成してたコードになってるって事だよ。
それはマジで糞だよ。(まあ、でも直せば済む話ではあるんだけどさ)

764:デフォルトの名無しさん
22/11/01 03:19:13.38 Jzc3CN/20.net
>>732,733
これをDIと呼ぶのか?はさておき、DIでバグが増えるなんて事はないよ。
そして、get_hash()でのオーバーヘッドは関数呼び出し一回でしかなく、
それで致命的に遅くなるなんて事もないよ。
というか、


765:GitのマージってI/Oバウンドだと思ってるが違うのか?



766:デフォルトの名無しさん
22/11/01 03:55:08.59 kz7RaJ2H0.net
>>735
ただ単純にハッシュアルゴリズムをSHA-1からSHA-256に変更するわけじゃないぞ
既存のSHA-1リポジトリも全部(リベース状態にすることなしに)SHA-256で運用できるようにしたりするんだよ
gitの開発はリポジトリのフォーマットの継続性をとても重視してる

767:デフォルトの名無しさん (ワッチョイ 497b-vCJ4)
22/11/01 08:06:29.98 Jzc3CN/20.net
>>737
同じだよ。
正しく構成されてる場合は何種類混在しても全く問題ないし、簡単に変更可能だ。
つかマジでそれオブジェクト指向(OOP)の基本中の基本だから。

ただ、混在なら、Cで一般的に使われてるSIZEOFの#defineでは対応出来ないが、
Linusのコードなら、Cでは一般的に禁止されてる小文字マクロで
普通にそこら辺の関数もマクロだらけの可能性があり、(linuxカーネルコードがそう)
この場合は、#define内のマクロ定義を一箇所変更するだけで対応可能ではある。

が、まあ、マクロ云々の話は本来はNGとされてて他言語では厳禁だから、いわゆる正しい方策を示すと、
全体の関数はハッシュの中身が何か知らない状態で記述するんだよ。
get_hash()でハッシュのポインタを貰いました、中身は知りませんので具体的な操作はできません、
なので一々投げ返して操作して貰いますがよろしいですね?とする。

768:デフォルトの名無しさん (ワッチョイ 497b-vCJ4)
22/11/01 08:06:50.06 Jzc3CN/20.net
と書くと意味不明だが、この場合は要は貰ったポインタを一々投げ返して操作してもらう。
具体的には、

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って何?みたいな質問が掲示板上でもやたらでてくるわけでさ。

769:デフォルトの名無しさん (ワッチョイ 497b-vCJ4)
22/11/01 08:51:54.94 Jzc3CN/20.net
補足。

分からなければ「OOP 抽象化」でググって色々読んでみてくれ。
死ぬほどでてくるはず。マジで基本中の基本だから。
ハッシュを交換することに手こずるようなら、その『コード』は間違いなく糞だ。(Git自体が糞と言っているわけではない)
ただ、修正すればいいだけ、要は漏れなく上記のようにしてしまえばいいだけではあるが。

正しく構成すれば、Hash変更なんて簡単に出来るし、
そもそもそうなってないコードなんてOOPでは存在を許されてない。
(そうとは書けないように構成されてる。
それを


770:強制的にやらせるシステムの一つがprivateだが、これはこれで間違った使われ方も多いが)



771:デフォルトの名無しさん (ワッチョイ d9e4-Xmag)
22/11/01 09:16:06.92 kz7RaJ2H0.net
長々とご苦労さんだがお前SHA-256対応の意味が理解できてないよ

772:デフォルトの名無しさん (ワッチョイ 497b-vCJ4)
22/11/01 09:26:52.60 Jzc3CN/20.net
>>741
俺は以下記事の理解書いてる。
俺が書いた事の意味が分からないのは君の問題。
URLリンク(www.infoq.com)
ただ、初めてOOPを示されていきなり意義を理解出来る奴はほぼ居ないのも事実。
でも、君は確実に老害扱いされてると思うよ。

773:デフォルトの名無しさん (ワッチョイ f15f-iYvO)
22/11/01 09:32:09.77 WFTKMpG40.net
なんだか知らんけど5chでうだうだ言ってて何になるの

774:デフォルトの名無しさん (ワッチョイ d9e4-Xmag)
22/11/01 09:36:58.90 kz7RaJ2H0.net
>>742
君はその記事の意味することを理解できてないね
コミットオブジェクトの構造とか役目を理解出来てないと難しいかもしれない

775:デフォルトの名無しさん (ワッチョイ 497b-vCJ4)
22/11/01 09:57:34.79 Jzc3CN/20.net
>>744
そう思いたいんだろうけど、残念ながらそうじゃない。

少なくとも君はソフトウェア階層やOOPの基本事項について全く理解出来てない。
だから今、老害と言われ続けるか、再び学び直して熟練者と言われるかの分水嶺にいるだけ。
俺は君に何も強制することは出来ないが。

確かに俺はGit初心者なので、記事の理解は間違ってるかもしれない。
でも、ハッシュの中身や長さが変わったり混在したところで、
正しく構成されてるソフトウェアなら数行の変更で対応可能なのは事実だよ。
そして君と同様の人達によってGitが作られているのであれば、
そりゃそうなってなくて苦労するんだろうさ。


まあいいけどね。もう水掛け論だから終わりにしようぜ。これ以上やってもお互い得る物もないし。

776:デフォルトの名無しさん (ワッチョイ 8b8f-5UCg)
22/11/01 10:12:34.67 ju8ytuSJ0.net
> GITは、すべてのファイルオブジェクトとコミットの識別と整合性チェックをSHA-1に強く依存しています
こう書いてあるのになんで無視するんだろう

777:デフォルトの名無しさん (ワッチョイ d9e4-Xmag)
22/11/01 10:29:09.24 kz7RaJ2H0.net
>>745
数行で対応w
それが出来ないgithubは無能集団なんですねw
糞MSに買われちゃうぐらいだから仕方ないか

778:デフォルトの名無しさん
22/11/01 12:34:56.06 lDKItQe4r.net
Git初心者に語らせると頓珍漢な文章が生まれるという好例

779:デフォルトの名無しさん
22/11/01 12:39:40.93 QdibabTL0.net
>>745
お前日本語読めなさそうだな
ましてやリンク先にある英語とかかけらも理解できてないだろ
混在とかじゃないぞ。二つを同時につけて「安全」に相互変換するということだぞ
安全にすることが目的でSHA-256を使えば解決みたいな話じゃない



780:ィ前みたいなのが目的と手段を取り違えるタイプの典型 OOPとかアホなプログラマでも理解できる単純なことなわけないだろ そんなんで済むならとっくに終わってる まずは常識で考えろ できないなら黙って勉強しろ



781:デフォルトの名無しさん
22/11/01 18:29:25.93 /+vO/8+o0.net
長文すげー

782:デフォルトの名無しさん
22/11/02 05:40:42.57 n+gr/3CY0.net
>>749
どうであれ同じだよ。
複数付けようが、何をどう組み合わせようが、
抽象化の向こうの実体については知らないし、取り扱うコードも存在してないから、
同じバイナリで動作するんだよ。それが抽象化と隠蔽で、これはOOPの基本中の基本。

783:デフォルトの名無しさん
22/11/02 05:41:43.29 n+gr/3CY0.net
んー、お前ら完全に化石だわ。若い奴からは確実に馬鹿にされてるよ。
というか、現在において有名OSSにこんな化石居住区が存在してたことにびっくりだわ。
>>747
数行ってのは誇張ではなく、実際にそんなもんなんだよ。
例えばMMDは3DVision対応に20-30行と言ってるが、
> そのため、樋口氏がMMDの3D Vision対応に要したのは、20~30行程度の簡単なコーディングのみだった。
> URLリンク(pc.watch.impress.co.jp)
この樋口氏はVer5->7でDirectX対応してて、その時もインタビュー受けてて(ググッても出てこないが)
確か「よくよく確認して、実際に変更する必要があるのは2-3行だったのでほっとしました」
とか言ってたはず。
これは特殊ケースではなく、こうなるように設計するんだよ。
これに対してGitはマニュアル見てもそういう思想が全く見あたらず、「頑張ればいいよね」で終わってる。
だから糞なソースも「頑張って」修正して何とかするんだ、のノリだ。
ソフトウェア工学はそんなのは20年前にクリアしてて、今は、
A. どうすれば変更に対して強くなるか(仕様変更があってもソースコードを変更せずに済むか)
B. どうすればそもそもソースコードを記述する必要すらなく出来るのか(全ての状況に対し同じバイナリで対応する)
C. どうすれば出来るだけ早い段階でバグを検出出来るか
とか移ってて、大体馬鹿がCに対して悪ノリしてるからLinusがこき下ろす事態になるのだが、
ABはちゃんとやらないと話にならないよ。
だからまあ、次のGitは「勉強をがんばらなくてすむGit」で、
実装で一番簡単な方法は、Gitをバックエンドに使ってシェルスクリプトでラップすることだよ。これらは既に言ったが。
でも君らは「頑張らなくちゃいけない」「頑張るべきものだ」と思っちゃってるみたいだから、
今のGitプロジェクトからはこれは出てこないだろう。
となると、上記のようにして簡単に実装したNext-Gitに成果をかっさらわれ続ける事態になると思うよ。
ちょうどGNU/Linuxの形に似てるが。
あれはLinusが悪いわけではないし、ストールマンも別になんとも思ってないようだけど。

784:デフォルトの名無しさん
22/11/02 06:01:09.34 z+vraLDY0.net
> これは特殊ケースではなく、こうなるように設計するんだよ。
> これに対してGitはマニュアル見てもそういう思想が全く見あたらず、「頑張ればいいよね」で終わってる。
それあなたの感想ですよね?
gitはソースコード1行程度で変更終わりですよ

785:デフォルトの名無しさん
22/11/02 06:03:01.35 z+vraLDY0.net
> 実装で一番簡単な方法は、Gitをバックエンドに使ってシェルスクリプトでラップすることだよ。これらは既に言ったが。
シェルスクリプトは移植性低いって分かってる?
シェルスクリプトでラップしようものなら
Linuxでは動くがFreeBSDでは動かないってことが
しょっちゅう発生する
シェルスクリプトで頑張るものじゃない

786:デフォルトの名無しさん
22/11/02 07:01:05.57 S2ENS6Jw0.net
git の一部機能は git コマンドを使ったスクリプトで実装されていたんだけど、多くのユーザーの要望に応える形でそれらのC言語化進めてる

787:デフォルトの名無しさん
22/11/02 09:34:00.28 33j+wJW8H.net
シェルでラップw
USPから悪い影響でも受けたか?

788:デフォルトの名無しさん (ワッチョイ 8bbb-VzUj)
22/11/02 10:35:32.50 sFE/M4aa0.net
OOPなんて初心者プログラマ訓練ギブスってことを理解できなくてアホ理論展開しているやつがいてw

789:デフォルトの名無しさん
22/11/02 14:42:23.54 LlnSL/r70.net
OOPなんか、そん辺のサンデープログラマでもかなり深い所までメリットデメリット含め浸透してるがな。
関数指向やクロージャがある言語も同様で
もはや当たり前のようにハイブリッドになってて一部の原理主義者以外いい塩梅で使ってるから話題にはならん。

790:デフォルトの名無しさん
22/11/02 15:33:51.58 4T0OIw/dr.net
OOPそれほど語るなら、お前の大好きなシェルスクリプトはみんなOOP意識して作られてるのかって感じだな

791:デフォルトの名無しさん
22/11/02 18:08:31.10 mw55lzgRM.net
リーナスを中心としたOSSコミュニティの起源にタネンバウムとのモノリシックカーネル・マイクロカーネル論争があることを知らないのかな?
結果として無駄な抽象階層を積み重ねることの無意味さをLinuxカーネルの成功が証明してしまった
もちろんLinuxカーネルもファイルシステムとか必要なとこは抽象化されてるけどね

792:デフォルトの名無しさん
22/11/02 18:41:51.51 1AIcQZnX6.net
今どきの若い奴(というか最新の風潮)ってなんでもかんでもオブジェクト指向を徹底するって感じじゃないと思うけどなあ
それこそオブジェクト指向主義みたいなのが滅茶苦茶強かったのって20年前ぐらいじゃない?
WindowsもNTでマイクロカーネルにしたけどオーバーヘッドデカすぎて一部はカーネル空間に戻したりしたでしょ。
SIerの階層が深い開発なんかだとオブジェクト指向を徹底しないと事故が起こりそうだけど、そういうとこしか知らない人間なのか?

793:デフォルトの名無しさん
22/11/02 22:26:03.48 KtYxSAYnr.net
何でもかんでもシェルでやろうとするやつは病気
名前を呼んではいけないあの開発手法とか推してそう

794:デフォルトの名無しさん
22/11/03 05:47:24.09 AHw2USmo0.net
>>755
それはどのプラットフォームで問題になったの?
賢い選択とは思えないけどね。
具体的なデメリットは既に666で挙げたとおり。
俺はシェルの互換性問題なんて有ったとは思えないけど、
(昔からsh《bsh》は互換性は高かったし、今はその後継のbashで統一されてる。
ああ確かにcsh/tcsh/ksh/zshはゴミだったし死滅したよ)
それが問題なら、GitのC化ではなく、直接シェルの互換性を上げるのが常策だよ。
互換性がC化で達成出来るのなら、
既にあるbash(多分C)ソースをコンパイルしただけのものを同梱し、
gsh(=gitsh)だ!これを使え!と強弁すれば済んだろ。
なんかやっぱり無能の働き者を地で行ってる気はする。
仕事を減らす努力をしてないよね。

795:デフォルトの名無しさん
22/11/03 05:49:10.00 AHw2USmo0.net
>>758
その通りだ。だからアマチュアの樋口Pも正しく対応出来てた。
だからこそ、このスレのこれまでのやりとりに驚いている。
今時初心者でも、他言語スレでもあり得ない流れだ。

で、パッチ出てきたけど、あれでは駄目だね。
彼等はC流のメモリ管理の方法を知らず、Gitは完全に糞コードで出来てる。
あれでは他にもメモリリークだらけだよ。
(ただこれも想定内っぽいし、
リークしたところでアプリとしては大した問題でもないのも事実だが)
彼等は、バグを直す努力はしているが、
バグが出にくいコードにする努力は全くしてない。
OOPもやりすぎると問題だが、何故彼等はそうするのかを学んで、
美味しいところだけ貰えばいい�


796:フにとは思うよ。 OOP原理主義者も、Gitプロジェクトやこのスレ民みたいなOOP排除原理主義者も、同様に問題だよ。



797:デフォルトの名無しさん
22/11/03 06:07:03.27 AHw2USmo0.net
ただ見る限りGit界隈は密結合主義のようだ。
つまり、Gitと知識的に密結合した、Gitに詳しい奴だけがGitを使うべきであり、
tutorial1が基本コマンドなら普通はtutorial2は応用コマンドのところ、
なんと内部データ構造の紹介になってるし、
(ただこれは俺には極めて有効に作用したが、普通はブーイングの嵐だろう)

798:デフォルトの名無しさん
22/11/03 06:07:22.90 AHw2USmo0.net
ソースコードも密結合、これは馬鹿除けだ!と言い放つ。
糞コードでもパッチの手数で勝負だ!カリスマLinusならモグラ叩き志願者は無限に募れる!
とまあ、他の誰も出来ないアプローチだね。
ただまあ、ソースコードを清潔に保つ目的は長期的メンテの為であり、
それは実際出来てるしいいだろ、と言われれば、はーそうですねー(棒)だが。

799:デフォルトの名無しさん
22/11/03 06:07:59.96 AHw2USmo0.net
これ見てたら、buggyな糞コードでもとりあえず動けば受け入れてどんどん改訂し、バグもパッチの手数で勝負するのと、
普通のプロジェクトがやってる、レビューして駄目なコードは最初からrejectするのと、
(つまり手間をかけてもrejectされる可能性があるからコードを投げるのを躊躇される)
どっちが良いのだろう?とは考えさせられるよ。
リソースが無限にあるOSSでは、前者の方がいいのだろうか?
LinusはBillJoyに対して「オープンソースを理解してない」と思ったらしいが、こういう事なのだろうか?
(この発言はLinus著作本にあるらしいが、俺は読めてない)
しかしこのアプローチでは、絶対に浄化はしない。
自分の糞を片づけるのは仕方ないとして、
他人の糞を片づけたがる奴はいないし、そもそもその界隈が掃除に価値を置いてない。
しかし糞コードならどんどん投げてもらえるし、それらを受け入れる限り、進化が止まることもない。
はーなんだかねー。なるほど研究者と色々衝突するのも分かる気はする。
そういや大昔「伽藍とバザール」読んだなーと思って今読み返してみたが、これがバザールなのか?
(NGにかかったので分割した)

800:デフォルトの名無しさん
22/11/03 10:41:57.59 NhDXzDSd0.net
それだけ文句あるなら本家MLで言うか自分で作り直してみろよ軍師様
これだけ大口叩いておいて英語のMLでコミュニケーションとれないとかだったら笑うが
Git は世界中のプログラマが使ってる最重要プロジェクトで、これが改良されるとなれば世界中から絶賛される

801:デフォルトの名無しさん
22/11/03 10:46:51.87 odT0DHDr0.net
まだやってのか
暇そうだな

802:デフォルトの名無しさん
22/11/03 13:22:38.17 AHw2USmo0.net
>>768
それは無理だね。
仮に時間が十分にあったとしても、俺が改善出来るのはソースコードであって、アプリではない。
アプリの改善には良い仕様にする事が最も重要で、実装は実は大した問題ではない。
(使う分には十分に動けばなんでも良くて、それが糞コードで出来てたから何?でしかない)
GitはLinus本人が当時のVCSの問題点を全て把握してたからいい仕様になった。
俺はそうじゃない。今の俺がやったら俺にとって都合がいいだけで、他にとっては糞な物にしかならない。
ただ実際はLinusもこれで、みんな乗り換えて来たから同じ問題を抱えていたんだろ、
という解釈らしいが、いずれにしても使い込んでる奴じゃないといい仕様には出来ないんだよ。
そして例のブランコ問題
> 顧客が本当に必要だったもの
> URLリンク(dic.nicovideo.jp)


803:0%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE もあり、顧客自身が実装してるんだから、そりゃ商用VCSでは絶望的に仕様的に太刀打ち出来ない。 そしてソースコード戦略も違う。Gitはコードレビューとか無い世界なんじゃないかな? それで回るってのがスゲエが、多分これは「伽藍とバザール」の衝撃を追体験しただけなのだろう。 ソースコードを綺麗にしたら、新機能の追加が断然早くはなるけど、それは同じ人数での話で、 ここも手数で勝負だ!と来られたら、為す術もない。 ソースコードなんて糞でいいんだ、人数さえ有れば!では、研究者とは対立するよ。 なるほどエンジニアリングの天才だというのも納得ではある。 だからまあ、Gitを根本的に覆すにはGitよりも良い仕様が必要で、これは本当に難しいんだろうさ。 ところで、やはり俺のワークフローではIndexが邪魔なので削除しようと思うんだけど、 そもそもあれはどう使う為に設計されたものなのだ? 多分Indexの存在が一番直感的でなく、『説明されてないと』間違える所だと思うんだが。 今のところadd直後にcommitしてて、邪魔でしかない状態で使ってる。



804:デフォルトの名無しさん
22/11/03 13:30:44.47 9oLRzF140.net
index stageなかったら複数ファイルの変更を一度にcommitできないじゃん。コミット粒度の問題から、全部の変更をcommitしたいわけでもないし。
どのcommitを取ってきてもちゃんと動く状態にするのが普通だからどう考えてもいるでしょ。

805:デフォルトの名無しさん
22/11/03 13:52:50.16 /4IN/B1bM.net
indexの意味がわかってない馬鹿が全然関係無いファイルをコミットしてリポジトリをブチ壊す

806:デフォルトの名無しさん
22/11/03 14:35:27.11 AHw2USmo0.net
>>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 を真似して上記のようにするつもりだが、何かまずいかな?

807:デフォルトの名無しさん
22/11/03 14:40:47.35 5PP47Osh0.net
git分からない思想も理解できないならSVN使えば?

808:デフォルトの名無しさん
22/11/03 14:46:46.91 9oLRzF140.net
>>773
そりゃgitの設計思想で想定されたコミットの仕方をしていないからindex stageがいらないと感じるだけでしょ。
大多数は設計思想通りに使っているので、index stageが必要だと理解していると思うよ。
だから、「どう使うために設計された」かと聞かれれば、gitの思想通りにコミット粒度を適度に保つためだとしか言いようがない。
「俺は違うから俺はいらない」はそれはそうだろうが、だから何?って話になる。

809:デフォルトの名無しさん
22/11/03 15:04:33.12 jVDh6EB5M.net
適当なタイミングで時系列に修正を記録していくものだと思ってる阿保には理解できないVCS

810:デフォルトの名無しさん
22/11/03 15:05:56.85 AHw2USmo0.net
>>775
git add -u を複数回して粒度を上げて動くものだけcommitしてもいいのだけど、
俺の場合は10回に1回程度は2-3回前の変更とdiff取った方が見やすいことがあって、
その場合にhash控えておくのが面倒だし、gcされてたらさらに面倒だし、gc切るのもまた邪道だろうしで、
動かないのもcommitしてfeatureの途中は動きませんと割り切るのが一番ましかと思ってる。
まあでもありがとう。
粒度調整の為ならこちらの予想の範囲内ではあった。

811:デフォルトの名無しさん
22/11/03 15:26:33.67 O+O1uzzM0.net
>>777
> その場合にhash控えておくのが面倒だし、gcされてたらさらに面倒だし、gc切るのもまた邪道だろうしで、
N個前との diff は git diff HEAD~N でハッシュを控える必要もないし gc のくだりは何のこと言ってるのかわからない。
> 動かないのもcommitしてfeatureの途中は動きませんと割り切るのが一番ましかと思ってる。
ローカルブランチなら別に構わないけど、そのノリで作られたブランチをそのままレビューするのは効率悪い。
なのでマージ前のブランチをレビュー対象とする開発では push の際に整理することになるから、
都度整理の際にインデックスはとても有用。
他にも、作業中に全然関係ない typo 直したりするのにも使える。

812:デフォルトの名無しさん
22/11/03 15:53:58.77 HnXRQ5rf0.net
index の重要性が分からないやつが git 語ってて草。
素人向けに説明すると git の役目は他人に読んでもらうやすい分かり易いパッチを仕上げること。
個人で作る分にはそれほど関係ないが共同作業するには他人への分かり易さ、見た目は最重要といっていい。
料理に例えるならフライパンやまな板のまま出すんじゃなくて、皿に盛って食べ易くしてから出すのが基本。
ワークツリーがフライパンで、インデックスが皿。フライパンからでも直接食えるけど、綺麗に皿に盛って、そこで丁寧にチェックしてから提供すれば他人の作業効率が上がる。

813:デフォルトの名無しさん
22/11/03 16:18:44.28 AHw2USmo0.net
>>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コマンドはスルーだからな)

814:デフォルトの名無しさん
22/11/03 16:20:05.12 AHw2USmo0.net
>>779
いやレビュー対象はcommit済みで、index上ではないだろ。

815:デフォルトの名無しさん
22/11/03 16:22:38.83 5PP47Osh0.net
うんうんわかった
大人しくSVN使え
その方が君には向いている

816:デフォルトの名無しさん
22/11/03 17:18:17.27 NhDXzDSd0.net
>>781
779はindex上でレビューするんじゃなくて、indexにいれた状態にしてからdiff --cachedでcommit前の確認をするってことじゃない?自分もそれやるよ

817:デフォルトの名無しさん
22/11/03 17:50:52.37 e1pojM/n0.net
>>763
> (昔からsh《bsh》は互換性は高かったし、今はその後継のbashで統一されてる。
> ああ確かにcsh/tcsh/ksh/zshはゴミだったし死滅したよ)
FreeBSDにはbash入っとらんぞ

818:デフォルトの名無しさん
22/11/03 17:52:28.68 e1pojM/n0.net
>>763
> 既にあるbash(多分C)ソースをコンパイルしただけのものを同梱し、
> gsh(=gitsh)だ!これを使え!と強弁すれば済んだろ。
bashだけじゃ足らんだろ
GNUコマンドも全部入れなきゃな!

819:デフォルトの名無しさん
22/11/03 17:53:10.48 e1pojM/n0.net
>>770
> 仮に時間が十分にあったとしても、俺が改善出来るのはソースコードであって、アプリではない。
だからソースコードを改善しろってw

820:デフォルトの名無しさん
22/11/03 18:10:35.38 3fLLADP3M.net
>>784
macもbsahやめたんだよね
GPLから逃げるために

821:デフォルトの名無しさん
22/11/03 19:01:05.13 AHw2USmo0.net
あと実は、masterの意義も分からないのだが。俺の場合は、
master: 今現在Web上で公開しているもの
develop: 今現在ローカル上でテストしているもの
feature: 今現在変更中のソースコード
と3つポインタが必要なのは分かる。
しかし、masterは常にdevelopとfast-forwardマージするなら、developにタグ打てば済む。
途中からのbranchも可能だし、hotfixするにしても問題ない。
branchケチる意味もないのも分かるが、それにしても無駄に多い気もする。
と思ってたら、俺にはサル先生方式位が適切な気がしてきた。
> ここでは統合ブランチとトピックブランチという二種類のブランチを使った運用方法について紹介します。
> URLリンク(backlog.com)
サル先生方式の統合ブランチにタグ打つだけと比べて、
masterとdevelopとして別に持っておいたら何が嬉しいの?

822:デフォルトの名無しさん
22/11/03 19:03:24.24 AHw2USmo0.net
>>784
>>787
政治的案件をOSS側がフォローする必要ないと思うが…

823:デフォルトの名無しさん
22/11/03 20:29:42.55 e1pojM/n0.net
>>789
なに政治的案件の話にすり替えようとしてるんだよ
gitは環境依存が激しいシェルスクリプトに依存しないように
C言語で書いてるって話をしていただろ

824:デフォルトの名無しさん
22/11/03 20:33:17.75 e1pojM/n0.net
>>788
1系、2系の同時開発とかあるやろ

825:デフォルトの名無しさん
22/11/03 20:41:00.73 vXMSDhes0.net
.gitignoreの書き方で質問
app.log, app.log.1, app.log.2みたいな感じで増えていくログファイルを無視したいのですがどう書けばいいですか?

826:デフォルトの名無しさん
22/11/03 20:41:54.93 5PP47Osh0.net
>>788
なんだやっぱりブランチのことすら分かってなかったのか

827:デフォルトの名無しさん
22/11/03 20:48:29.66 5fumPTTR6.net
>>792
*.log* でなにか被ったりする?

828:792
22/11/03 20:58:19.76 vXMSDhes0.net
logフォルダ作ってそれを無視することにしました
>>794
ごめんなさい!

829:デフォルトの名無しさん
22/11/03 21:00:04.22 AHw2USmo0.net
>>791
あ、なるほど了解。
逆に言えば、同時開発する気がなければ要らないわけだな。

830:デフォルトの名無しさん
22/11/03 21:04:46.26 e1pojM/n0.net
>>796
今自分で「必要だ」って言ったってこと理解してるかい?

831:デフォルトの名無しさん
22/11/03 21:15:11.85 AHw2USmo0.net
>>790
C化しただけで環境依存が無くなるのなら、既にC化されてるbashでいいだろ。
Cコード上で何か小細工が必要なら、それは「互換性を上げる」名分でbashにcontributeすべきで、
Git側で吸収する案件ではない。
GPLから逃れたいってのも意味が分からん。
bashのコードを改変して新機能追加してmac_bachにしたら、そのコードを公開しないといけないが、
普通にbashを使って作業するだけなら関係ないから使えばいいだけ。
何か思惑有るんだろうけど、Gitがソースを汚してまでフォローする案件じゃないだろ。
> また、これ以外にも zsh や bash などのシェルが FreeBSD Ports Collection から利用可能です。
> https://


832:docs.freebsd.org/ja/books/handbook/basics/ 自分でインストールしろよ。



833:デフォルトの名無しさん
22/11/03 21:16:20.05 e1pojM/n0.net
だからなんでgit使うだけで
bash+たくさんコマンド入れなきゃならんのだよ

834:デフォルトの名無しさん
22/11/03 21:22:26.35 AHw2USmo0.net
>>797
必要なのはポインタであってブランチではないんだ。
というか、俺にとってはその時のスナップショットが復元出来れば何だっていいんだよ。
fast-forwardでは履歴が辿れないからrebaseで、みたいな話もあるからもうちょっと確認必要だが、
git flow は手動ではなくインストールして使え、そうすれば全部やってくれる、としてるところばかりで、
どうもmergeの時に色々判断して小細工してるようだが、何やってるのか書いてないから分からないんだ。
まあでも色々他の簡単なのもあるみたいだし、初心者だから出来るだけ単純なのにするよ。

835:デフォルトの名無しさん
22/11/03 21:25:51.42 AHw2USmo0.net
>>799
逆に一体どんな環境でやってるのさ?
普通のunixコマンド一式すら入ってないのか?
そもそもGitなんてPCかそれに近い環境で動けば良くて、それ以外は考慮する必要ない気がするが。

836:デフォルトの名無しさん
22/11/03 21:29:12.32 e1pojM/n0.net
>>800
今話をしているのはお前が言ったこと
> 逆に言えば、同時開発する気がなければ要らないわけだな。
if (同時に開発する気がある) {
  いる
} else {
  いらない
}
自分で同時に開発する気があればいるって言っただろ自分で

837:デフォルトの名無しさん
22/11/03 21:39:01.44 AHw2USmo0.net
>>802
ん?どこを誤解されてるのかは分からんが、
俺は複数バージョンを同時開発する気はない。
ただ、リリース後にバグが発覚するする事はあるので、hotfixはする。

838:デフォルトの名無しさん
22/11/03 23:10:44.38 9oLRzF140.net
>>801
普通にSourceTreeとかでコマンド一杯を前提としているとは思えないが。

839:デフォルトの名無しさん
22/11/03 23:14:43.83 9oLRzF140.net
>>788
少なくともCIで回すときは楽だろ。
Git初心者で視野狭すぎなのに、その視野の狭さを無視して「合理的に考えてこれが不要」ってのがあんたのスタイルのようだけど、
そうやってわざわざ視野の狭さから来る「不要」の主張をして反感を買ったレスで学びたいのか?
勉強したいなら、炎上スタイルは目障りなんでよしてほしいな。二言ぐらい余計なんだよ。

840:デフォルトの名無しさん
22/11/03 23:20:07.30 NhDXzDSd0.net
>>798
以下は簡単に調べただけで、時系列の検証もしてないので、何か間違いあるかもしれない
macOSはbash,gcc,sambaをベースシステムにいれるのをやめた
これらはGPLv2からGPLv3にライセンスが変更されて、GPLv3に追加されたバイナリの取り扱いに関する条項がmacOSのセキュリティポリシーに合わなくなったのがその理由
linusはこのGPLv3の条項に批判的で、gitはGPLv2のままでいく可能性が高い
GPLv3のbashに依存するようgitを作り変えると、インストール方法をちょっと特殊にしないとgitもこのGPLv3の条項の制限をうけることになってしまうので、まあやらないだろうね
他のOSSに依存するとこういうのもあるから気を付けないといけない

841:デフォルトの名無しさん
22/11/04 00:15:00.44 SQ9pznPg0.net
> Cコード上で何か小細工が必要なら、それは「互換性を上げる」名分でbashにcontributeすべきで、
Git側で吸収する案件ではない。
頭おかしい

842:デフォルトの名無しさん
22/11/04 00:54:15.51 NvjwOVKTd.net
まあdevelopはいらないかな
mainブランチで開発すりゃいいよ
リリースブランチが必要なら別途releaseブランチを作ればよいのであって、デフォルトブランチは開発系の先端を指してる方が分かりやすい

843:デフォルトの名無しさん
22/11/04 01:05:42.22 EF7BixRC0.net
>>798
> Cコード上で何か小細工が必要なら、それは「互換性を上げる」名分でbashにcontributeすべきで、
gitの都合でbashに迷惑をかけるな
お前のやりそうなことだな
自分の都合で関係ないやつに迷惑をかける

844:デフォルトの名無しさん
22/11/04 01:06:39.03 EF7BixRC0.net
>>808
初心者のお前の感想なんかどうでもいいよ

845:デフォルトの名無しさん
22/11/04 02:09:07.55 v1xRwBrw0.net
GPLに賛同せずにGNU製


846:品を使ってたってことだろね。 結局Linusもタダ乗り爺ってことでしょ。



847:デフォルトの名無しさん
22/11/04 02:50:33.29 BbpXyzD40.net
ブランチの名前の付け方や使い方なんてほんとどうでも良い。チーム内で話し合え
git のブランチは全部等価
デフォルトで main / master 作られるけど
これも使いたくなけりゃ使わなくて良いし名前変えても良い

848:デフォルトの名無しさん
22/11/04 18:16:16.05 XH5wI1Z90.net
>>805
そんなガキみたいなことはしないが、
どう取るのも自由だし、気に入らないのなら無視してくれて構わんよ。
ただgitがポンコツだと言ったとしても、それ本来お前ら関係ないよね?
自身の分身と思えるほどcontributeしまくってるのなら別だけどさ。

> 少なくともCIで回すときは楽だろ。
必要になったときに作ればいいだけなのと、
多分仕様か実装を間違えてて、今のGitの動作では技術的に実用性がない。
これは次の投稿で詳しく述べる。

849:デフォルトの名無しさん
22/11/04 18:17:59.81 XH5wI1Z90.net
A. 消したbranchの情報が確認出来るのって、reflogsだけ?
B. あと、branchは線だ!ってマニュアルは言ってるけど、点だよなこれ?
(ドキュメントか実装のどちらかが間違ってると思うが)

以下git-flowを真似てるとして、gitkと同様に下から上にcommitして、
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
としたとする。
このとき、featureXを一々作っては消させてるのだから、
何か簡単に一覧に出来るコマンドがあるべきだが、無さそう。(git log --walk-reflogsで探すことは出来るが)
正直あとから参照することはほぼ無いが、何かあってもいいと思うが?---(A)

850:デフォルトの名無しさん
22/11/04 18:19:31.52 XH5wI1Z90.net
そして、どうやらGitはブランチローカルという感覚がないらしく?
どのブランチにいても同じ結果が出るのはどうなのよ?---(B)
具体的には、この場合、
masterブランチでは、HEAD~1はinitialを指し、(master上での一つ前)
developブランチでは、HEAD~1はimpl2を指すべき(develop上での一つ前)
だと思うのだが、どこにいてもHEAD~1はimpl4を指してしまう。
つまり、HEAD~Nの探索先はグローバルであり、それは.git/objects下のツリーそのものらしい。
つかね、masterブランチにいた場合、
git diff HEAD~1 HEAD で前回のリリースと今回のリリースの違い
git diff HEAD~2 HEAD で前々回のリリースと今回のリリースの違い
git log ではmasterブランチ上のリリースした物のcommitログだけに絞られて表示
じゃないと実用的な意味がないと思うんだけどさ。
masterにはmergeしかしない運用なら通常は漏れなくタグが打たれ、「点」のアクセスはタグで出来る。
よって残るは「線」のアクセスだが、ブランチは「線」になってない。
実装はよく知らんが、ブランチを切って増えるのは以下の2つで、
.git/refs/heads は先頭「点」、
.git/logs/refs/heads はlogだから、「線」の為の物が無さそう。
本来ブランチはDBで言うINDEXで、CREATE INDEX develop ON git_tree WHERE branch='develop';
みたいなもので、これが「線」だと思うんだけどさ。
実際は「点」なのでHEADしか見えておらず、HEAD~1をブランチによって切り替えられない。
と思うのだが、理解間違ってる?
ここは多分仕様変更した方がいい。(直感的でないし、意味が分からない)
けど今更出来ないだろうから、Gitの仕様の綻びの一つで、next-gitで修正されるべき案件だろうね。

851:デフォルトの名無しさん
22/11/04 18:20:37.25 XH5wI1Z90.net
>>806
MacOSがFreeBSD系なのとLinusがGPLv3をボロクソ言ってたのは知ってたが、両方とも理由は知らなかった。
> GPLv3に追加されたバイナリの取り扱いに関する条項がmacOSのセキュリティポリシーに合わなくなった
よく分からんが


852:結局は両方ともここかな? > プロプライエタリなドライバソフトをLinuxカーネルに読み込む際にDRMの技術を応用している件についてだと思います。 > http://japan.cnet.com/news/ent/story/0,2000047623,20095317,00.htm > GPLv3ではDRMを実装する場合はそのDRMのアルゴリズムに加えて秘密鍵も公開することを義務付けているので、 > そのようなことをしたらプロプライエタリなドライバを提供してもらえなくなるため、賛成はできない、と。 > https://srad.jp/story/06/01/29/1119224/ ただこれって、 GPLv3のコードを使ったバイナリを配布する際、そのバイナリと同じ物を作れるソースコードも配布しろ、だから、 GPLv3のBashをGit配布zipに同梱してもBashのバイナリだから何ら問題ないはずなんだけどね。 GPLv3だからだめだ、ならGPLv2(~2007)のBashでも十分だろうしさ。 やっぱりかなり政治的だよ。勿論譲れないのだろうけどさ。



853:デフォルトの名無しさん
22/11/04 18:22:05.12 XH5wI1Z90.net
>>807
>>809
お前ら狭量すぎ。OSS全体で盛り上がるんだ!という考えが無さ過ぎ。
diffもそうだが、bashの互換性が本当に問題なら、bashを修正すれば全員助かるだろ。
Gitコマンドをシェルで実装すると、unixコマンドの中にgitコマンドが混ぜ込まれてる形になる。
そのgitコマンドをcpに差し替え、unixコマンドだけの状態で環境依存で使い物にならないのなら、
それは立派なバグだから、bashの連中に投げれば直してもらえるよ。
自分で抱え込みすぎ。それでは回らなくなる。(のが一般的だが、バザールだからなあ…)
ただGNUとは根本的にウマが合わないだろうよ。
仕様はグダグダ、ソースコードはゴミ、でも回り続けてるのだから、GNU(伽藍)から見たら何じゃあこれは!!!ってなる。
Git側にはGNUの開発速度はどうにも認められないだろうしね。

854:デフォルトの名無しさん (ワッチョイ 8b14-Tk+f)
22/11/04 19:16:09.99 EF7BixRC0.net
> お前ら狭量すぎ。OSS全体で盛り上がるんだ!という考えが無さ過ぎ。
だからgitの話はgitの中で盛り上がればいいだろ
勝手に他人の家で盛り上がるな
ば~か

855:デフォルトの名無しさん (ワッチョイ 8b14-Tk+f)
22/11/04 19:18:48.53 EF7BixRC0.net
>>817
あとgitをbashに依存させるな

856:デフォルトの名無しさん (ワッチョイ 8b14-Tk+f)
22/11/04 19:19:54.54 EF7BixRC0.net
bashがなんでも修正を入れるわけがない
それは俺の仕事じゃないと言って断られるが落ち
bashをぶくぶく太らせるな
一つ事だけやらせろ

857:デフォルトの名無しさん
22/11/04 19:54:32.33 fRhzbJ/d0.net
>>816
GPLv3ではバイナリを配布する際にそのバイナリをユーザがソースからコンパイルしなおして入れ替え可能でなければいけないという条項になっているらしい
MacOSやiOSのアプリやストアから配布するAndroidのアプリなんかの今どきのバイナリ配布は、署名済みバイナリしか実行できないから、ここにGPLv3の物を入れるとライセンス違反になる

858:デフォルトの名無しさん
22/11/04 19:57:10.42 fRhzbJ/d0.net
>>817
GNUは別に開発組織ではないから統一的な開発ポリシーなんてものはないが、
GPLv3に移行するようなFSF管理下のGNUプロダクトは、歴史も古いし、比較的少数のおっさん達が気ままに管理してることが多いので、OSSと呼ばれるようになる前からの伝統的なUNIXフリーソフトのべたなソースツリー構成なものばかり
たとえばbashのソースコード構成なんてgitみたいにトップディレクトリ下に組み込みコマンドの実装コードがだらだら並んでてgitと変わらん

859:デフォルトの名無しさん
22/11/04 20:10:08.60 jUM5cpqM0.net
どのOSでメインに作業してるのかわからん感じだな。
LinuxはCでモノリシックだとDISり、GNUコマンド群でないmacOSも�


860:桝RDISり、 Windowsなんか論外って感じだろ。 3OSぐらい使ってたらとてもシェルなんか信用できないけどな。



861:デフォルトの名無しさん
22/11/04 21:06:47.76 XH5wI1Z90.net
>>822
いやそこまでは全然見てない。
今回の仕様とパッチの顛末見て、他もそうだと勝手に推定してる。
読む価値のないコードのはずだから。(物によって全然違うかもしれんが)
ただこれで回ってるのは事実だからな~。ちょっと観戦モードだ。
まず既に言ってるが仕様がグダグダ。
仕様は追加は簡単だが、削除することは基本的に無理なので、厳選しないといけないのに、まるで出来てない。
つまりこの辺の常識的な長期保守戦略をまるで知らない奴がやってて、止める奴もいないということ。
そして今回のメモリリークだが、確保したらそこで寿命も確定する、実装が一番簡単なタイプで、
これをリークさせるようなら話にならない。
ただそれでもミスることはあるが、出てきたパッチがこれまたグダグダで、Cのメモリ管理の基本を完全に無視してる。
レビューがあったら見た瞬間落とされるソースだ。そりゃリークするよな、としか思わない。
(ただし第2弾、第3弾も出てきて、ましになりつつあるが、それでも方向性を根本的に間違ってる。
とはいえ、展開が異常に早いのも確か)
だから、通常の開発をやっているであろうGNUでは、仕様のレビューでも、コードのレビューでも落とされる。
だけどGit側にその理由を理解出来る奴がいないからこうなわけで、当然ブチ切れる。
そして喧嘩別れ、だったら俺らで作るからいいよ、でforkして突っ走ってるだけのように見える。
若すぎる。
ただそれでも実装能力だけはあるので、diffはGNUより装飾周りが断然進歩してる。
これはやっぱりGNUdiffと一緒にやってた方がみんな幸せだったと思うよ。
上手く導ける奴がいれば、
というより普通に長期保守したことがある奴が上層部に一人でもいれば、この辺は簡単に修正出来ると思うのだけど、
それは伽藍タイプの話で、バザールだとどうにもならないのかもしれんし、
突っ走らせないとプロジェクト自体が死ぬのかもしれんし、(サメみたいにね)
よく分からん。

862:デフォルトの名無しさん
22/11/04 21:10:52.33 EF7BixRC0.net
口だけ達者で何もできない無能

863:デフォルトの名無しさん
22/11/04 21:14:59.38 PwG12fTHM.net
>>824
GNUが何なのか全く理解できていない

864:デフォルトの名無しさん
22/11/04 21:27:19.25 PwG12fTHM.net
>>823
自分が理解できないものは全部糞
理解力が致命的に弱い
この2つが合わさると全方面Disることになる

865:デフォルトの名無しさん
22/11/04 21:35:53.62 SQ9pznPg0.net
>>817
何で自分の関心の向かないOSSにわざわざ貢献しないといけないんですか?
金も貰えないのにそんなの苦行でしょう、アホらしい
それとも君はLinusに向かってそれを要求できるほどGNUに対して貢献してるんですか?

866:デフォルトの名無しさん
22/11/04 21:39:58.51 EF7BixRC0.net
bashの方を直せって言うなら
GNU bashのプロジェクトに殴り込みをかければいいじゃん
お前が

867:デフォルトの名無しさん
22/11/04 21:54:21.97 XH5wI1Z90.net
>>828
逆だよ。他人に投げられることは他人に投げろと言ってる。
bashのバグだってことになれば、勝手に直してもらえるだろ。
自分で対応するのは、直してもらえないのが確定してからでいい。

>>829
そもそも俺はbashの互換性で苦労した試しがない。
ただそもそもOS跨いでシェルスクリプトを持っていった試しも無いけどな。てかそんなこと普通せんし。
あーだから、最悪Linux/Windows/Mac用と3種類用意すればよかったんじゃね?C化よりは楽だろうよ。

868:デフォルトの名無しさん
22/11/04 21:55:50.76 EF7BixRC0.net
> 逆だよ。他人に投げられることは他人に投げろと言ってる。
なんのために?

869:デフォルトの名無しさん
22/11/04 21:56:20.74 EF7BixRC0.net
> bashのバグだってことになれば、勝手に直してもらえるだろ。
だからお前がbashに通報しろって
お前という他人に投げたぞw
さっさとやれ

870:デフォルトの名無しさん (ワッチョイ 7997-uk66)
22/11/04 22:08:26.91 jUM5cpqM0.net
>>8


871:30 え、Cでプログラム書いたことないの?OS間の違い、標準Cライブラリの方がよっぽど互換性に苦労することないよ… 考慮しなければならないのはファイルシステムと改行コードぐらいだろう。



872:デフォルトの名無しさん (ブーイモ MM33-ntN1)
22/11/04 22:17:50.42 qsZ+zSWqM.net
まあおまえら落ち着け>>815とか見る限りこいつはひとりではGitを理解できない
炎上させて答えを引き出そうとしてるから餌を与えちゃいかん
ほっとけばすぐいなくなるよ

873:デフォルトの名無しさん
22/11/04 22:48:48.23 XH5wI1Z90.net
>>834
ああ、@1か、これは失礼。
ただお世辞にも分かりやすいとは言えないねこれは。
まあでも、ならbranchを残す意味はあり、>>815は取り下げだな。
>>814については引き続き募集中。

874:デフォルトの名無しさん
22/11/04 22:50:35.62 XH5wI1Z90.net
@{1}ね、まあ分かると思うけど

875:デフォルトの名無しさん
22/11/04 23:04:09.79 7RpVnNq7M.net
>>836
@{1}に気が付くとはさすが軍師殿www

876:デフォルトの名無しさん
22/11/05 00:48:19.73 yugci9j10.net
HEAD~1 で一つ前のリリースとか言ってて爆笑
リリースごとに一回だけコミットするつもりなのか?
永久に git 理解できそうにないな

877:デフォルトの名無しさん
22/11/05 01:35:03.83 CLSrxuim0.net
ネットのクソ記事で独学するより、まともな本買って学習すればいいのにな
つうかあれか、gitの仕様の粗探しがしたいから使い方とかどうでもいいのか

878:デフォルトの名無しさん
22/11/05 01:42:19.97 zPyCNtrD0.net
そもそも一つ前wみたいな考え方するようなものじゃないよなw

879:デフォルトの名無しさん
22/11/05 03:02:36.62 0q4aURph0.net
自分が理解できないから、知ってるシェルスクリプトにすがってるだけだな
POSIX原理主義者と一緒。POSIXの名前を勝手に使って
シェルスクリプトしかできないのをごまかしてる
gitを利用してシェルスクリプトしかできないのをごまかしてる

880:デフォルトの名無しさん (ワッチョイ 617b-8+ss)
22/11/05 09:15:20.90 646uiMLL0.net
>>717
ちなみに書く側のコマンドは hash-objectのようだ。
多分初期はPlumbing Commandsをシェルスクリプトでラップして各上位コマンドを提供してたのだろう。
そして俺にはこの程度のシェルスクリプトが環境依存するとはとても思えないんだけどさ。


>>821
って、ふと気づいたが、俺が使ってるのはGitBashだったわ。
現在の公式版にもGitBashバイナリは同梱されてるし、ライセンスがどうこうという問題は無いか、解決されてるよ。
Macは政治的だとして、Linusはその辺実務的に見えるから、
GPLv3をボロカス言って自分はGPLv3には参加しないが、(これは正当な権利で全く問題ない)
GPLv3を殺す為にGPLv3のプロダクトの同梱すらしない、みたいなことはしないのだろうよ。

881:デフォルトの名無しさん (ワッチョイ 617b-8+ss)
22/11/05 10:38:45.29 646uiMLL0.net
>>814
公式のcontribに置いてあるユーザー製作の勝手ツールにあるのは発見した。
つまり熟知してる公式からみても面倒な作業だと認めているわけだ。
解決というよりは諦めと納得だが、これも質問を閉じる。
> URLリンク(zenn.dev)


ちなみに、branchを『後から追加』は出来るか?
いやそんな使い方はおかしい!禁止だ!かもしれんが、
やはり俺にはbranchはただの(DBにおける)INDEXで、
随時落としたり作ったり復活させられないと使いづらい。(のではないかと予想している)
ただ、要はreflogを偽造すればいいだけのようだが、
再実装は時間の無駄で


882:しかないので、既にあればそれを使いたい。



883:デフォルトの名無しさん
22/11/05 11:40:31.33 zDjINlW+0.net
>>842
index-stageを理解してないおまえにはわからないかもしれないけど、
DBへ登録されるのはwork tree上のファイル丸ごとでない場合もあるし、
逆にDBからwork treeへ展開されるのもファイルの中の一部分の場合があるから、
そんな単純にはいかない

884:デフォルトの名無しさん
22/11/05 11:40:56.02 zDjINlW+0.net
>>842
Windowsはアプリを実行する上でコード署名が必須でないから問題にならないだけ

885:デフォルトの名無しさん
22/11/05 11:41:36.89 zDjINlW+0.net
>>843
gitのマージを全然理解できてないからブランチを復活させたいとか思ってしまうんだな
普段の運用でスクリプトを使ってブランチを復活させたいとか思う羽目になることはあまりない
ブランチがDBにおけるindexみたいなものとか、後から追加できる?みたいな疑問が生じるあたり、ブランチが何なのか全然わかってない
reflogの偽造が必要という発想もかなりズレてるし、>>814 をみるとコミットの履歴がどういうものなのか理解できていないのだろう

886:デフォルトの名無しさん
22/11/05 12:57:19.46 646uiMLL0.net
>>844
さすがにその程度は知ってるぞ。
ただ、一般的には git add -A で問題ないディレクトリ構成で使う方が多いんじゃないか?
まあそれはさておき、
要は、正しくソフトウェアが構成されてれば、cat-file/hash-object を組みで交換すれば、
末端のファイル形式は自由に選べるって事だよ。sshにすればネットワーク先にも余裕だ。
つってももうこの話は通じないのでいいが。

887:デフォルトの名無しさん
22/11/05 13:13:08.87 646uiMLL0.net
>>845
つまり現行2.38.1のMac版にはBashバイナリが入ってないのか?
それでMacに元々入っているbash以外のshを使ってれば、そりゃ問題は発生するだろうさ。
> URLリンク(qiita.com)
Macとしては署名済みじゃないとウイルスかもしれないので認められず、
GPLとしては署名付けるならその署名を作るソースも公開しろと言ってるわけ?
どっちも拗らせすぎだが、
一般論としては、Mac側に「開発者オプション」で「署名がないバイナリの動作を許可する」があれば済む話では?
実際自分でコンパイルしたバイナリを動かせないと困るし。
ただ、Macってスマホと同一化したからこれって脱獄になるんだっけ?
ならまあ、Gitの為に脱獄はないし、こじれるのは分かるが。
まあ、正直つき合いきれないが、俺なら、C化ではなく、
bashの機能を諦めてshの機能だけで書き直す方を選択するけどね。

888:デフォルトの名無しさん
22/11/05 13:19:32.87 zDjINlW+0.net
>>847
実際仕事すればわかるが add -Aで綺麗なコミットを作れるように整備されてるリポジトリはあまり無い
デバッグしながらコミットしていくときは add -p を使うことがとても多い

889:デフォルトの名無しさん
22/11/05 13:20:48.95 zDjINlW+0.net
>>848
URLリンク(www.infoq.com)


890:2019/07/macos-ditches-bash-for-zsh/



891:デフォルトの名無しさん
22/11/05 13:57:20.56 0q4aURph0.net
git add -Aで十分とかさぁ、開発経験なさすぎだろ
それはgitをバックアップとか途中セーブ機能とでも思ってんのか?
1 commit = 一機能の追加とか、一日の最後にやるものとか思ってるんだろ
通常なにかのバグの修正とか
複数の個別の問題の複合なのに
それ全部まとめんな

892:デフォルトの名無しさん
22/11/05 13:58:29.56 646uiMLL0.net
>>846
そもそも俺含めて大半のプログラマはGitを理解したいとは思ってなくて、
単に便利だから使ってるだけだと思うがな。
理解せずに使えるのならそれに越したことはない。
(この価値観が相容れないのは理解したからもういいが)
君はGitを履歴追跡ツールとしてしか見てないようだが、
俺はもっと一般的に、Git形式のDBとして見てる。(INSERT履歴が保持されるDB)
そして、俺は>>808と同意見で、
開発が今現在行われていないブランチは閉じられてた方が見やすいと思ってる。
常時存在するのはgit-flowでいうdevelopだけで、masterやreleaseはタグでよく、
hotfixを作るならまずmasterブランチを復活させ、そこからhotfixを発生させたほうがいい。
(なおreleaseブランチは最後にバージョンを打つ奴にはいいが、
俺は先にバージョンを打ってから更新部分を実装するので、俺のワークフローには合わない)
それ以外にも、featureX付加時の変更漏れ/不適切な変更によるバグ挿入が後で発覚することはあるから、
git-flow的にfeatureを作っては消しで行くなら、ブランチの復活はプログラマには疑問のないことだ。
featureX_patch0と新たな変更扱いしてもgitオブジェクトツリー自体は同じだが、
名前が似てるだけの別物扱いになるので、
featureXの開発『線』をメンテナンスする気なら、branchの復活が必要になる。
実は、とりあえず同じ名前で作り直せば自動的にくっつく馬鹿向け仕様か?と試してみたが、
まあGitの文化でこれはなかった。
が、まあ、俺的にはこれであって欲しかったね。
「同じ名前が昔ありましたが、そこにくっつけますか?(Y/N)」「Y」
「いい加減にしてくださいよ、何回目ですか?」「うるせーよ」みたいな。
ただこれ、branch側は --list オプションで表示を簡単に絞れるから、
Gitの思想としてはbranchは「消さずに全部残しておけ」で、
git-flowがGitの思想と合ってないだけだね。ならツール用意しとけと。

893:デフォルトの名無しさん
22/11/05 14:02:51.18 0q4aURph0.net
>>852
世の中に理解しないで使えるものなんてない

894:デフォルトの名無しさん
22/11/05 14:04:13.47 0q4aURph0.net
大体gitの使い方を理解したいと思ってるやつはアホ
理解するのはバージョン管理の仕方だ
こうやってツールの使い方を学ぶことが理解だと思ってるから
gitがなくなったらどうしよう
また新しいことを学ばなきゃいけないってなるんやろ

895:デフォルトの名無しさん
22/11/05 14:19:41.99 W/77BOuWM.net
>>854
git そのものを理解すること諦めたか
でもお前使い方の方も盛大に勘違いしてるよ

896:デフォルトの名無しさん
22/11/05 14:24:19.56 646uiMLL0.net
>>851
> それはgitをバックアップとか途中セーブ機能とでも思ってんのか?
> 1 commit = 一機能の追加とか、一日の最後にやるものとか思ってるんだろ
そうだぞ。
ブッ込んでおけば後で何とでもなるただのバケツでしかない。
バケツの使い方を学べとか、知るかボケだ。
後でバケツから探し出すハメになった時、取り出し方をググって取り出せれば十分だ。
大方、プログラマの大半はこの程度の認識のはずだぞ。
そしてお前が望む、綺麗な管理記録は、これのサブセットでしかないんだよ。
だから例えば俺が780で言ったように、「コミットメッセージが空」を除外すれば簡単に得られる。
今のGitにこの機能がないだけ。(まあ近い機能はあるが)
DBならWHEREに条件を付加すればいいだけの楽勝案件で、Web系ならみんな出来るよ。
sedのワンライナーで済むことすらCで実装するGit界隈だと誰も出来ないのだろうけどさ。
まあGitにSQLインタフェースを付け加えればWeb系の奴等は文句言わなくなるんじゃないかな?
連中にとっては直感的になるから。

897:デフォルトの名無しさん
22/11/05 14:34:25.48 0q4aURph0.net
> 大方、プログラマの大半はこの程度の認識のはずだぞ。
お前の周りの無能集団だけだろ

898:デフォルトの名無しさん
22/11/05 14:35:58.29 0q4aURph0.net
一体どこのプロジェクトに「2022年11月4日の仕事終了時のセーブ」なんてコミットがあるんですかねぇ

899:デフォルトの名無しさん
22/11/05 14:42:21.04 oTMzuhJSa.net
>>858
それなんて、俺の前の職場


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch