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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
878
(1): (ワッチョイ 6914-pSqO) 2022/11/05(土)18:18 ID:5Oe/8sYX0(7/24) AAS
>>876
ようやく理解したか。
だからお前がやってるのはただのバックアップを取ってるだけだっていってんだよ
バージョン管理というのは何をどう変えたかという変化を記録するものだ
スナップショットじゃねーんだよ、あーほ
879: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:19 ID:5Oe/8sYX0(8/24) AAS
>>876
bbbの話がないのだから、
書き間違えなのか全く区別がつかない
バグコミットメッセージだな
880
(1): (ワッチョイ 6914-pSqO) 2022/11/05(土)18:21 ID:5Oe/8sYX0(9/24) AAS
>>873
> ただそれ以前に、俺は既に言ったとおり「記録されてないほうが問題」とするので、

だからお前のテキストエディタでの変更内容を全部記録するって言ってるんだろ?
ファイルを保存するたびにコミットするんだろお前は?

バージョン管理で記録するのはソースコードの修正履歴であって
お前個人の作業履歴じゃねーんだよ
使い物にならないゴミコミットを作るな
881
(1): (ワッチョイ 617b-8+ss) 2022/11/05(土)18:26 ID:646uiMLL0(13/38) AAS
>>878
ああ履歴についての認識が違うんだな。了解した。

履歴は、
俺: スナップショット=「点」の並び
君: 変更した線の並びで、それはcommitメッセージに現れる。

それだと、commitメッセージが間違ってる場合はどうしようもなくなるだろ。
あくまでソースコードが重要で、どこをどう変えたかはdiff取れば済むだけの話、
commitメッセージなんて目安に過ぎないんだよ。

Gitもこちらの立場に近く、VCSとしては珍しく(と聞いているが俺はそこまで詳しくないが)
差分ではなく本体を記録するだろ。
882
(1): (ワッチョイ 6914-pSqO) 2022/11/05(土)18:31 ID:5Oe/8sYX0(10/24) AAS
>>881
> 履歴は、
> 俺: スナップショット=「点」の並び

だから、それはバックアップで言うって最初から言ってるだろ
お前が完全に間違ってるんだよ

> それだと、commitメッセージが間違ってる場合はどうしようもなくなるだろ。
修正しろよ。それが出来るように作られているだろ

> commitメッセージなんて目安に過ぎないんだよ。
はっw バージョン管理の素人が。
コミットメッセージの重要性を知らない時点で終わってるよ
883
(2): (ワッチョイ 617b-8+ss) 2022/11/05(土)18:32 ID:646uiMLL0(14/38) AAS
>>880
> ファイルを保存するたびにコミットするんだろお前は?
そこまではしないが、1日10回とか平気ですることもあるし、それが問題だとも思わない。
この辺はポリシーだし、好きなようにすればいいと思うがね。

間違いなく言えるのは、俺は美しいソースコードを目指しているのであって、
美しいコミット履歴を目指しているわけではないんだよ。
そしてコミット履歴が過剰なら、落とせばいいだけだろ、という話。
無い履歴からは生成することは不可能なのだから、大きすぎる粒度より、小さすぎる粒度の方がいいに決まってる。
所詮commitメッセージなんて当てにならないし、diffが取れれば全く問題ない。
884
(1): (ワッチョイ 6914-pSqO) 2022/11/05(土)18:32 ID:5Oe/8sYX0(11/24) AAS
> Gitもこちらの立場に近く、VCSとしては珍しく(と聞いているが俺はそこまで詳しくないが)
> 差分ではなく本体を記録するだろ。

だから最初からバージョン管理は差分を記録するものであり
gitの優れた点が、発想の転換で
本体を記録することで差分を表現することにした点なんだろ

実装の話とごっちゃにするな
そういうところが技術的に未熟なんだよ
885: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:33 ID:5Oe/8sYX0(12/24) AAS
>>883
> そこまではしないが、1日10回とか平気ですることもあるし、それが問題だとも思わない。
そりゃお前が素人だから問題であることに気づいてないだけ
誰もやってないからね

> この辺はポリシーだし、好きなようにすればいいと思うがね。
お前が未熟だから反論できずにポリシーってことにしようとしてる
886
(1): (ワッチョイ 09e4-chQ5) 2022/11/05(土)18:33 ID:zDjINlW+0(6/26) AAS
>>877
分散バージョン管理ではですね、リポジトリのコピーがばらばらに複数存在することが前提なので、
あるひとつのリポジトリのコミット履歴が A<-B<-C で、他のリポジトリではこれが A<-C になっているという状況は不味いんですよ
なのでGitではそれができないようにデータ構造が設計されています
887: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:34 ID:5Oe/8sYX0(13/24) AAS
> 間違いなく言えるのは、俺は美しいソースコードを目指しているのであって、
> 美しいコミット履歴を目指しているわけではないんだよ。

コミット履歴は「使うもの」だって分かってないようだな
一部のコミットだけ抜き取って
他のブランチに組み込む
使うものだ

お前はただ見れればいいと思ってる
バージョン管理を理解してない
888: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:35 ID:5Oe/8sYX0(14/24) AAS
>>883
> 所詮commitメッセージなんて当てにならないし、diffが取れれば全く問題ない。

お前が作るコミットがクソだから、使いものにならなくなっているだけだなw
889
(1): (ワッチョイ 617b-8+ss) 2022/11/05(土)18:39 ID:646uiMLL0(15/38) AAS
>>882
まあ君と仕事することは無さそうだから別に問題ないけど、

> 修正しろよ。それが出来るように作られているだろ
コミットメッセージをいくら修正したところでそもそも意味無いんだよ。
管理してるのはメッセージじゃなくてソースコードなんだから。
それで、重要なコメントはソースコード上に書いてるから、diff取れれば十分なんだよ。
コミットメッセージは、あくまでGit上から探し出すラベルでしかなくて、何をやったかはdiffで見るし、それ以外にないよ。

> はっw バージョン管理の素人が。
> コミットメッセージの重要性を知らない時点で終わってるよ
まあ俺はGitの達人になりたいわけでもないんで、これで問題ないよ。
890: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:40 ID:5Oe/8sYX0(15/24) AAS
> コミットメッセージをいくら修正したところでそもそも意味無いんだよ。
それはお前だけの感想ですねw
891: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:41 ID:5Oe/8sYX0(16/24) AAS
> まあ俺はGitの達人になりたいわけでもないんで、これで問題ないよ。
バージョン管理の素人だって言ってる
お前、他の人と一緒に仕事ができないよw
892: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:41 ID:5Oe/8sYX0(17/24) AAS
> コミットメッセージは、あくまでGit上から探し出すラベルでしかなくて、何をやったかはdiffで見るし、それ以外にないよ。

途中を抜いといて、何をやったかなんてわかるわけ無いだろwww
893: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:43 ID:5Oe/8sYX0(18/24) AAS
>>889
こうやってコミット履歴をちゃんと見れて
なんの変更をしたのかわかるようになるまで頑張れよ
外部リンク:github.com

お前のコミットは汚すぎて
使い物にならんのだわ
894: (ワッチョイ 617b-8+ss) 2022/11/05(土)18:44 ID:646uiMLL0(16/38) AAS
>>884
> gitの優れた点が、発想の転換で
> 本体を記録することで差分を表現することにした点なんだろ
これは違う。
というかね、どっちを記録したところで、正常に動いていればどのみち任意の履歴を取り出せるから関係ないんだ。
ただ、ファイルシステム等がぶっ壊れて、断片的にしか取り出せなくなったときに、Gitみたいに本体を記録してる方が断然強い。

だから基本は「一番大事なもの」で記録するようにしなければいけない、という観点だったのだけど、
まあこれはフォールトトレラントにしろという話で、ちょっと蛇足ではあったね。
あまり関係ないからこの話は終わりで。
895: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:45 ID:5Oe/8sYX0(19/24) AAS
> これは違う。
だーかーら、素人のお前の意見なんか聞いてない
896: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:50 ID:5Oe/8sYX0(20/24) AAS
> ただ、ファイルシステム等がぶっ壊れて、断片的にしか取り出せなくなったときに、

gitは速度のためにスナップショットにしてると書いています
外部リンク:git-scm.com
897: (ワッチョイ 6914-pSqO) 2022/11/05(土)18:53 ID:5Oe/8sYX0(21/24) AAS
外部リンク:www.techpit.jp

なぜスナップショットとして記録するのか
スナップショットとして記録することで、複数人で開発する時のスピードを上げることができます。
詳しくは後ほど解説しますが、複数人での開発の際、並行して開発できるよう、
Gitではブランチというものを切って、バージョンを枝分かれさせて開発していきます。
このブランチでバージョンを枝分かれさせる際や、ブランチを統合(マージ)する際にスナップショットだと非常に作業が速くできます。

Gitがデータを差分というかたちで持っていると、ブランチを切ってマージする時に差分をいちいち計算しなければなりません。
しかしスナップショットで保存しておけば、差分の計算をしなくて済む分、とても速くブランチを切ったりマージできるようになります。

ちなみに、Git以前のバージョン管理ツールの多くは差分としてデータを保存していて、ブランチを切るのに大変時間がかかっていました。
大規模なプロジェクトになると数十秒かかったりすることもありました。
Gitだとこの作業が一瞬でできます。こういった事情があって、Linuxの作者のリーナス・トーバルズは
当時、大規模開発であったLinuxカーネル開発のバージョン管理システムを自作しました。これがGitのスタートです。
898
(3): (ワッチョイ 617b-8+ss) 2022/11/05(土)18:56 ID:646uiMLL0(17/38) AAS
>>886
ああなるほど、ブロックチェーンよろしく親のhashデータも自分のhashに入ってるのか。
しかしそれは、改竄がばれるだけで、リンクを繋ぎ直すことが出来ないわけではないね。

というかね、それは本体ツリーの話で、
余分なcommitはrepoから消せ!とする君らにとっては問題だが、
俺みたいに、スカスカのINDEXでbranchを再構成するのはその場合にも全く問題ないはず。

ところで、
実は今もbranchの実体がどこにあるのか見えてない。
見る限り .git/logs/refs/heads/各branchにしかなさそうなのだけど、ここかね?
これだと毎回reflogを動的に解釈することになるが。
実装としておかしくはないが、普通はこうはしないので、ちょっと不可解だ。
なおオブジェクトツリーにはbranchのデータは無く、branchは各オブジェクトへのリンクの入った配列だと見てる。
だからシャローコピーでしかなく、後からでもいくらでも作れるだろ、という話。
899: (ワッチョイ 6914-pSqO) 2022/11/05(土)19:03 ID:5Oe/8sYX0(22/24) AAS
> 後からでもいくらでも作れるだろ、という話。
だから速度重視だって言ってる
900: (ワッチョイ 6914-pSqO) 2022/11/05(土)19:03 ID:5Oe/8sYX0(23/24) AAS
>>898
君、ほんと知らないなら黙ってたほうがいいよ
恥ずかしいだけだから
901: (ワッチョイ 6914-pSqO) 2022/11/05(土)19:05 ID:5Oe/8sYX0(24/24) AAS
>>898
> 余分なcommitはrepoから消せ!とする君らにとっては問題だが、
余分なコミットじゃなくて、
コミットとして使えないものにする
バグコミットを消せと言ってるだけ
902
(2): (ワッチョイ 09e4-chQ5) 2022/11/05(土)19:21 ID:zDjINlW+0(7/26) AAS
>>898
まあもう面倒臭くなってきたので全部説明しちゃうが
結果的に親のhashが自分のhashに含まれることになるのだけど、実際には親のhashは自分のコミットオブジェクトに含まれている
その自分のコミットオブジェクトから計算して求めるのが自分のhash
親の祖先に変更があれば自分のコミットオブジェクトの作り直しになってhashも計算し直すことになりそれはもう自分ではない

ブランチの実体はコミットオブジェクトのハッシュひとつだけ
それで事足りる
ず〜〜〜と思っているんだがどう考えてもお前のブランチへの理解はオカシイ
内部的な構造の話ではなくてユーザとして使う上でも問題があるような酷い理解に見える
だから >>815 みたいな謎発言がでてくる
DBのINDEXみたいなもの?とかの謎解釈で突き進まれてもついていけない
903
(1): (ワッチョイ 617b-8+ss) 2022/11/05(土)20:06 ID:646uiMLL0(18/38) AAS
>>902
前半の内容は知ってるし、そのつもりで898を書いてる。
それはtutorial2に書いてあったから。
そこのhash値も混ぜてるかどうかは関知してなかっただけ。

ちなみにtutorlal2には「ここのhash値とは違うから、各自のhash値をコピペしてね」
と書いてあるが、実際は同じhash値が生成される。
だからどこまで混ぜ込んでるのかよくわからなった。
名前と時間も混ぜ込んでるぜ!と書いてあるが、どう見てもそうじゃない。
ただまあ、親ハッシュは混ぜ込んでるのは理解した。

> ブランチの実体はコミットオブジェクトのハッシュひとつだけ
それは俺の最初の理解、「点」なんだよ。815の通り。エントリポイントだけ、というわけだろ。
ただそれだと、オブジェクトツリーは辿れるが、
master @{1}で「master branch上の」一つ前、という経路情報に変換することが出来ない。
つまり、HEAD~! != @{1} とするには、何らかの情報が何処かに必要なんだよ。
そして今のところ、reflogしかないので、そこを動的に辿ってるのか?みたいなことになってる。
だから「reflogを偽造」(843)なんて話になる。

言い換えると、エントリポイントからだと、親は辿れるが、
親が複数現れたとき(マージ)に、どちらから来たのか分からないのと、
fast-forwardマージでオブジェクトは一本道でもbranch上では飛ばしている場合に、その情報がないんだよ。
これはどこに格納されてるんだ?
904: (ワッチョイ 617b-8+ss) 2022/11/05(土)20:19 ID:646uiMLL0(19/38) AAS
すまん、分かると思うが、 HEAD~1 != @{1}
905
(1): (ワッチョイ 09e4-chQ5) 2022/11/05(土)20:45 ID:zDjINlW+0(8/26) AAS
>>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 になってる
906
(1): (ワッチョイ 617b-8+ss) 2022/11/05(土)20:59 ID:646uiMLL0(20/38) AAS
>>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を作れるのなら、この辺心配ないのだけど、そうではなさそうだし。
907: (ワッチョイ 617b-8+ss) 2022/11/05(土)21:04 ID:646uiMLL0(21/38) AAS
ちなみに、843の記事では、Git内のcontrib内のスクリプトが、
branchをreflogを参考に復活させるらしいので、reflog内の情報で足りてはいるらしい。
確かに目で見た限りそうだが、
でもそれだとreflogをgcするのは割と狂気の沙汰だから、おかしいよなーと思ってて。
1-
あと 95 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.014s