1 名前:デフォルトの名無しさん [2022/04/23(土) 03:25:45.27 ID:HOOXt/T30.net] ソースコード管理を行う分散型バージョン管理システム、Gitについて語ろう。 Git - Fast Version Control System git-scm.com/ ◆関連サイト Pro Git - Table of Contents git-scm.com/book/ja Git入門 www8.atwiki.jp/git_jp/ ◆前スレ Git 16©2ch.net https://mevius.5ch.net/test/read.cgi/tech/1502726047/ Git 17 https://mevius.5ch.net/test/read.cgi/tech/1599016710/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
809 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:04:33.12 ID:jVDh6EB5M.net] 適当なタイミングで時系列に修正を記録していくものだと思ってる阿保には理解できないVCS
810 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:05:56.85 ID:AHw2USmo0.net] >>775 git add -u を複数回して粒度を上げて動くものだけcommitしてもいいのだけど、 俺の場合は10回に1回程度は2-3回前の変更とdiff取った方が見やすいことがあって、 その場合にhash控えておくのが面倒だし、gcされてたらさらに面倒だし、gc切るのもまた邪道だろうしで、 動かないのもcommitしてfeatureの途中は動きませんと割り切るのが一番ましかと思ってる。 まあでもありがとう。 粒度調整の為ならこちらの予想の範囲内ではあった。
811 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:26:33.67 ID:O+O1uzzM0.net] >>777 > その場合にhash控えておくのが面倒だし、gcされてたらさらに面倒だし、gc切るのもまた邪道だろうしで、 N個前との diff は git diff HEAD~N でハッシュを控える必要もないし gc のくだりは何のこと言ってるのかわからない。 > 動かないのもcommitしてfeatureの途中は動きませんと割り切るのが一番ましかと思ってる。 ローカルブランチなら別に構わないけど、そのノリで作られたブランチをそのままレビューするのは効率悪い。 なのでマージ前のブランチをレビュー対象とする開発では push の際に整理することになるから、 都度整理の際にインデックスはとても有用。 他にも、作業中に全然関係ない typo 直したりするのにも使える。
812 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:53:58.77 ID:HnXRQ5rf0.net] index の重要性が分からないやつが git 語ってて草。 素人向けに説明すると git の役目は他人に読んでもらうやすい分かり易いパッチを仕上げること。 個人で作る分にはそれほど関係ないが共同作業するには他人への分かり易さ、見た目は最重要といっていい。 料理に例えるならフライパンやまな板のまま出すんじゃなくて、皿に盛って食べ易くしてから出すのが基本。 ワークツリーがフライパンで、インデックスが皿。フライパンからでも直接食えるけど、綺麗に皿に盛って、そこで丁寧にチェックしてから提供すれば他人の作業効率が上がる。
813 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 16:18:44.28 ID: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 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 16:20:05.12 ID:AHw2USmo0.net] >>779 いやレビュー対象はcommit済みで、index上ではないだろ。
815 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 16:22:38.83 ID:5PP47Osh0.net] うんうんわかった 大人しくSVN使え その方が君には向いている
816 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 17:18:17.27 ID:NhDXzDSd0.net] >>781 779はindex上でレビューするんじゃなくて、indexにいれた状態にしてからdiff --cachedでcommit前の確認をするってことじゃない?自分もそれやるよ
817 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 17:50:52.37 ID:e1pojM/n0.net] >>763 > (昔からsh《bsh》は互換性は高かったし、今はその後継のbashで統一されてる。 > ああ確かにcsh/tcsh/ksh/zshはゴミだったし死滅したよ) FreeBSDにはbash入っとらんぞ
818 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 17:52:28.68 ID:e1pojM/n0.net] >>763 > 既にあるbash(多分C)ソースをコンパイルしただけのものを同梱し、 > gsh(=gitsh)だ!これを使え!と強弁すれば済んだろ。 bashだけじゃ足らんだろ GNUコマンドも全部入れなきゃな!
819 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 17:53:10.48 ID:e1pojM/n0.net] >>770 > 仮に時間が十分にあったとしても、俺が改善出来るのはソースコードであって、アプリではない。 だからソースコードを改善しろってw
820 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 18:10:35.38 ID:3fLLADP3M.net] >>784 macもbsahやめたんだよね GPLから逃げるために
821 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 19:01:05.13 ID:AHw2USmo0.net] あと実は、masterの意義も分からないのだが。俺の場合は、 master: 今現在Web上で公開しているもの develop: 今現在ローカル上でテストしているもの feature: 今現在変更中のソースコード と3つポインタが必要なのは分かる。 しかし、masterは常にdevelopとfast-forwardマージするなら、developにタグ打てば済む。 途中からのbranchも可能だし、hotfixするにしても問題ない。 branchケチる意味もないのも分かるが、それにしても無駄に多い気もする。 と思ってたら、俺にはサル先生方式位が適切な気がしてきた。 > ここでは統合ブランチとトピックブランチという二種類のブランチを使った運用方法について紹介します。 > https://backlog.com/ja/git-tutorial/stepup/02/ サル先生方式の統合ブランチにタグ打つだけと比べて、 masterとdevelopとして別に持っておいたら何が嬉しいの?
822 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 19:03:24.24 ID:AHw2USmo0.net] >>784 >>787 政治的案件をOSS側がフォローする必要ないと思うが…
823 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 20:29:42.55 ID:e1pojM/n0.net] >>789 なに政治的案件の話にすり替えようとしてるんだよ gitは環境依存が激しいシェルスクリプトに依存しないように C言語で書いてるって話をしていただろ
824 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 20:33:17.75 ID:e1pojM/n0.net] >>788 1系、2系の同時開発とかあるやろ
825 名前:デフォルトの名無しさん [2022/11/03(木) 20:41:00.73 ID:vXMSDhes0.net] .gitignoreの書き方で質問 app.log, app.log.1, app.log.2みたいな感じで増えていくログファイルを無視したいのですがどう書けばいいですか?
826 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 20:41:54.93 ID:5PP47Osh0.net] >>788 なんだやっぱりブランチのことすら分かってなかったのか
827 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 20:48:29.66 ID:5fumPTTR6.net] >>792 *.log* でなにか被ったりする?
828 名前:792 [2022/11/03(木) 20:58:19.76 ID:vXMSDhes0.net] logフォルダ作ってそれを無視することにしました >>794 ごめんなさい!
829 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 21:00:04.22 ID:AHw2USmo0.net] >>791 あ、なるほど了解。 逆に言えば、同時開発する気がなければ要らないわけだな。
830 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 21:04:46.26 ID:e1pojM/n0.net] >>796 今自分で「必要だ」って言ったってこと理解してるかい?
831 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 21:15:11.85 ID: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 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 21:16:20.05 ID:e1pojM/n0.net] だからなんでgit使うだけで bash+たくさんコマンド入れなきゃならんのだよ
834 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 21:22:26.35 ID:AHw2USmo0.net] >>797 必要なのはポインタであってブランチではないんだ。 というか、俺にとってはその時のスナップショットが復元出来れば何だっていいんだよ。 fast-forwardでは履歴が辿れないからrebaseで、みたいな話もあるからもうちょっと確認必要だが、 git flow は手動ではなくインストールして使え、そうすれば全部やってくれる、としてるところばかりで、 どうもmergeの時に色々判断して小細工してるようだが、何やってるのか書いてないから分からないんだ。 まあでも色々他の簡単なのもあるみたいだし、初心者だから出来るだけ単純なのにするよ。
835 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 21:25:51.42 ID:AHw2USmo0.net] >>799 逆に一体どんな環境でやってるのさ? 普通のunixコマンド一式すら入ってないのか? そもそもGitなんてPCかそれに近い環境で動けば良くて、それ以外は考慮する必要ない気がするが。
836 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 21:29:12.32 ID:e1pojM/n0.net] >>800 今話をしているのはお前が言ったこと > 逆に言えば、同時開発する気がなければ要らないわけだな。 if (同時に開発する気がある) { いる } else { いらない } 自分で同時に開発する気があればいるって言っただろ自分で
837 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 21:39:01.44 ID:AHw2USmo0.net] >>802 ん?どこを誤解されてるのかは分からんが、 俺は複数バージョンを同時開発する気はない。 ただ、リリース後にバグが発覚するする事はあるので、hotfixはする。
838 名前:デフォルトの名無しさん [2022/11/03(木) 23:10:44.38 ID:9oLRzF140.net] >>801 普通にSourceTreeとかでコマンド一杯を前提としているとは思えないが。
839 名前:デフォルトの名無しさん [2022/11/03(木) 23:14:43.83 ID:9oLRzF140.net] >>788 少なくともCIで回すときは楽だろ。 Git初心者で視野狭すぎなのに、その視野の狭さを無視して「合理的に考えてこれが不要」ってのがあんたのスタイルのようだけど、 そうやってわざわざ視野の狭さから来る「不要」の主張をして反感を買ったレスで学びたいのか? 勉強したいなら、炎上スタイルは目障りなんでよしてほしいな。二言ぐらい余計なんだよ。
840 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 23:20:07.30 ID:NhDXzDSd0.net] >>798 以下は簡単に調べただけで、時系列の検証もしてないので、何か間違いあるかもしれない macOSはbash,gcc,sambaをベースシステムにいれるのをやめた これらはGPLv2からGPLv3にライセンスが変更されて、GPLv3に追加されたバイナリの取り扱いに関する条項がmacOSのセキュリティポリシーに合わなくなったのがその理由 linusはこのGPLv3の条項に批判的で、gitはGPLv2のままでいく可能性が高い GPLv3のbashに依存するようgitを作り変えると、インストール方法をちょっと特殊にしないとgitもこのGPLv3の条項の制限をうけることになってしまうので、まあやらないだろうね 他のOSSに依存するとこういうのもあるから気を付けないといけない
841 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 00:15:00.44 ID:SQ9pznPg0.net] > Cコード上で何か小細工が必要なら、それは「互換性を上げる」名分でbashにcontributeすべきで、 Git側で吸収する案件ではない。 頭おかしい
842 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 00:54:15.51 ID:NvjwOVKTd.net] まあdevelopはいらないかな mainブランチで開発すりゃいいよ リリースブランチが必要なら別途releaseブランチを作ればよいのであって、デフォルトブランチは開発系の先端を指してる方が分かりやすい
843 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 01:05:42.22 ID:EF7BixRC0.net] >>798 > Cコード上で何か小細工が必要なら、それは「互換性を上げる」名分でbashにcontributeすべきで、 gitの都合でbashに迷惑をかけるな お前のやりそうなことだな 自分の都合で関係ないやつに迷惑をかける
844 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 01:06:39.03 ID:EF7BixRC0.net] >>808 初心者のお前の感想なんかどうでもいいよ
845 名前:デフォルトの名無しさん [2022/11/04(金) 02:09:07.55 ID:v1xRwBrw0.net] GPLに賛同せずにGNU製
846 名前:品を使ってたってことだろね。 結局Linusもタダ乗り爺ってことでしょ。 [] [ここ壊れてます]
847 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 02:50:33.29 ID:BbpXyzD40.net] ブランチの名前の付け方や使い方なんてほんとどうでも良い。チーム内で話し合え git のブランチは全部等価 デフォルトで main / master 作られるけど これも使いたくなけりゃ使わなくて良いし名前変えても良い
848 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 18:16:16.05 ID:XH5wI1Z90.net] >>805 そんなガキみたいなことはしないが、 どう取るのも自由だし、気に入らないのなら無視してくれて構わんよ。 ただgitがポンコツだと言ったとしても、それ本来お前ら関係ないよね? 自身の分身と思えるほどcontributeしまくってるのなら別だけどさ。 > 少なくともCIで回すときは楽だろ。 必要になったときに作ればいいだけなのと、 多分仕様か実装を間違えてて、今のGitの動作では技術的に実用性がない。 これは次の投稿で詳しく述べる。
849 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 18:17:59.81 ID: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 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 18:19:31.52 ID: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 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 18:20:37.25 ID: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 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 18:22:05.12 ID:XH5wI1Z90.net] >>807 >>809 お前ら狭量すぎ。OSS全体で盛り上がるんだ!という考えが無さ過ぎ。 diffもそうだが、bashの互換性が本当に問題なら、bashを修正すれば全員助かるだろ。 Gitコマンドをシェルで実装すると、unixコマンドの中にgitコマンドが混ぜ込まれてる形になる。 そのgitコマンドをcpに差し替え、unixコマンドだけの状態で環境依存で使い物にならないのなら、 それは立派なバグだから、bashの連中に投げれば直してもらえるよ。 自分で抱え込みすぎ。それでは回らなくなる。(のが一般的だが、バザールだからなあ…) ただGNUとは根本的にウマが合わないだろうよ。 仕様はグダグダ、ソースコードはゴミ、でも回り続けてるのだから、GNU(伽藍)から見たら何じゃあこれは!!!ってなる。 Git側にはGNUの開発速度はどうにも認められないだろうしね。
854 名前:デフォルトの名無しさん (ワッチョイ 8b14-Tk+f) mailto:sage [2022/11/04(金) 19:16:09.99 ID:EF7BixRC0.net] > お前ら狭量すぎ。OSS全体で盛り上がるんだ!という考えが無さ過ぎ。 だからgitの話はgitの中で盛り上がればいいだろ 勝手に他人の家で盛り上がるな ば~か
855 名前:デフォルトの名無しさん (ワッチョイ 8b14-Tk+f) mailto:sage [2022/11/04(金) 19:18:48.53 ID:EF7BixRC0.net] >>817 あとgitをbashに依存させるな
856 名前:デフォルトの名無しさん (ワッチョイ 8b14-Tk+f) mailto:sage [2022/11/04(金) 19:19:54.54 ID:EF7BixRC0.net] bashがなんでも修正を入れるわけがない それは俺の仕事じゃないと言って断られるが落ち bashをぶくぶく太らせるな 一つ事だけやらせろ
857 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 19:54:32.33 ID:fRhzbJ/d0.net] >>816 GPLv3ではバイナリを配布する際にそのバイナリをユーザがソースからコンパイルしなおして入れ替え可能でなければいけないという条項になっているらしい MacOSやiOSのアプリやストアから配布するAndroidのアプリなんかの今どきのバイナリ配布は、署名済みバイナリしか実行できないから、ここにGPLv3の物を入れるとライセンス違反になる
858 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 19:57:10.42 ID:fRhzbJ/d0.net] >>817 GNUは別に開発組織ではないから統一的な開発ポリシーなんてものはないが、 GPLv3に移行するようなFSF管理下のGNUプロダクトは、歴史も古いし、比較的少数のおっさん達が気ままに管理してることが多いので、OSSと呼ばれるようになる前からの伝統的なUNIXフリーソフトのべたなソースツリー構成なものばかり たとえばbashのソースコード構成なんてgitみたいにトップディレクトリ下に組み込みコマンドの実装コードがだらだら並んでてgitと変わらん
859 名前:デフォルトの名無しさん [2022/11/04(金) 20:10:08.60 ID:jUM5cpqM0.net] どのOSでメインに作業してるのかわからん感じだな。 LinuxはCでモノリシックだとDISり、GNUコマンド群でないmacOSも
860 名前:桝RDISり、 Windowsなんか論外って感じだろ。 3OSぐらい使ってたらとてもシェルなんか信用できないけどな。 [] [ここ壊れてます]
861 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:06:47.76 ID:XH5wI1Z90.net] >>822 いやそこまでは全然見てない。 今回の仕様とパッチの顛末見て、他もそうだと勝手に推定してる。 読む価値のないコードのはずだから。(物によって全然違うかもしれんが) ただこれで回ってるのは事実だからな~。ちょっと観戦モードだ。 まず既に言ってるが仕様がグダグダ。 仕様は追加は簡単だが、削除することは基本的に無理なので、厳選しないといけないのに、まるで出来てない。 つまりこの辺の常識的な長期保守戦略をまるで知らない奴がやってて、止める奴もいないということ。 そして今回のメモリリークだが、確保したらそこで寿命も確定する、実装が一番簡単なタイプで、 これをリークさせるようなら話にならない。 ただそれでもミスることはあるが、出てきたパッチがこれまたグダグダで、Cのメモリ管理の基本を完全に無視してる。 レビューがあったら見た瞬間落とされるソースだ。そりゃリークするよな、としか思わない。 (ただし第2弾、第3弾も出てきて、ましになりつつあるが、それでも方向性を根本的に間違ってる。 とはいえ、展開が異常に早いのも確か) だから、通常の開発をやっているであろうGNUでは、仕様のレビューでも、コードのレビューでも落とされる。 だけどGit側にその理由を理解出来る奴がいないからこうなわけで、当然ブチ切れる。 そして喧嘩別れ、だったら俺らで作るからいいよ、でforkして突っ走ってるだけのように見える。 若すぎる。 ただそれでも実装能力だけはあるので、diffはGNUより装飾周りが断然進歩してる。 これはやっぱりGNUdiffと一緒にやってた方がみんな幸せだったと思うよ。 上手く導ける奴がいれば、 というより普通に長期保守したことがある奴が上層部に一人でもいれば、この辺は簡単に修正出来ると思うのだけど、 それは伽藍タイプの話で、バザールだとどうにもならないのかもしれんし、 突っ走らせないとプロジェクト自体が死ぬのかもしれんし、(サメみたいにね) よく分からん。
862 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:10:52.33 ID:EF7BixRC0.net] 口だけ達者で何もできない無能
863 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:14:59.38 ID:PwG12fTHM.net] >>824 GNUが何なのか全く理解できていない
864 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:27:19.25 ID:PwG12fTHM.net] >>823 自分が理解できないものは全部糞 理解力が致命的に弱い この2つが合わさると全方面Disることになる
865 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:35:53.62 ID:SQ9pznPg0.net] >>817 何で自分の関心の向かないOSSにわざわざ貢献しないといけないんですか? 金も貰えないのにそんなの苦行でしょう、アホらしい それとも君はLinusに向かってそれを要求できるほどGNUに対して貢献してるんですか?
866 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:39:58.51 ID:EF7BixRC0.net] bashの方を直せって言うなら GNU bashのプロジェクトに殴り込みをかければいいじゃん お前が
867 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:54:21.97 ID:XH5wI1Z90.net] >>828 逆だよ。他人に投げられることは他人に投げろと言ってる。 bashのバグだってことになれば、勝手に直してもらえるだろ。 自分で対応するのは、直してもらえないのが確定してからでいい。 >>829 そもそも俺はbashの互換性で苦労した試しがない。 ただそもそもOS跨いでシェルスクリプトを持っていった試しも無いけどな。てかそんなこと普通せんし。 あーだから、最悪Linux/Windows/Mac用と3種類用意すればよかったんじゃね?C化よりは楽だろうよ。
868 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:55:50.76 ID:EF7BixRC0.net] > 逆だよ。他人に投げられることは他人に投げろと言ってる。 なんのために?
869 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 21:56:20.74 ID:EF7BixRC0.net] > bashのバグだってことになれば、勝手に直してもらえるだろ。 だからお前がbashに通報しろって お前という他人に投げたぞw さっさとやれ
870 名前:デフォルトの名無しさん (ワッチョイ 7997-uk66) [2022/11/04(金) 22:08:26.91 ID:jUM5cpqM0.net] >>8
871 名前:30 え、Cでプログラム書いたことないの?OS間の違い、標準Cライブラリの方がよっぽど互換性に苦労することないよ… 考慮しなければならないのはファイルシステムと改行コードぐらいだろう。 [] [ここ壊れてます]
872 名前:デフォルトの名無しさん (ブーイモ MM33-ntN1) mailto:sage [2022/11/04(金) 22:17:50.42 ID:qsZ+zSWqM.net] まあおまえら落ち着け>>815 とか見る限りこいつはひとりではGitを理解できない 炎上させて答えを引き出そうとしてるから餌を与えちゃいかん ほっとけばすぐいなくなるよ
873 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 22:48:48.23 ID:XH5wI1Z90.net] >>834 ああ、@1か、これは失礼。 ただお世辞にも分かりやすいとは言えないねこれは。 まあでも、ならbranchを残す意味はあり、>>815 は取り下げだな。 >>814 については引き続き募集中。
874 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 22:50:35.62 ID:XH5wI1Z90.net] @{1}ね、まあ分かると思うけど
875 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 23:04:09.79 ID:7RpVnNq7M.net] >>836 @{1}に気が付くとはさすが軍師殿www
876 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 00:48:19.73 ID:yugci9j10.net] HEAD~1 で一つ前のリリースとか言ってて爆笑 リリースごとに一回だけコミットするつもりなのか? 永久に git 理解できそうにないな
877 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 01:35:03.83 ID:CLSrxuim0.net] ネットのクソ記事で独学するより、まともな本買って学習すればいいのにな つうかあれか、gitの仕様の粗探しがしたいから使い方とかどうでもいいのか
878 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 01:42:19.97 ID:zPyCNtrD0.net] そもそも一つ前wみたいな考え方するようなものじゃないよなw
879 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 03:02:36.62 ID:0q4aURph0.net] 自分が理解できないから、知ってるシェルスクリプトにすがってるだけだな POSIX原理主義者と一緒。POSIXの名前を勝手に使って シェルスクリプトしかできないのをごまかしてる gitを利用してシェルスクリプトしかできないのをごまかしてる
880 名前:デフォルトの名無しさん (ワッチョイ 617b-8+ss) mailto:sage [2022/11/05(土) 09:15:20.90 ID:646uiMLL0.net] >>717 ちなみに書く側のコマンドは hash-objectのようだ。 多分初期はPlumbing Commandsをシェルスクリプトでラップして各上位コマンドを提供してたのだろう。 そして俺にはこの程度のシェルスクリプトが環境依存するとはとても思えないんだけどさ。 >>821 って、ふと気づいたが、俺が使ってるのはGitBashだったわ。 現在の公式版にもGitBashバイナリは同梱されてるし、ライセンスがどうこうという問題は無いか、解決されてるよ。 Macは政治的だとして、Linusはその辺実務的に見えるから、 GPLv3をボロカス言って自分はGPLv3には参加しないが、(これは正当な権利で全く問題ない) GPLv3を殺す為にGPLv3のプロダクトの同梱すらしない、みたいなことはしないのだろうよ。
881 名前:デフォルトの名無しさん (ワッチョイ 617b-8+ss) mailto:sage [2022/11/05(土) 10:38:45.29 ID:646uiMLL0.net] >>814 公式のcontribに置いてあるユーザー製作の勝手ツールにあるのは発見した。 つまり熟知してる公式からみても面倒な作業だと認めているわけだ。 解決というよりは諦めと納得だが、これも質問を閉じる。 > https://zenn.dev/yoichi/articles/git-restore-branch ちなみに、branchを『後から追加』は出来るか? いやそんな使い方はおかしい!禁止だ!かもしれんが、 やはり俺にはbranchはただの(DBにおける)INDEXで、 随時落としたり作ったり復活させられないと使いづらい。(のではないかと予想している) ただ、要はreflogを偽造すればいいだけのようだが、 再実装は時間の無駄で
882 名前:しかないので、既にあればそれを使いたい。 [] [ここ壊れてます]
883 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 11:40:31.33 ID:zDjINlW+0.net] >>842 index-stageを理解してないおまえにはわからないかもしれないけど、 DBへ登録されるのはwork tree上のファイル丸ごとでない場合もあるし、 逆にDBからwork treeへ展開されるのもファイルの中の一部分の場合があるから、 そんな単純にはいかない
884 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 11:40:56.02 ID:zDjINlW+0.net] >>842 Windowsはアプリを実行する上でコード署名が必須でないから問題にならないだけ
885 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 11:41:36.89 ID:zDjINlW+0.net] >>843 gitのマージを全然理解できてないからブランチを復活させたいとか思ってしまうんだな 普段の運用でスクリプトを使ってブランチを復活させたいとか思う羽目になることはあまりない ブランチがDBにおけるindexみたいなものとか、後から追加できる?みたいな疑問が生じるあたり、ブランチが何なのか全然わかってない reflogの偽造が必要という発想もかなりズレてるし、>>814 をみるとコミットの履歴がどういうものなのか理解できていないのだろう
886 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 12:57:19.46 ID:646uiMLL0.net] >>844 さすがにその程度は知ってるぞ。 ただ、一般的には git add -A で問題ないディレクトリ構成で使う方が多いんじゃないか? まあそれはさておき、 要は、正しくソフトウェアが構成されてれば、cat-file/hash-object を組みで交換すれば、 末端のファイル形式は自由に選べるって事だよ。sshにすればネットワーク先にも余裕だ。 つってももうこの話は通じないのでいいが。
887 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 13:13:08.87 ID:646uiMLL0.net] >>845 つまり現行2.38.1のMac版にはBashバイナリが入ってないのか? それでMacに元々入っているbash以外のshを使ってれば、そりゃ問題は発生するだろうさ。 > https://qiita.com/ko1nksm/items/59c2e8a7afa969af8212#:~:text=Mac%20%E3%81%AE%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AF%20macOS%2010.15%20Catalina%20%E3%81%A7%20bash%20%E3%81%8B%E3%82%89,%E3%81%AB%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%9F%E3%81%A8%E4%B8%80%E8%88%AC%E3%81%AB%E8%A8%80%E3%82%8F%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AF%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%95%AA%E5%8F%B7%E3%81%AE%E9%81%95%E3%81%84%E3%82%92%E9%99%A4%E3%81%84%E3%81%A6%E4%BB%A5%E5%89%8D%E3%81%A8%E3%81%BB%E3%81%A8%E3%82%93%E3%81%A9%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%20%2Fbin%2Fsh%20%E3%81%AF%20POSIX%20%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%20bash%20%28%2Fbin%2Fbash%29%20%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%BE%E3%81%99 Macとしては署名済みじゃないとウイルスかもしれないので認められず、 GPLとしては署名付けるならその署名を作るソースも公開しろと言ってるわけ? どっちも拗らせすぎだが、 一般論としては、Mac側に「開発者オプション」で「署名がないバイナリの動作を許可する」があれば済む話では? 実際自分でコンパイルしたバイナリを動かせないと困るし。 ただ、Macってスマホと同一化したからこれって脱獄になるんだっけ? ならまあ、Gitの為に脱獄はないし、こじれるのは分かるが。 まあ、正直つき合いきれないが、俺なら、C化ではなく、 bashの機能を諦めてshの機能だけで書き直す方を選択するけどね。
888 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 13:19:32.87 ID:zDjINlW+0.net] >>847 実際仕事すればわかるが add -Aで綺麗なコミットを作れるように整備されてるリポジトリはあまり無い デバッグしながらコミットしていくときは add -p を使うことがとても多い
889 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 13:20:48.95 ID:zDjINlW+0.net] >>848 https://www.infoq.com/jp/news/
890 名前:2019/07/macos-ditches-bash-for-zsh/ [] [ここ壊れてます]
891 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 13:57:20.56 ID:0q4aURph0.net] git add -Aで十分とかさぁ、開発経験なさすぎだろ それはgitをバックアップとか途中セーブ機能とでも思ってんのか? 1 commit = 一機能の追加とか、一日の最後にやるものとか思ってるんだろ 通常なにかのバグの修正とか 複数の個別の問題の複合なのに それ全部まとめんな
892 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 13:58:29.56 ID: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 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 14:02:51.18 ID:0q4aURph0.net] >>852 世の中に理解しないで使えるものなんてない
894 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 14:04:13.47 ID:0q4aURph0.net] 大体gitの使い方を理解したいと思ってるやつはアホ 理解するのはバージョン管理の仕方だ こうやってツールの使い方を学ぶことが理解だと思ってるから gitがなくなったらどうしよう また新しいことを学ばなきゃいけないってなるんやろ
895 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 14:19:41.99 ID:W/77BOuWM.net] >>854 git そのものを理解すること諦めたか でもお前使い方の方も盛大に勘違いしてるよ
896 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 14:24:19.56 ID:646uiMLL0.net] >>851 > それはgitをバックアップとか途中セーブ機能とでも思ってんのか? > 1 commit = 一機能の追加とか、一日の最後にやるものとか思ってるんだろ そうだぞ。 ブッ込んでおけば後で何とでもなるただのバケツでしかない。 バケツの使い方を学べとか、知るかボケだ。 後でバケツから探し出すハメになった時、取り出し方をググって取り出せれば十分だ。 大方、プログラマの大半はこの程度の認識のはずだぞ。 そしてお前が望む、綺麗な管理記録は、これのサブセットでしかないんだよ。 だから例えば俺が780で言ったように、「コミットメッセージが空」を除外すれば簡単に得られる。 今のGitにこの機能がないだけ。(まあ近い機能はあるが) DBならWHEREに条件を付加すればいいだけの楽勝案件で、Web系ならみんな出来るよ。 sedのワンライナーで済むことすらCで実装するGit界隈だと誰も出来ないのだろうけどさ。 まあGitにSQLインタフェースを付け加えればWeb系の奴等は文句言わなくなるんじゃないかな? 連中にとっては直感的になるから。
897 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 14:34:25.48 ID:0q4aURph0.net] > 大方、プログラマの大半はこの程度の認識のはずだぞ。 お前の周りの無能集団だけだろ
898 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 14:35:58.29 ID:0q4aURph0.net] 一体どこのプロジェクトに「2022年11月4日の仕事終了時のセーブ」なんてコミットがあるんですかねぇ
899 名前:デフォルトの名無しさん mailto:age [2022/11/05(土) 14:42:21.04 ID:oTMzuhJSa.net] >>858 それなんて、俺の前の職場
900 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 14:46:20.49 ID:0q4aURph0.net] データの取り出し方なんか知っていても 過去のコミットのミスを簡単に直せないなら バージョン管理は苦痛になるし やっぱりツールの使い方だけ知ってバージョン管理をしたことがないんだろうな バージョン管理が不便だからgitが作られたんだぞ
901 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 14:58:06.66 ID:646uiMLL0.net] >>859 俺はそれでいいと思うけど。 記録してない方が問題で、記録さえしてあれば、ゴミとマジを簡単に分離出来れば十分だ。 >>860 今のGitの修正は十分苦痛だよ。 修正させたくないから面倒にする、は間違いで、 簡単に修正出来るが、修正したことも履歴に残るようにする、が正しい。
902 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 15:03:35.62 ID:0q4aURph0.net] × 俺はそれでいいと思うけど。 ○ 無能はそんなことをしている。 まずさぁ、gitというかバージョン管理の基本を理解してないんだからさ そこから勉強しなよ
903 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 15:04:40.67 ID:0q4aURph0.net] > 簡単に修正出来るが、修正したことも履歴に残るようにする、が正しい。 お前はテキストエディタで保存するたびに gitにセーブしろって言ってんのか?w
904 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 16:06:55.57 ID:646uiMLL0.net] >>863 俺が言ってる「修正」は、Git自体の修正で、 > なのでマージ前のブランチをレビュー対象とする開発では push の際に整理することになる (778) の場合に、SQL的に、 DELETE FROM my_repo WHERE branch='featureX' AND commit_message=''; あるいは、 CREATE INDEX beautiful_featureX ON my_repo WHERE branch='featureX' AND commit_message=''; で済むのに、何故Gitにつき合ってグダグダやらねばならんのだ?ということ。 それとは別に、ちょこまかcommitしても、俺は構わんと思うけど。 上記のように、それを1コマンドで除去出来れば、実務上何ら問題ない。 粒度が細かすぎてDBが膨れあがるなら、その部分を定期的にバックアップに切り出していけばいいだけ。 bitcoinはこの方式だ。 >>862 多分根本的に違うのは、 俺: 俺のワークフローに合うようにツールをカスタマイズする 863: Gitのワークフローに合わせてgitを使え、それ以外認めない! なんだよ。 Linusが個人的に開発したんだからGit自体はそれでいいんだが、 全世界でLinuxと同じワークフローが適切なわけではない。
905 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 16:10:37.55 ID:5Oe/8sYX0.net] >>864 アホなの?コミットメッセージは毎回入れるものだ
906 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 16:11:36.07 ID:5Oe/8sYX0.net] >>864 > 全世界でLinuxと同じワークフローが適切なわけではない。 だからgitはいろんなワークフローに対応してるんだろうが お前のはバージョン管理のワークフローではない ただのバックアップのワークフローだ
907 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 16:45:19.71 ID:CLSrxuim0.net] まあ1人プロジェクトみたいだし好き勝手やらせればいいさ
908 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 16:54:40.83 ID:5Oe/8sYX0.net] コミットメッセージが空だったら~とかわけわからんなw
909 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 16:56:10.72 ID:5Oe/8sYX0.net] 行単位で独立してるデータベースのデータじゃないんだからさぁ ソースコードは前後の歴史とつながってる DELETEなんちゃらみたいに一つだけ取り除くことが出来るのは稀
910 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 17:21:12.99 ID:646uiMLL0.net] >>869 それは当然UIの話で、当たり前だが
911 名前:熾狽フリンクは接続し直すんだよ。 そしてそれをユーザーには見せない。 多分ここら辺の階層の話がGitには存在しないんだよ。 だからユーザーがviでリンク書き換えろとかの勢いだろ。 超密結合だし滅茶苦茶だよそれは。 [] [ここ壊れてます]
912 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 17:22:28.46 ID:5Oe/8sYX0.net] >>870 都合が悪いからって無視するな 前後のソースコード関連してるから 途中のコミットを取り除くことはできないと言ってる
913 名前:デフォルトの名無しさん [2022/11/05(土) 17:28:35.59 ID:B2i8Nuif0.net] つまり、両親がイブに中出ししてお前が生まれたという歴史において、 イブの中出しだけを無かったことにはできないと言うことだね その後の歴史でお前が存在するのはおかしいし
914 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 17:30:55.67 ID:646uiMLL0.net] >>871 何言ってんだ? 中身はただの単方向リンクリストだぞ。 リンク先が複数のこともあるが、それでも問題なく抜ける。 ただそれ以前に、俺は既に言ったとおり「記録されてないほうが問題」とするので、 CREATE INDEXを使うが。これなら理解出来るか? だったら、このINDEX対象をちょうど全部含むようにリンクリストを新しく作り直せばいいだけ。 それがDELETEしたものと同じ物になる。これで理解出来るか?
915 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 17:40:00.52 ID:5Oe/8sYX0.net] >>873 じゃあ抜き取ってみ ・commit 1「aaa を追加」 aaa ・commit 2「bbb を追加」 aaa bbb ・commit 3「bbb を ccc に置き換えた」 aaa ccc ここからcommit2を抜き取ったときの commit3の修正内容をよく読んでみろ
916 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 17:44:37.25 ID:W/77BOuWM.net] >>873 残念だけどそこから間違ってる Gitのコミットのリストは単方向リンクリストではない なのでリストの途中のコミットを削除したり途中に追加できない
917 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 17:58:44.17 ID:646uiMLL0.net] >>874 ああコミットメッセージについては考えてなかったが、 俺ならそのままぐちゃっと貼り付けるけど。 つまり、 ・commit 1「aaa を追加」 aaa ・commit 3「bbb を追加」「bbb を ccc に置き換えた」 aaa ccc になる。
918 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:03:19.55 ID:646uiMLL0.net] >>875 親が複数あるだけの単方向リストだよ。 まあこれを単方向リストと呼ぶかは微妙だから、ツリーと言った方が通じたか? ツリーが複数重なり合った状態になってるだけだよ。 単線の A<-B<-C なら A<-C になる。これは自明だよな。 マージの場合、(BがADのマージ結果ね) A<-B<-C D<-| を A<-C D<-| にする。
919 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:18:30.70 ID:5Oe/8sYX0.net] >>876 ようやく理解したか。 だからお前がやってるのはただのバックアップを取ってるだけだっていってんだよ バージョン管理というのは何をどう変えたかという変化を記録するものだ スナップショットじゃねーんだよ、あーほ
920 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:19:21.47 ID:5Oe/8sYX0.net] >>876 bbbの話がないのだから、 書き間違えなのか全く区別がつかない バグコミットメッセージだな
921 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:21:44.83 ID:5Oe/8sYX0.net] >>873 > ただそれ以前に、俺は既に言ったとおり「記録されてないほうが問題」とするので、 だからお前のテキストエディタでの変更内容を全部記録するって言ってるんだろ? ファイルを保存するたびにコミットするんだろお前は? バージョン管理で記録するのはソースコードの修正履歴であって お前個人の作業履歴じゃねーんだよ 使い物にならないゴミコミットを作るな
922 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:26:48.37 ID:646uiMLL0.net] >>878 ああ履歴についての認識が違うんだな。了解した。 履歴は、 俺: スナップショット=「点」の並び 君: 変更した線の並びで、それはcommitメッセージに現れる。 それだと、commitメッセージが間違ってる場合はどうしようもなくなるだろ。 あくまでソースコードが重要で、どこをどう変えたかはdiff取れば済むだけの話、 commitメッセージなんて目安に過ぎないんだよ。 Gitもこちらの立場に近く、VCSとしては珍しく(と聞いているが俺はそこまで詳しくないが) 差分ではなく本体を記録するだろ。
923 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:31:31.07 ID:5Oe/8sYX0.net] >>881 > 履歴は、 > 俺: スナップショット=「点」の並び だから、それはバックアップで言うって最初から言ってるだろ お前が完全に間違ってるんだよ > それだと、commitメッセージが間違ってる場合はどうしようもなくなるだろ。 修正しろよ。それが出来るように作られているだろ > commitメッセージなんて目安に過ぎないんだよ。 はっw バージョン管理の素人が。 コミットメッセージの重要性を知らない時点で終わってるよ
924 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:32:44.57 ID:646uiMLL0.net] >>880 > ファイルを保存するたびにコミットするんだろお前は? そこまではしないが、1日10回とか平気ですることもあるし、それが問題だとも思わない。 この辺はポリシーだし、好きなようにすればいいと思うがね。 間違いなく言えるのは、俺は美しいソースコードを目指しているのであって、 美しいコミット履歴を目指しているわけではないんだよ。 そしてコミット履歴が過剰なら、落とせばいいだけだろ、という話。 無い履歴からは生成することは不可能なのだから、大きすぎる粒度より、小さすぎる粒度の方がいいに決まってる。 所詮commitメッセージなんて当てにならないし、diffが取れれば全く問題ない。
925 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:32:45.04 ID:5Oe/8sYX0.net] > Gitもこちらの立場に近く、VCSとしては珍しく(と聞いているが俺はそこまで詳しくないが) > 差分ではなく本体を記録するだろ。 だから最初からバージョン管理は差分を記録するものであり gitの優れた点が、発想の転換で 本体を記録することで差分を表現することにした点なんだろ 実装の話とごっちゃにするな そういうところが技術的に未熟なんだよ
926 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:33:34.01 ID:5Oe/8sYX0.net] >>883 > そこまではしないが、1日10回とか平気ですることもあるし、それが問題だとも思わない。 そりゃお前が素人だから問題であることに気づいてないだけ 誰もやってないからね > この辺はポリシーだし、好きなようにすればいいと思うがね。 お前が未熟だから反論できずにポリシーってことにしようとしてる
927 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:33:50.55 ID:zDjINlW+0.net] >>877 分散バージョン管理ではですね、リポジトリのコピーがばらばらに複数存在することが前提なので、 あるひとつのリポジトリのコミット履歴が A<-B<-C で、他のリポジトリではこれが A<-C になっているという状況は不味いんですよ なのでGitではそれができないようにデータ構造が設計されています
928 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:34:49.14 ID:5Oe/8sYX0.net] > 間違いなく言えるのは、俺は美しいソースコードを目指しているのであって、 > 美しいコミット履歴を目指しているわけではないんだよ。 コミット履歴は「使うもの」だって分かってないようだな 一部のコミットだけ抜き取って 他のブランチに組み込む 使うものだ お前はただ見れればいいと思ってる バージョン管理を理解してない
929 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:35:50.16 ID:5Oe/8sYX0.net] >>883 > 所詮commitメッセージなんて当てにならないし、diffが取れれば全く問題ない。 お前が作るコミットがクソだから、使いものにならなくなっているだけだなw
930 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:39:58.47 ID:646uiMLL0.net] >>882 まあ君と仕事することは無さそうだから別に問題ないけど、 > 修正しろよ。それが出来るように作られているだろ コミットメッセージをいくら修正したところでそもそも意味無いんだよ。 管理してるのはメッセージじゃなくてソースコードなんだから。 それで、重要なコメントはソースコード上に書いてるから、diff取れれば十分なんだよ。 コミットメッセージは、あくまでGit上から探し出すラベルでしかなくて、何をやったかはdiffで見るし、それ以外にないよ。 > はっw バージョン管理の素人が。 > コミットメッセージの重要性を知らない時点で終わってるよ まあ俺はGitの達人になりたいわけでもないんで、これで問題ないよ。
931 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:40:40.33 ID:5Oe/8sYX0.net] > コミットメッセージをいくら修正したところでそもそも意味無いんだよ。 それはお前だけの感想ですねw
932 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:41:08.69 ID:5Oe/8sYX0.net] > まあ俺はGitの達人になりたいわけでもないんで、これで問題ないよ。 バージョン管理の素人だって言ってる お前、他の人と一緒に仕事ができないよw
933 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:41:43.46 ID:5Oe/8sYX0.net] > コミットメッセージは、あくまでGit上から探し出すラベルでしかなくて、何をやったかはdiffで見るし、それ以外にないよ。 途中を抜いといて、何をやったかなんてわかるわけ無いだろwww
934 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:43:50.28 ID:5Oe/8sYX0.net] >>889 こうやってコミット履歴をちゃんと見れて なんの変更をしたのかわかるようになるまで頑張れよ https://github.com/freebsd/freebsd-src/commits お前のコミットは汚すぎて 使い物にならんのだわ
935 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:44:39.97 ID:646uiMLL0.net] >>884 > gitの優れた点が、発想の転換で > 本体を記録することで差分を表現することにした点なんだろ これは違う。 というかね、どっちを記録したところで、正常に動いていればどのみち任意の履歴を取り出せるから関係ないんだ。 ただ、ファイルシステム等がぶっ壊れて、断片的にしか取り出せなくなったときに、Gitみたいに本体を記録してる方が断然強い。 だから基本は「一番大事なもの」で記録するようにしなければいけない、という観点だったのだけど、 まあこれはフォールトトレラントにしろという話で、ちょっと蛇足ではあったね。 あまり関係ないからこの話は終わりで。
936 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:45:34.09 ID:5Oe/8sYX0.net] > これは違う。 だーかーら、素人のお前の意見なんか聞いてない
937 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:50:58.69 ID:5Oe/8sYX0.net] > ただ、ファイルシステム等がぶっ壊れて、断片的にしか取り出せなくなったときに、 gitは速度のためにスナップショットにしてると書いています https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E5%9F%BA%E6%9C%AC
938 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:53:08.44 ID:5Oe/8sYX0.net] https://www.techpit.jp/courses/33/curriculums/34/sections/286/parts/965 なぜスナップショットとして記録するのか スナップショットとして記録することで、複数人で開発する時のスピードを上げることができます。 詳しくは後ほど解説しますが、複数人での開発の際、並行して開発できるよう、 Gitではブランチというものを切って、バージョンを枝分かれさせて開発していきます。 このブランチでバージョンを枝分かれさせる際や、ブランチを統合(マージ)する際にスナップショットだと非常に作業が速くできます。 Gitがデータを差分というかたちで持っていると、ブランチを切ってマージする時に差分をいちいち計算しなければなりません。 しかしスナップショットで保存しておけば、差分の計算をしなくて済む分、とても速くブランチを切ったりマージできるようになります。 ちなみに、Git以前のバージョン管理ツールの多くは差分としてデータを保存していて、ブランチを切るのに大変時間がかかっていました。 大規模なプロジェクトになると数十秒かかったりすることもありました。 Gitだとこの作業が一瞬でできます。こういった事情があって、Linuxの作者のリーナス・トーバルズは 当時、大規模開発であったLinuxカーネル開発のバージョン管理システムを自作しました。これがGitのスタートです。
939 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 18:56:37.48 ID:646uiMLL0.net] >>886 ああなるほど、ブロックチェーンよろしく親のhashデータも自分のhashに入ってるのか。 しかしそれは、改竄がばれるだけで、リンクを繋ぎ直すことが出来ないわけではないね。 というかね、それは本体ツリーの話で、 余分なcommitはrepoから消せ!とする君らにとっては問題だが、 俺みたいに、スカスカのINDEXでbranchを再構成するのはその場合にも全く問題ないはず。 ところで、 実は今もbranchの実体がどこにあるのか見えてない。 見る限り .git/logs/refs/heads/各branchにしかなさそうなのだけど、ここかね? これだと毎回reflogを動的に解釈することになるが。 実装としておかしくはないが、普通はこうはしないので、ちょっと不可解だ。 なおオブジェクトツリーにはbranchのデータは無く、branchは各オブジェクトへのリンクの入った配列だと見てる。 だからシャローコピーでしかなく、後からでもいくらでも作れるだろ、という話。
940 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 19:03:07.94 ID:5Oe/8sYX0.net] > 後からでもいくらでも作れるだろ、という話。 だから速度重視だって言ってる
941 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 19:03:54.30 ID:5Oe/8sYX0.net] >>898 君、ほんと知らないなら黙ってたほうがいいよ 恥ずかしいだけだから
942 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 19:05:11.02 ID:5Oe/8sYX0.net] >>898 > 余分なcommitはrepoから消せ!とする君らにとっては問題だが、 余分なコミットじゃなくて、 コミットとして使えないものにする バグコミットを消せと言ってるだけ
943 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 19:21:59.71 ID:zDjINlW+0.net] >>898 まあもう面倒臭くなってきたので全部説明しちゃうが 結果的に親のhashが自分のhashに含まれることになるのだけど、実際には親のhashは自分のコミットオブジェクトに含まれている その自分のコミットオブジェクトから計算して求めるのが自分のhash 親の祖先に変更があれば自分のコミットオブジェクトの作り直しになってhashも計算し直すことになりそれはもう自分ではない ブランチの実体はコミットオブジェクトのハッシュひとつだけ それで事足りる ず〜〜〜と思っているんだがどう考えてもお前のブランチへの理解はオカシイ 内部的な構造の話ではなくてユーザとして使う上でも問題があるような酷い理解に見える だから >>815 みたいな謎発言がでてくる DBのINDEXみたいなもの?とかの謎解釈で突き進まれてもついていけない
944 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 20:06:
] [ここ壊れてます]
945 名前:13.91 ID:646uiMLL0.net mailto: >>902 前半の内容は知ってるし、そのつもりで898を書いてる。 それはtutorial2に書いてあったから。 そこのhash値も混ぜてるかどうかは関知してなかっただけ。 ちなみにtutorlal2には「ここのhash値とは違うから、各自のhash値をコピペしてね」 と書いてあるが、実際は同じhash値が生成される。 だからどこまで混ぜ込んでるのかよくわからなった。 名前と時間も混ぜ込んでるぜ!と書いてあるが、どう見てもそうじゃない。 ただまあ、親ハッシュは混ぜ込んでるのは理解した。 > ブランチの実体はコミットオブジェクトのハッシュひとつだけ それは俺の最初の理解、「点」なんだよ。815の通り。エントリポイントだけ、というわけだろ。 ただそれだと、オブジェクトツリーは辿れるが、 master @{1}で「master branch上の」一つ前、という経路情報に変換することが出来ない。 つまり、HEAD~! != @{1} とするには、何らかの情報が何処かに必要なんだよ。 そして今のところ、reflogしかないので、そこを動的に辿ってるのか?みたいなことになってる。 だから「reflogを偽造」(843)なんて話になる。 言い換えると、エントリポイントからだと、親は辿れるが、 親が複数現れたとき(マージ)に、どちらから来たのか分からないのと、 fast-forwardマージでオブジェクトは一本道でもbranch上では飛ばしている場合に、その情報がないんだよ。 これはどこに格納されてるんだ? [] [ここ壊れてます]
946 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 20:19:07.74 ID:646uiMLL0.net] すまん、分かると思うが、 HEAD~1 != @{1}
947 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 20:45:45.41 ID:zDjINlW+0.net] >>903 reflogのhashは、HEADが変わるような操作をしたときに、その操作の結果のHEADのhashを追記していくだけのログだよ このログがその後のgitの動作に影響を与えることはない HEAD@{0}が常に最新の操作に対応したhashに更新される だからたとえばmasterとfirstという二つのブランチを交互にcheckoutすればこんな感じになる $ git reflog 0956cde (HEAD -> first) HEAD@{0}: checkout: moving from master to first be7e7d7 (master) HEAD@{1}: checkout: moving from first to master 0956cde (HEAD -> first) HEAD@{2}: checkout: moving from master to first be7e7d7 (master) HEAD@{3}: checkout: moving from first to master 0956cde (HEAD -> first) HEAD@{4}: checkout: moving from master to first be7e7d7 (master) HEAD@{5}: checkout: moving from first to master 最後にcheckout firstしたので HEAD -> first になってる
948 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 20:59:53.75 ID:646uiMLL0.net] >>905 reflogがその形式なのは知ってる。 ただ、頭のポイントだけだと、903で言ったとおり、経路情報にならないだろ。 例えば、815の場合、再記するが、 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 これで、master上で git diff @{1} では、initial commit との差分 git diff HEAD~1 では、 impl4との差分が出るんだよ。 これが、master->impl5のエントリポイント情報だけだと出来ないから、 maseterはinitial->impl5に移動しましたよ、という経路情報が何処かに必要なんだ。 それで、git reflog では、 どこにswitchして、commit して、mergeした、という履歴が全部出るから、 (多分だが各HEADのreflogを全てcatして時系列にソートしてる) 解釈すれば可能ではあるけど、そんな面倒なことするか?普通はstaticにシャローコピーだろ、というのと、 reflog は gc されるので、reflogを頼りにする実装は不適切だし、 俺的にbranchを消したり復活させたりする使い方はヤバそうなんだよ。 だからその辺を確認してる。 それで、後で任意のオブジェクト群でbranchを作れるのなら、この辺心配ないのだけど、そうではなさそうだし。
949 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 21:04:51.93 ID:646uiMLL0.net] ちなみに、843の記事では、Git内のcontrib内のスクリプトが、 branchをreflogを参考に復活させるらしいので、reflog内の情報で足りてはいるらしい
950 名前:。 確かに目で見た限りそうだが、 でもそれだとreflogをgcするのは割と狂気の沙汰だから、おかしいよなーと思ってて。 [] [ここ壊れてます]
951 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 21:06:47.08 ID:646uiMLL0.net] ごめん、書き方が悪かった。 907は、gc対象となるreflogを本番情報として持つのは狂気の沙汰だなーということ。 復活させるときにそこにしか手がかりがないのは仕方ないとして、 生きてるbranchは普通はツリー情報をstaticに持ってるはずだが、見あたらないんだよ。
952 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 21:15:14.62 ID:zDjINlW+0.net] >>906 そのリポジトリがどういう構造になっているかわけわからん git show-branch してみろ
953 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 21:26:43.61 ID:646uiMLL0.net] >>909 すまぬ、確かに今見てればちょっとおかしい。 もう一度作るから30分ほどお待ちを。
954 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 21:51:56.84 ID:646uiMLL0.net] >>909 結果 $ git show-branch ! [develop] impl5 * [master] impl5 -- +* [develop] impl5 $ git branch develop * master
955 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 21:52:24.93 ID:646uiMLL0.net] >>909 $ git diff HEAD~1 diff --git a/test.txt b/test.txt index 3585d98..bbddc42 100644 --- a/test.txt +++ b/test.txt @@ -4,3 +4,4 @@ impl1 impl2 impl3 impl4 +impl5 $ git diff @{1} diff --git a/test.txt b/test.txt index e79c5e8..bbddc42 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,7 @@ initial +impl0 +impl1 +impl2 +impl3 +impl4 +impl5
956 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 21:53:21.88 ID:646uiMLL0.net] >>909 再現コード #!/bin/bash -x # git init echo 'initial' > test.txt git add test.txt git commit -m 'initial' git branch develop for (( i=0 ; i<6 ; i++ )); do git branch feature$i git switch feature$i echo "impl"$i >> test.txt git add test.txt git commit -m "impl"$i git switch develop git merge feature$i git branch -d feature$i done git switch master git merge develop
957 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:01:15.70 ID:646uiMLL0.net] >>909 ちなreflog $ git reflog 1a804d9 (HEAD -> master, develop) HEAD@{0}: merge develop: Fast-forward b0325fc HEAD@{1}: checkout: moving from develop to master 1a804d9 (HEAD -> master, develop) HEAD@{2}: merge feature5: Fast-forward ba4e962 HEAD@{3}: checkout: moving from feature5 to develop 1a804d9 (HEAD -> master, develop) HEAD@{4}: commit: impl5 ba4e962 HEAD@{5}: checkout: moving from develop to feature5 ba4e962 HEAD@{6}: merge feature4: Fast-forward a32e11d HEAD@{7}: checkout: moving from feature4 to develop ba4e962 HEAD@{8}: commit: impl4 a32e11d HEAD@{9}: checkout: moving from develop to feature4 a32e11d HEAD@{10}: merge feature3: Fast-forward 8d9924f HEAD@{11}: checkout: moving from feature3 to develop a32e11d HEAD@{12}: commit: impl3 8d9924f HEAD@{13}: checkout: moving from develop to feature3 8d9924f HEAD@{14}: merge feature2: Fast-forward 0f78740 HEAD@{15}: checkout: moving from feature2 to develop 8d9924f HEAD@{16}: commit: impl2 0f78740 HEAD@{17}: checkout: moving from develop to feature2 0f78740 HEAD@{18}: merge feature1: Fast-forward 47792a3 HEAD@{19}: checkout: moving from feature1 to develop 0f78740 HEAD@{20}: commit: impl1 47792a3 HEAD@{21}: checkout: moving from develop to feature1 47792a3 HEAD@{22}: merge feature0: Fast-forward b0325fc HEAD@{23}: checkout: moving from feature0 to develop 47792a3 HEAD@{24}: commit: impl0 b0325fc HEAD@{25}: checkout: moving from master to feature0 b0325fc HEAD@{26}: commit (initial): initial
958 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:02:09.13 ID:646uiMLL0.net] >>909 ついでに一応、終了時のtest.txt $ cat test.txt initial impl0 impl1 impl2 impl3 impl4 impl5
959 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:05:21.84 ID:zDjINlW+0.net] >>911-915 これ全部FFマージやってるから結果的にdevelopブランチとmasterブランチが同じものになるぞ
960 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:09:56.21 ID:zDjINlW+0.net] mergeを全部merge --no-ffにするとマージした構造がわかるようになるし、最後にdevelopとmasterが別のものになる どっちのマージにするかは現場の運用しだい
961 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:10:47.10 ID:zDjINlW+0.net] git log --graph --branches --oneline とかするとわかりやすい
962 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:11:46.51 ID:646uiMLL0.net] >>916 ああ、それがrebaseしないと履歴が無くなるとかいう話か? 実はそれはまだ確認中だが、とりあえず本件についてはこれでいいし、 俺的には多分こうなる。(基本的にmasterはdevelopの後を追うだけ) けしか
963 名前:轤か? それはさておき、本件、HEAD~1 と @{1} が違うものだという経路情報は、 どこにあるのか分かれば教えてくれ。 [] [ここ壊れてます]
964 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:22:33.37 ID:zDjINlW+0.net] HEAD~1と@{1}は全然関係無いよ? HEAD~1は今のHEADの一番目の親のhash 親が複数いるときにはHEAD^1とかHEAD^2とかで指定する @{1}はひとつ前の操作によってHEADになったhashだから、どういう操作したかで変わり、リポジトリの構造とは関係無い
965 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:30:34.81 ID:zDjINlW+0.net] >>914 で説明すると、 @{0}は最後のコミットで、FFマージした結果masterとdevelopがこのhash=1a804d9になった @{1}はgit commit -m 'initial'の結果できた最初のコミット(最後のマージ操作の前のmaster)で、最後にこれにdevelopをマージするためcheckoutしたらこれになってる
966 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:35:17.82 ID:646uiMLL0.net] >>920 > @{1}はひとつ前の操作によってHEADになったhashだから、どういう操作したかで変わり、リポジトリの構造とは関係無い だから、それは「そのbranchの」一つ前の操作なんだよ。 結果、diffは、masterブランチでは>>912 で、HEAD~1 != @{1} だが、 developブランチでは、以下になって、 HEAD~1 == @{1} なんだよ。 $ git diff HEAD~1 diff --git a/test.txt b/test.txt index 3585d98..bbddc42 100644 --- a/test.txt +++ b/test.txt @@ -4,3 +4,4 @@ impl1 impl2 impl3 impl4 +impl5 $ git diff @{1} diff --git a/test.txt b/test.txt index 3585d98..bbddc42 100644 --- a/test.txt +++ b/test.txt @@ -4,3 +4,4 @@ impl1 impl2 impl3 impl4 +impl5 だからmasterブランチをdevelopにmergeしかしない運用をした場合、 masterブランチは @{n} でn回前のリリースが検索出来、存在価値が出てくる、という見立てだが、間違ってるか? (@はcommit履歴だと思ってるが、まさか操作履歴か?なら確かに意味無いし、先頭情報しか要らないし、reflogしかなくても納得だが)
967 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:40:04.85 ID:zDjINlW+0.net] 最終的にお前のリポジトリは git merge develop でこうなっているはずだ $ git log --graph --branches --oneline * 1a804d9 impl5 (HEAD -> master, develop) * xxxxxxx impl4 * xxxxxxx impl3 * xxxxxxx impl2 * xxxxxxx impl1 * xxxxxxx impl0 * b0325fc initial 最後のひとつ前の git switch master をやったときにはこうなっていたはず * 1a804d9 impl5 (develop) * xxxxxxx impl4 * xxxxxxx impl3 * xxxxxxx impl2 * xxxxxxx impl1 * xxxxxxx impl0 * b0325fc initial (HEAD -> master) だから HEAD@{0} = 1a804d9 で、HEAD@{1} = b0325fc
968 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:46:20.49 ID:646uiMLL0.net] >>921 @はやっぱcommit履歴だよな? エントリポインタだけだと、commit履歴に出来ないんだよ。 今回はfast-forwardマージしてるから、 init<-0<-1<-2<-3<-4<-5 = master, develop で、単にエントリポイントだけなら master も develop も同じ 5 で区別がない。 当たり前だが両方とも HEAD~1 は4を指してる。 ただ、@{1}は、commit履歴だから、masterでは init を指し、developでは4を指す。 この、commit履歴情報はどこに記録されてるの?というのが俺の質問。 >>923 そこは理解出来てるはず。上記の通り。 問題はcommit履歴がどこにあるか。
969 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:50:12.27 ID:zDjINlW+0.net] >>922 masterブランチをdevelopブランチにマージする方法が git switch masterとgit merge developの連続実行だけではないし、 HEAD@{n}は適当なタイミングでGCされるから、 HEAD@{n}をそんな用途に使う奴はいない
970 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:52:10.49 ID:zDjINlW+0.net] >>924 commit履歴がどこにあるか説明するのに使いたいから、git log --graph --branches --oneline してくれ
971 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:54:11.54 ID:zDjINlW+0.net] @はcommit履歴じゃなくて、reflogの履歴
972 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 22:57:39.34 ID:646uiMLL0.net] >>926 $ git log --graph --branches --oneline * 1a804d9 (HEAD -> master, develop) impl5 * ba4e962 impl4 * a32e11d impl3 * 8d9924f impl2 * 0f78740 impl1 * 47792a3 impl0 * b0325fc initial
973 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:01:41.48 ID:zDjINlW+0.net] @{n}はカレントブランチのreflog履歴になるはず reflog履歴はブランチ毎に存在するので master@{n}とdevelop@{n}は違うハッシュになってるはず git reflog masterとgit reflog developで比べてみればわかる
974 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:04:26.02 ID:646uiMLL0.net] >>917 ,926 ちな --no-ff 版、 今出すと余計に混乱するかもだが。 $ git log --graph --branches --oneline * a5aaf72 (HEAD -> master, develop) Merge branch 'feature5' into develop |\ | * e03bcd0 impl5 |/ * 324df68 Merge branch 'feature4' into develop |\ | * c2634c4 impl4 |/ * 68ed20a Merge branch 'feature3' into develop |\ | * 5e12b99 impl3 |/ * 608e5d7 Merge branch 'feature2' into develop |\ | * 4660e46 impl2 |/ * 3924eae Merge branch 'feature1' into develop |\ | * 138d83f impl1 |/ * 7db4424 Merge branch 'feature0' into develop |\ | * 8877414 impl0 |/ * ec041f9 initial
975 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:08:22.79 ID:646uiMLL0.net] >>929 $ git reflog master 1a804d9 (HEAD -> master, develop) master@{0}: merge develop: Fast-forward b0325fc master@{1
976 名前:}: commit (initial): initial $ git reflog develop 1a804d9 (HEAD -> master, develop) develop@{0}: merge feature5: Fast-forward ba4e962 develop@{1}: merge feature4: Fast-forward a32e11d develop@{2}: merge feature3: Fast-forward 8d9924f develop@{3}: merge feature2: Fast-forward 0f78740 develop@{4}: merge feature1: Fast-forward 47792a3 develop@{5}: merge feature0: Fast-forward b0325fc develop@{6}: branch: Created from master ってことは、commit履歴はreflogにしか無いって事か? ならbrahchを消すとreflogも消されてcommit履歴が消えるが、マジ? これだとbranchの復活は本質的に無理なことになってしまう。 (他branchに断片的には残ってるんだけどさ) [] [ここ壊れてます]
977 名前:デフォルトの名無しさん [2022/11/05(土) 23:09:25.37 ID:zDjINlW+0.net] >>928 impl5のコミットオブジェクトの hash = 1a804d9 impl5のコミットオブジェクトの中には親のコミットオブジェクトimpl4の hash = ba4e962 が格納されている impl4のコミットオブジェクトの hash = ba4e962 impl4のコミットオブジェクトの中には親のコミットオブジェクトimpl3の hash = a32e11d が格納されている impl3のコミットオブジェクトの hash = a32e11d impl3のコミットオブジェクトの中には親のコミットオブジェクトimpl2の hash = 8d9924f が格納されている impl2のコミットオブジェクトの hash = 8d9924f impl2のコミットオブジェクトの中には親のコミットオブジェクトimpl1の hash = 0f78740 が格納されている impl1のコミットオブジェクトの hash = 0f78740 impl1のコミットオブジェクトの中には親のコミットオブジェクトimpl0の hash = 47792a3 が格納されている impl0のコミットオブジェクトの hash = 47792a3 impl0のコミットオブジェクトの中には親のコミットオブジェクトinitialの hash = b0325fc が格納されている initialのコミットオブジェクトの hash = b0325fc initialのコミットオブジェクトはルートなので親のコミットオブジェクトが存在しない つまり impl5のコミットオブジェクトの hash = 1a804d9 からたどっていけば、コミット履歴が全部わかる 親が複数存在する場合には複数の親のhashを格納する
978 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:11:25.45 ID:zDjINlW+0.net] >>930 ¥で表示されるとちょっと見にくいが、慣れれば見やすい
979 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:14:09.84 ID:zDjINlW+0.net] >>931 逆だ。コミットのつながりはコミットオブジェクトの中にしかない >>932 みたいにね それを説明してるのが >>902
980 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:16:52.31 ID:zDjINlW+0.net] >>930 は最後のdevelopのマージが --no-ff になってないな 最後のも --no-ff にするともっと面白いぞ
981 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:18:09.46 ID:646uiMLL0.net] >>932 ごめん、それは分かってる。 それはグローバル履歴=gitオブジェクトを辿った履歴、だろ。 問題は、masterのcommitには b0325fc と 1a804d9 しかない、という情報が、 今のところ master の reflogにしか見あたらないんだよ。 だから、各branchを消したら、それ以前の gitオブジェクト は全部辿れるが、commit履歴は消失してしまう。 今のmasterみたいに、fast-forwardマージで中間をすっ飛ばしてきた、 という情報が無くなってしまうんだよ。 だから、branchを消す前の状態に完全には戻せない、という話。 だから、常識的に考えればもうちょっとましな何処かに保持してるはずなんだけど、無いんだ。
982 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:21:56.96 ID:646uiMLL0.net] >>935 ほい $ git log --graph --branches --oneline * 2fb59f1 (HEAD -> master) Merge branch 'develop' |\ | * 25e1b95 (develop) Merge branch 'feature5' into develop | |\ | | * 4b27393 impl5 | |/ | * 9bfb8cc Merge branch 'feature4' into develop | |\ | | * c2a5b7d impl4 | |/ | * 02d2308 Merge branch 'feature3' into develop | |\ | | * f6d1cf7 impl3 | |/ | * 81e18bb Merge branch 'feature2' into develop | |\ | | * 01c3871 impl2 | |/ | * 5b57f48 Merge branch 'feature1' into develop | |\ | | * 0fe34d2 impl1 | |/ | * 6272da6 Merge branch 'feature0' into develop | |\ |/ / | * fe1b132 impl0 |/ * 832f464 initial
983 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:23:27.84 ID:zDjINlW+0.net] >>936 FFマージしたらその情報は消滅するな --no-ff で全部マージすれば複数親のハッシュをもってるコミットオブジェクトの1番目だけたどればいける ^1 だけみていくね git log にはそれをやるオプションがあるはず >>930 をそのオプションで表示すればこんな風に表示されるはず $ git log --graph --branches --oneline --オプション忘れた探せ * a5aaf72 (HEAD -> master, develop) Merge branch 'feature5' into develop * 324df68 Merge branch 'feature4' into develop * 68ed20a Merge branch 'feature3' into develop * 608e5d7 Merge branch 'feature2' into develop * 3924eae Merge branch 'feature1' into develop * 7db4424 Merge branch 'feature0' into develop * ec041f9 initial
984 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:26:10.78 ID:zDjINlW+0.net] >>937 だとこう表示されるはず $ git log --graph --branches --oneline --オプション忘れた探せ * 2fb59f1 (HEAD -> master) Merge branch 'develop' * 832f464 initial
985 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:35:28.93 ID:646uiMLL0.net] >>938 $ git log --graph --branches --oneline --first-parent * a5aaf72 (HEAD -> master, develop) Merge branch 'feature5' into develop * 324df68 Merge branch 'feature4' into develop * 68ed20a Merge branch 'feature3' into develop * 608e5d7 Merge branch 'feature2' into develop * 3924eae Merge branch 'feature1' into develop * 7db4424 Merge branch 'feature0' into develop * ec041f9 initial >>939 $ git log --graph --branches --oneline --first-parent * 2fb59f1 (HEAD -> master) Merge branch 'develop' | * 25e1b95 (develop) Merge branch 'feature5' into develop | * 9bfb8cc Merge branch 'feature4' into develop | * 02d2308 Merge branch 'feature3' into develop | * 81e18bb Merge branch 'feature2' into develop | * 5b57f48 Merge branch 'feature1' into develop | * 6272da6 Merge branch 'feature0' into develop |/ * 832f464 initial
986 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:41:19.40 ID:zDjINlW+0.net] >>939 がそう表示されるのは、--no-ff マージの手順が何か普通とちがうからかもしれん >>939 みたいに表示させるマージの手順もあるはずだから工夫してみるんだな
987 名前:デフォルトの名無しさん mailto:sage [2022/11/05(土) 23:41:56.11 ID:646uiMLL0.net] >>938 なるほど了解した。 データ側に混ぜ込んでて、保持したければ --no-ff で使えってことか。 そもそも同じハッシュなら同じgitオブジェクトにリンクするようになってるのだし、 (つまり見た目が膨らんでるだけで実際の容量は
988 名前:大して食わない) --no-ff がデフォのほうがよかった気がするが。 まあとにかく了解した。長々とありがとう。 [] [ここ壊れてます]
989 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 00:38:34.83 ID:UPUgwCSv0.net] FFがデフォじゃなと使いにくい気がするのだがw
990 名前:デフォルトの名無しさん (ワッチョイ 617b-8+ss) mailto:sage [2022/11/06(日) 09:32:37.27 ID:OfQ8ymDc0.net] >>943 ffがデフォのメリットって何だ?特にないと思うが。見た目すっきり、か? ただまあ、デフォだし、サル先生他も特に何も言ってないので、ffでの運用が多数派なのだろう。 --no-ffはcommitオブジェクトが別に作られるだけで、 スナップショットに比べたらゴミなので全体としては大して増えない。 commit履歴はgitオブジェクトツリー内に混ぜ込まれ、完全に保持される。 ffの場合は、commit履歴情報はreflogにしか無いので、branchを削除したら基本的に失われる。 そしてreflogもgc対象なので、Linusはcommit履歴は基本的に保持する必要がないとの立場なのだろう。 また、branchを削除しろといいつつffなのは、その人達もcommit履歴は要らない、と考えていることになる。 ただこれは奇妙な実装だ。 カーナビを考えれば分かるが、当たり前だが地図情報とルート情報は別なのだ。混ぜ込むのはあり得ない。 commit履歴が要らないってのは、経路(線)は不問で、目的地(点)に着いてるかどうかだけだ、と言っているわけ。 それはバージョン管理の達人()にとっては、違うんだろ。バージョン管理は「線」であると! ただ、Linusも「点」の立場だね。まあプログラマ的にはこれで正しいんだよ。 コンピューターは今現在のソースコードしか見てなくて、どの経路を辿ったかなんて関係ない。 だからどういう紆余曲折(「線」)があったかではなく、結局は前回の「点」と今回の「点」のdiffだけが価値を持つ。 そしてLinusの個人的ツールであるGitも、この流れなわけだ。 とはいえ俺はルート情報はまた別に重要だと思うから、保持したい。 混ぜ込まれてる場合は後からbranchを追加することが絶対に出来ない。 まあ開発ツールとしては別経路から同じ点に到達しました!なんてのは現実的にあり得ないから、 偽造を防ぐ為にもこれでいいのかもしれんが、一般的に考えればこの実装は奇妙だ。 ちなみに一般文書、例えばEULA(EndUserLicenseAgreement)とかの隙を潰していくタイプの法務文書等は、 別経路だが最終到達時点は同じ、ということが普通にあり得るはず。 だからやっぱりGitはソースコード向けにしか出来てない、ということは認識しておくべきだろう。
991 名前:デフォルトの名無しさん (ワッチョイ 617b-8+ss) mailto:sage [2022/11/06(日) 09:32:57.06 ID:OfQ8ymDc0.net] あと、Gitのドキュメントは全般的によく出来ているが、branchは「線だ!」と言ってるのは不適切だ。 Gitのドキュメントは密結合状態、つまりGitをよく知ってる人向けに書かれているので、 同様に内部実装を見せる形で書くのが正しく、 つまり、「branchは『線』のように見せてますが、実は『点』です!」と言わないと誤解される。俺がそうだが。 これは解像度が統一されてないから起こった問題だ。 一般のマニュアルは疎結合状態、 つまりそのツールについて内部実装なんて全く知らないし知る由もない人向けに書かれるから、 『見た目』線であれば「線」とずっと言い張り、内部実装を曝露してはいけない。 この場合、あくまでユーザーから見たら常に「線」であり、内部がどうであれ「線」としてしか見えないから誤解を生む余地はない。 Gitの場合は内部も見せた上でドキュメントとして外面仕様も説明することになってて、 それが外面仕様なのか内部実装なのか、 またbranchのように外面仕様と内部実装が
992 名前:ルなってて隠蔽しきれてない場合とか、(--no-ffの有無で観測可能) それは正しく説明しなければならない。 密結合なら、上記の通り、「『線』として見せてますが実は『点』です!」と書くべきだ。 とはいえ全般的にドキュメントはしっかり書かれている。これ自体は素晴らしい。 ただ、そもそも仕様がグダグダ過ぎるし、 或いはユーザーにどこまで見せ、どこからは見せないのか、仕様を管理する感覚がまるでない。 おそらく上層部の連中に仕様管理の経験者がおらず、グダグダになってしまってる。 とはいえ、再度言うが、ドキュメントはよく書いてる方だよ。 [] [ここ壊れてます]
993 名前:デフォルトの名無しさん (ワッチョイ 617b-8+ss) mailto:sage [2022/11/06(日) 09:33:22.07 ID:OfQ8ymDc0.net] ただこれだと、branchを「線」として扱おうとしたら動作が不安定になるわけで、 おそらくfilter-branchが不安定なのはこの辺に起因してる。 そしてドキュメントの何処か(多分showかlog)に、 「これには実はpitfallがあって、マージに遭遇した場合に分岐するから云々」とかいう (当時の俺にとって)謎の記述が挿入されてたのも納得がいく。 commit履歴を保持してないから確定的動作が出来ないんだよ。 これははっきり言って仕様の欠陥で、commit履歴も完全に保持する仕様だったら自然と回避出来てた。 現仕様では、filter-branchの実装をいくら頑張ったところでどうにもならない。 代わりのfilter-repoも、動作は同様に糞だろうよ。安定して使えるものではないはず。 ここら辺はちょっと惜しいね。Gitが素晴らしいのは、「伽藍とバザール」での > 9. 賢いデータ構造と間抜けなコードのほうが、その逆よりずっとまし。 を体現してるからであって、つまり根っこがしっかりしてるから上部は雑草でも問題なかったんだが、 この点は根っこが駄目だから、上部(filter-branch)が機能しない。 ここら辺はちゃんと仕様の大切さを理解してる奴が仕切らないと駄目なのだが、 おそらくGitの連中も、仕様を捏ねてる連中は手を動かしてないと見なし、嫌ってるのだろう。 だから仕様を捏ねることすらしてない。 ただ、それは結局は遠回りでしかない。 今のGitだと、filter-branchも、filter-repoも、その次に出てくる何かも、まともに動作するはずがない。 駄目な仕様だと実装をいくら頑張ってもどうにもならない、と知ってる奴が、ちゃんと仕切らないといけないんだけどね。 ただこれは、それを知らない奴にとってはムカつく奴でしかなく、そいつらを排除した結果、Gitは暴走中、というわけだ。 Linusがcommit履歴も大切に考える奴だったら違ってたが、惜しいね。
994 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 10:57:26.83 ID:FBkt/oHG0.net] 長々と無駄な長文と大量投稿でスレを穢すんじゃねー。 単に既存のバージョン管理ツールと、git の考え方の違いが理解できてないだけじゃねーか。 ・git はパッチ管理ツール、作業履歴管理ツールじゃない。 ・ソフトウェアはパッチとパッチを当てる順番で構成されている。 1000回唱えろ。この思想が気に要らなければそもそも git 使うな。
995 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 10:59:15.02 ID:OfQ8ymDc0.net] >>943 と思ったが、ffじゃないとhashが違うからウザいな。別物扱いだから、一々確認いるし。 オブジェクトツリーはffの方がいい。 ただこれだとcommit履歴が無く、俺的にはまずいので、別に保存したい。 ソースと混ざるとウザイので、可能なら分離したい。 ドキュメントによるとマルチルートも出来るらしいが、これはどうやってやるんだ? > Each project must have at least one root. A project can also have multiple roots, though that isn’t common (or necessarily a good idea).
996 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 1
] [ここ壊れてます]
997 名前:1:04:28.51 ID:OfQ8ymDc0.net mailto: >>947 > ・git はパッチ管理ツール、作業履歴管理ツールじゃない。 ああ非常に納得出来る。Gitはmerge特化型だ。 確かにそれを日々の業務(非merge)に使おう、というのがフィットしないんだろうよ。 しかし世の中の一般人のGitの使い方は後者だろ。 [] [ここ壊れてます]
998 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 11:33:11.11 ID:sj15aRfA0.net] ということにしたいのですね。
999 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 11:46:16.67 ID:FBkt/oHG0.net] >>949 お前の狭い世間なんて知るか お前は話題の電動ドリル買ってきて釘打つのに不便ガンガンってやりながら文句言ってるのと同じレベル そもそもマニュアルもちゃんと読めてないだろ。root と route を間違える英語レベル 背伸びして git 学ぶ前に高校に進学して英語学んだ方が近道だぞ
1000 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 11:51:22.62 ID:OfQ8ymDc0.net] >>950 いや事実だよ。 Linusは確かにmergeしかしないんだろうけど。 だけどその、mergeするパッチを書く奴は、それを一発で書けたわけがないんだ。 何日もかけて、何回も直して、そこに到達してる。 この過程のサポートがGitにはない。 別branchで作業してもmerge時にhash値が組み込まれるから、 確かに俺がやろうとしてる「日々の進捗」をcommitされると除去出来ずウザイんだろうさ。 しかしパッチのコードは必ずGit-repoをクローンしてから出発するのだから、 Gitにこのサポートが無く、パッチを当てる人はいきなり完成したパッチを書け!勿論でバッグ済みだぞ!みたいな構造なのがおかしい。 すくなくとも、捨てbranch機能があって、そこで日々の作業を終わらせた結果、 mergeするときには本ブランチでその結果がいきなり生えたように見せる機能 (捨てbranchとmergeしても中身の結果だけもらって親にはしない) みたいな機能が必要なんだよ。 ただまあ、これは今でも手動だと出来た気はするが。 だからまあ、確かにパッチ管理ツールであって、 ソフトウェア開発時のバージョン管理ツールではないんだろうさ。 だけど、今、全世界のGitで、mergeコミットと通常のcommit、どっちが多いか考えれば、自明だろ。 一つのパッチを作るまでにも何回もcommitが必要なのだから。
1001 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:07:06.70 ID:FBkt/oHG0.net] >>952 アホか。共同開発が全く理解できてねーじゃねーか。 お前の試行錯誤の記録を push しようとしてんじゃねーよ。 手元で試行錯誤して実装できたら、それを元に綺麗なパッチに書き直す作業するんだよ。 そして完成した綺麗なパッチ群のみを共有リポジトリに公開するんだよ。
1002 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:19:51.48 ID:OfQ8ymDc0.net] >>948 一応見つけた。 git worktree らしい。 複数のbranchを同時に開く機能で、DBで言うATTACHっぽい。
1003 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:20:57.36 ID:JyiC8cnE0.net] 試行錯誤はすべて記録に残すべき →じゃあテキストエディタで保存するたびに記録するべきっていうのか? こういう話なので無視すんなよ?w
1004 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:21:44.03 ID:JyiC8cnE0.net] バージョン管理はソースコードの変更履歴を残すのであって 作業履歴を残すものじゃないっていうのが分かってなさすぎ
1005 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:30:26.14 ID:OfQ8ymDc0.net] >>953 それはいいんだけどさ、その肝心のパッチを書く人へのサポートがまるでないだろ。 出発点がgit clone で、その上で作業して、終われば pull request する前提なのにさ。 そしてOSSではなく一般企業等で使ってる奴は、 当たり前だが日々の作業のバックアップや巻き戻し出来るシステムが必要で、そう使ってる。 だから、Gitが難しすぎるというのは、目的外使用だから意味が分かりにくい、というのはあるね。 Indexもマージの時には
1006 名前:った方が便利なんだろうしさ。(ただのcommitには邪魔でしかない) しかし確かに、Linusに言わせれば、全く問題ないんだろうさ。彼はmergeしかしないしね。 そして他のVCSよりまし、という理由でGitを使う奴は、混乱するんだろうさ。VCSと聞いてきたのだからね。 確かにパッチ管理システムだよGitは。ソースコード生成時のサポートシステムではない。 [] [ここ壊れてます]
1007 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:32:16.81 ID:OfQ8ymDc0.net] >>955 > こういう話なので無視すんなよ?w 無視する/しない以前に、何が言いたいのか分からないから反応しようがないんだよ。
1008 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:42:58.45 ID:sj15aRfA0.net] >>957 > それはいいんだけどさ、その肝心のパッチを書く人へのサポートがまるでないだろ。 rebase あるよ。 元のローカルブランチを消さないでおけば記録もぜんぶ残るし。よかったね。
1009 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:43:13.14 ID:FBkt/oHG0.net] >>957 git ほどパッチを書くのに向いてるツールは他にないぞ。 index 無しでどうやってパッチの分割とかするんだよ?
1010 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 12:53:16.71 ID:OfQ8ymDc0.net] >>960 最初から一つずつ書けば分割の必要ないし、 Index無くてもdiffの出力を絞ってpatchに食わせれば普通に分割出来るだろ。
1011 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 13:02:38.08 ID:JyiC8cnE0.net] >>958 書いてあるとおりじゃん。 試行錯誤の履歴を全部取れというなら、テキストエディタで保存するごとに gitでコミットしなければならないはずだ お前の主張はそういうことなんだから、それをちゃんとやれってこと
1012 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 13:04:02.78 ID:JyiC8cnE0.net] >>961 コミットがメチャクチャなのに、どうやってdiffとってパッチできると思ってるの? そのdiffには関係がない修正が大量に入ってるだろ
1013 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 13:37:22.28 ID:FBkt/oHG0.net] >>961 なんも分かってないことを露呈しているな。 A,B,C,D,Eとコミットした後に Cはc1,c2,c3に分割すべきで、BとEは一つにすべきで、Aは不要だったと気づいたらどうすんの? こういうのがお手軽にできて綺麗なパッチ群に整理できるのがパッチ管理ツールである git の利点なんだ。 そういうのやったことないだろ?
1014 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 13:39:49.06 ID:az1H5JFk0.net] >>954 脊髄反射で理解したつもりになって書いてるだろ正解率が著しく低い git worktreeは一つのリポジトリに追加のワークツリーを用意して、異なるブランチをそれぞれ別のワークツリーにcheckoutできるようにする機能 DBのATTACHとは全然違う マルチルートは普通に作ったリポジトリをfetchやpushで合成してmerge --allow-unrelated-historiesすればできる でもこれはかなり特殊な用途に使うもので普段使いするようなものではない
1015 名前:デフォルトの名無しさん (ワッチョイ 617b-8+ss) mailto:sage [2022/11/06(日) 13:46:46.96 ID:OfQ8ymDc0.net] >>965 実は今し方ドキュメント読んで、これは違うと書こうとしたところだった。 wor,ktreeはstashの代わりで、同時作業用ではないね。 > マルチルートは普通に作ったリポジトリをfetchやpushで合成して ああこれは俺の要求とは違うね。 まあ、もう地味に.git/.xxx/に転がそうと思案中。
1016 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 13:57:15.91 ID:OfQ8ymDc0.net] >>963 ,964 お前らunixコマンドの使い方知らないだろ。 patch/merge/diff3はgit以前からあるコマンドで、多分初期Gitはそのまま使ってたと思うが。 具体的な使い方は以下。 今、元 fileA に対して、変更後 fileC になってるが、実は中間の fileB が欲しかったとする。このとき、 cp fileA fileB diff fileA fileC | less -N; // ここで該当行を確認する。例えば10-20行目なら、 diff fileA fileC | sed -n '10,20 p' | patch fileB これでfileBが得られるんだよ。これ以上色々複雑な時用に diff3 とか merge もある。 だからパッチの分割はすぐ出来るんだよ。
1017 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 14:05:27.55 ID:az1H5JFk0.net] >>967 そういう作業を必要で
1018 名前:無くすためにgitが生まれた patchの提出をgitの分散リポジトリ上で可能とするためにね 963とか964が行ってるpatchというのは、いわゆるpatchファイルのことではなく、ブランチ上に存在する差分の事 そのpatchを整理するのに index や rebase がある [] [ここ壊れてます]
1019 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 14:19:49.14 ID:FBkt/oHG0.net] もしかして、もしかすると、git では「パッチ=コミット」っていうことすら理解できてないのだろうか。 まさかそんな人はいないよね。単に言動が変な人なだけだよね。
1020 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 14:25:32.34 ID:OfQ8ymDc0.net] >>968 知ってるよ。 ただまあ、確かにパッチ管理ツールだ。 プログラマはこれをソースコード管理ツールとして使おうとするから問題なのだろう。 バックアップが取れて、履歴が戻れれば何でもいいんだが、mergeも出来るから便利だからね。 なお俺は > ブランチ上に存在する差分の事 も所詮はdiffだ、という立場だよ。だから元のunixコマンドで何とでもなるし、 それをシェルスクリプトで集大成したのが初期Gitだろ。
1021 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 14:31:58.60 ID:FBkt/oHG0.net] >>970 ちがうぞ。最初からパッチ管理ツールとして設計されるぞ。 そしてパッチ管理ツールなんだから、パッチの出力機能さえあれば良いんだぞ。 それ以外の差分が欲しかったら別の外部ツール使えば良いんだぞ。それこそ基本だろ
1022 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 14:33:28.64 ID:OfQ8ymDc0.net] >>969 各commmit「点」でdiff取ったときに落ちる情報って何? ああcommitメッセージか?そんなのは知らんし要らんよ、って立場。 つか、commitメッセージガーなんて言い訳にならないから、 どのみちソースコードを確認するしかないんだよ。 commitメッセージはその手がかりとラベルに過ぎない。これが俺、というか多分普通のプログラマの立場。 お前らはcommitメッセージが間違ってたら、そいつに責任を負わせられるんだろうさ。 ソースコード読めないからね。 ソースコード読める奴ならこんな言い訳効かないんだよ、何でお前が上にいるんだ!監督する為だろ!になる。 さすがに素通しはヤバい。 そしてどう見てもヤバいパッチを素通ししてるから、なんじゃあこりゃあ?ってなってる。
1023 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 14:36:33.55 ID:OfQ8ymDc0.net] >>971 ああそれが diff のデフォルト出力をさせない理由だな。 651から一周回ったが、なるほど色々状況は理解出来たよ。賛同はしないが。
1024 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 14:45:12.77 ID:FBkt/oHG0.net] >>972 だからお前の考えてるような作業履歴管理ツールじゃないんだから、あきらめて他所へ行け。 gitはパッチ管理ツール。そしてパッチは何時、誰が、何のために作成したかが重要情報なんだよ。それを管理してるんだよ。 ソースコードの保管するツールじゃねーぞ。
1025 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 14:49:22.34 ID:OfQ8ymDc0.net] >>974 そこは違うんだな。 みんな結局自分でやるのも作るのも面倒だから、既に動いてるツールを使ってるだけだよ。 Gitの機能のサブセットで十分にカバー出来るのなら、Git使えばいいだけ。
1026 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 14:56:19.71 ID:OfQ8ymDc0.net] >>974 だからな、前言ったように、ブッ込んでおけば後で取り出せるバケツでしかないんだよ。 そのバケツにゴテゴテ付いてるから難しそうだが、要らない機能は使わなければいいだけ。 ただ、履歴保持の範囲を知らずに使って、実は記録されていませんでは困るから、使う前に調べてる。
1027 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 15:45:34.08 ID:o7v4FvnP0.net] https://www.praha-inc.com/lab/posts/commit-message そもそもコミットメッセージは何のためにあるのでしょうか? コミットログのうちコードの変更履歴には「コードをどのように変更したか」という情報が含まれていますが、「コードを何故変更したのか」という情報はコミットメッセージを読まないと分かりません。機能追加、バグ修正、パフォーマンスのためなど、変更した理由は様々なものが考えられます。 もちろんコードを変更した本人に聞けば変更した意図はわかると思いますが、変更した本人にいつ
1028 名前:ナも聞ける状況であるとは限りません。 「何故コードを変更したのか」という情報が欲しい時のためにコミットメッセージが存在します。 加えて、コミットメッセージは基本的に他人が読むものです。 他人というと同僚やコントリビューターなどが挙げられると思いますが、この「他人」には未来の自分も含んでいます。自分が書いたコミットメッセージを数ヶ月先の自分が読む場合、過去の自分のコミットメッセージを未来の自分が読むことになります。 つまり、コミットメッセージは自分以外の人のために存在するのです。 [] [ここ壊れてます]
1029 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 15:52:02.65 ID:az1H5JFk0.net] まあこいつは分散バージョン管理の難しさを理解できていない 一人でしかプログラム組んだことがないのだろう gitのややこしいと感じる仕様のほとんどは分散リポジトリ管理に起因していて、分散リポジトリ管理の問題をできるだけ明示的にシンプルに解決しようという意図で設計されている
1030 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 15:55:03.47 ID:JyiC8cnE0.net] ほんとなぁ、POSIX原理主義だからユニケージだかUSP研究所だかしらんが 例のあいつも、バージョン管理のツールを、バックアップツールとしてしか考えてねぇ だからとりあえずファイルを入れておけば差分はdiffで見れるだろとか 訳のわからんことを言い出す ある時点とある時点の差を見たいんじゃねーんだよ ある修正にどのような差分があるかを記録=コミットしたいわけで その記録なしに差分だけみれても役に立たないっつーの そこが根本的に違うというか、バージョン管理の役目がわかってない
1031 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 16:10:07.15 ID:az1H5JFk0.net] 「ブッ込んでおけば後で取り出せるバケツ」など言っているが、 必要とされていたのは内容を同期できる複数のバケツで、 なおかつバケツ同士が常にオンラインで通信しているわけではない そういう問題に取り組んだ結果だ
1032 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 16:12:28.94 ID:az1H5JFk0.net] そういう魔法のバケツを生み出すために、ただのバケツならできることがgitでは制限されていたりもする ユーザから見て不自由のない完全な魔法のバケツを生み出そうとしたプロジェクトは複雑すぎてことごとく失敗してきた
1033 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 16:14:37.71 ID:JyiC8cnE0.net] バケツの中に入っている袋詰めの塩や砂糖を、一つづつ取り出したいのであって バケツの中に全部入ってるから、遠心分離機でも使って 取り出せばいいだろうじゃないんだよなw
1034 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 16:36:01.68 ID:az1H5JFk0.net] 前スレは消費に1年半かかってるのに、このスレは半年ぐらいで終わりだな 次スレ立ててみるけど失敗したらゴメン
1035 名前:デフォルトの名無しさん [2022/11/06(日) 16:41:37.94 ID:az1H5JFk0.net] 次スレ Git 19 mevius.5ch.net/test/read.cgi/tech/1667720427/
1036 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:18:45.16 ID:OfQ8ymDc0.net] 相変わらずお前ら盛大に勘違いしてるが、とりあえず、 × Gitはパッチ管理ツールである ○ Gitはパッチ適用ツールである ○ Gitはパッチ記録ツールである としよう。管理は出来てない。何を管理すべきか分かってないから。 commitメッセージなんてただのラベルに過ぎない。
1037 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:19:20.86 ID:OfQ8ymDc0.net] 例えば今回俺が送った再現コード、あれはどこに配置されるのだ? >>977 の通り、「何故この変更を行ったのか」の完全情報がそこにある。 まさか捨てたりしないよな? バグパッチに於いて、重要な物から順に、 1. そのバグを修正するコード 2. そのバグを再現するコード : 10000, commitメッセージ だ。どんなに丁寧にcommitメッセージを書いたところで、「それ、あなたの感想ですよね?」でしかない。 肝心なところを書き間違ってるかもしれないし、信用も出来ない。 この点、再現コードは情報が完全で、全ての情報を過不足無く含んでいて、曖昧さもない。 だからcommitメッセージの情報価値なんて再現コードと比べたらゴミ以下で、 再現コードに対してのリンクで十分なんだよ。つまり、 ○年○月○日に○○から送られてきた○○のバグ(メモリリーク
1038 名前:)を修正する。 詳細はXXXX で、XXXXのところ、Git流ならSHA1ハッシュで、 その中に再現コードと詳細、今回なら全員のメールの全文を入れておくのがバグ管理だよ。 これで、「何故この変更を行ったのか」の完全情報が保たれる。 そして、再現コードは今後ずっとregressionテストに使う資産にする。 そうすれば、少なくとも過去と同じバグはリリース前に見つかる。 [] [ここ壊れてます]
1039 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:20:02.27 ID:OfQ8ymDc0.net] こうなってないだろ。一回パッチ当てて動きました!満足です!じゃないんだよ。 繰り返すが、commitメッセジーをいくら丁寧に書いても意味無い。 再現コードに比べたら本当にゴミ以下。 逆に、再現コードに辿り着けるのなら、後はラベルが正しく付いてれば十分なんだ。 それ以上の情報は、commitメッセージのテキストではなく、 再現コードとバグ報告=完全情報を見た方がいいから。 で、GitHubはまあこれに近いよ。 そもそもバグ報告自体Webだし、少なくともIssueからバグの完全情報に当たれる。 Gitはどうなの? 今回の俺と同様の、過去のバグ報告の再現コードを生かせてるのか? ならそういうディレクトリがあって、 bug_patches/XXXXXなハッシュが名前になってるディレクトリに再現コードその他がブチ込まれてて、 出荷前(というのもおかしいが)には全部一通り通せ、となってるはずだけど、 どう見てもそうなってないでしょ。 パッチ当てたから満足です、で終わってる。 こんなのでバグが収束するはずがない。 同じ連中が書いてるのだから、放置したら同レベルのバグを繰り返す。 だから本来は何故こんなバグが発生したのか?からコード構造を見直して、 そもそもそうならないようにするのだけど、そういう学びもないし、(だから基本すら出来てない) regressionテストのネタにもしないのだから、今後ともバグだらけだよ。 ああ、Gitの達人揃いだから、「記録」は出来てるのだろうよ。だけどそれは「管理」ではない。 ただ、これがバザール流だ!と来るなら、はーそうですかー(棒)だよ。 目も手も数が違うし、俺には何が最適か分からんし。
1040 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:20:37.38 ID:OfQ8ymDc0.net] ちなみにchromeの連中は気持ち悪いほどregressionテストしてるぞ。 本来は、ああするべきなんだろうよ。 regressionテスト自体はタダ(スクリプトで自動実行)だからね。 バグ「管理」というのなら、原因を究明して、少なくとも同じバグが出ないようにしないといけない。 それはcommitメッセージをいくら丁寧に詳細に書いても、達成出来るものではない。 分かりやすく言うとな、「体調管理」と言われれば、少なくとも同じ原因で風邪を引かないようにするだろ。 なら、「バグ管理」なら、最低限レビューしてregressionテストしないと駄目だよ。 それはcommitメッセージ云々では出来ない。だからパッチ「適用」「記録」ツール。
1041 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:24:47.08 ID:VM2X6i580.net] >>985 > commitメッセージなんてただのラベルに過ぎない。 その言葉からお前がわかってないのが明らかなんだけど?
1042 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:26:23.98 ID:VM2X6i580.net] >>988 うん。だからそのchromeはここまで徹底してコミットを管理してる それを見習え https://github.com/chromium/chromium/commits/main
1043 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:27:42.33 ID:VM2X6i580.net] regressionする際にもコミットを管理するのは重要で コミット単位で戻してテストする 動かないコードをコミットすることはない お前みたいにテキストエディタで修正するたびにコミットとかしない
1044 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:28:57.43 ID:VM2X6i580.net] なんでchromeのコミットメッセージが こんなに詳しく書かれているのか、その理由を考えたら?
1045 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:32:31.47 ID:VM2X6i580.net] バージョン管理はソースコードの変更履歴を管理するものなので そこにバグ管理という別の概念を持ち出すのも頭悪い バグ管理は別のツールでやれ
1046 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 19:55:47.23 ID:sj15aRfA0.net] >>986 > 例えば今回俺が送った再現コード、あれはどこに配置されるのだ? 修正コミットのログから URL で辿れるようになるかな。 https://public-inbox.org/git/20221102220142.574890-2-szeder.dev@gmail.com/
1047 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 20:08:52.18 ID:OfQ8ymDc0.net] ");
//]]>-->1048 名前:4" rel="noopener noreferrer" target="_blank" class="reply_link">>>994 それは鯖に置いてるだけだろ。まあそれはそれで十分で、(この意味では最初のMLでも十分) 問題は、 1. .git上、つまりソースコード改変ツリーから簡単に辿れるよう、 commitメッセージにそのリンクは落とされている(落とされる予定)なのか? そうじゃないと>>977 が達成出来ないだろ。 2. そしてregressionテストパターンとして登録され、今後ずっと実行されるのか? 3. そもそも根本の原因はソースコードの程度が酷いことであり、レビューしろよマジで だよ。 レイヤーの考え方がない奴等ばかりなので通じないかもしれないが、 gitは適用/記録という下層レイヤーであって、バグ/パッチ「管理」は上位レイヤーの戦略だから、 gitで「管理」出来ると思ってるのが間違いなんだよ。記録は出来るが、管理は出来ない。 gitで出来るのは上の1だけだね。 だからcommitメッセージは勿論丁寧に書くべきなんだけど、丁寧に書けばいいわけでもないんだ。 それでバグやパッチが減るわけでもないから。 目的と手段の混同はどの界隈でもあるけど、ここの連中も大概だよ。 [] [ここ壊れてます]
1049 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 20:11:50.13 ID:OfQ8ymDc0.net] >>994 と思ったがすまん、見落とした。 > 修正コミットのログ つまりこれ、コミットメッセージそのものなのか? ちょっと確認したいんだが、どこ見ればいいんだ?GitのGitHubから?
1050 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 20:22:10.42 ID:sj15aRfA0.net] >>996 そう。コミットメッセージを含めてML上でレビュー中。まだ本体リポジトリには入ってない。 挙がってるレビューコメントを受けてそのうち第2弾が投稿されて取り込まれるんじゃないかな。 君もソースコードの質が気になるなら修正を送ってくれていいんだよ。さぁさぁ。
1051 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 20:38:50.28 ID:OfQ8ymDc0.net] >>997 つまりあれがそのままに近い状態で入るのか? まあそれは見守るとして、本来はちゃんとラベルを付け替えないとまずい。 俺が送った段階では高い確率で「free忘れによるメモリリーク」と推定出来たが、 断定は出来なかったので、単に「メモリ食いすぎ」としてる。 だから、メモリリークだと「断定」出来た人が概略を書き直さないといけない。 が、まあ、これは多分為されるだろう。見守るよ。 > 君もソースコードの質が気になるなら修正を送ってくれていいんだよ。さぁさぁ。 これは本質的に無理だ。多分俺、というか、いわゆるCコードを拒絶すると思うよ。 間違いなく、連中は自己の能力に自信持ってて、傲慢で、言うこと聞かない連中だ。 世の中のCコードなんて、基本通りやってる物でほぼ全部だから、見たこと無いわけが無い。 それが何故そうなってるか理解出来ない、 つまり、王道を王道と理解出来ない奴等だからデタラメやってるわけで、 言うこと聞く連中ならそうはならない。 通常だと、やらせるだけやらせて、でもどうにももうダメポなときに、 そもそもお前のコードがおかしい、ここをこう直せ、なら簡単にメモリリークは抑えられる、とすると効くのだろうけど、 問題はバザールで、無限にモグラ叩き出来てしまって、実際にそれでやろうとしてることだよ。 マジかー、って、ちょっと驚きだが、まあ観戦だ。 ああちなみに、俺以外の誰でも、まともなC書ける奴なら、ちょっと引くコードだよ。 だからそこら辺の奴等に書かせても、もっとましなコードになるよ。そして俺もその程度だし。 というか単発のコードでそんなに技量の差なんて出ないし。
1052 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 20:40:54.42 ID:VM2X6i580.net] >>998 お前がちゃんとやれって言われるだけだよ お前雑なんだよ。無能なのに張り切るな。空回りしてるぞw
1053 名前:デフォルトの名無しさん mailto:sage [2022/11/06(日) 20:46:49.73 ID:wlljBD17M.net] 質問いいすか?
1054 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 197日 17時間 21分 4秒
1055 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています