Wikiのバージョン管理はまだ原始的
制作者:bsahd
タイトル
「また」→「まだ」?seibe.icon
あwwwbsahd.icon
bsahd.icon
1分ごとなどに暗黙的にcommitされて、時刻で遡れる
他branchの影響を受けないので作業に集中できる
静かに作業したいが、個人プロジェクトはページが充実してないので作業しにくい
そこでブランチを切る
そうすればmainブランチのにぎやかさからカットアウトされる
作業が終わったらマージする
同じbranchの人同士で同時編集できる
いいなそれnishio.icon
纏まってない考えを書くのに非公開のブランチを作る
「非公開」がいいのか「読めるけど書き込めない」がいいのか「下書き中」と表示されてるだけでいいのか
ブランチごとにページ超えのHistoryが作られる
いまいちピンと来なかったtakker.icon
branchごとに時系列のhistoryが作られるイメージbsahd.icon
バージョン管理からは逸れそうだがsta.icon
(バージョン管理のポテンシャルは要らなくて「個人が雑に書ける領域」があればいいのかなと思ってて、じゃあどうするかってのは僕も考えていたので書いてみる)
ページを超えた大規模なrefactoringにも便利そう
例えば/nishioに誤字脱字を見つけたときにブランチを切って修正し、プルリクを送る ブランチを切るのはだれでもできる
切ったブランチは自分と招待した人とプロジェクトの編集者しか編集できない
mainへのマージはプロジェクトの編集者しかできない
ので、プルリクを使う
GithubでいうForkをプロジェクトごと複製せずに実現したい
現状のシステムで実現する方法
必然的にブランチはページ単位になる
projectの複製ができないため
ページを2回複製する
複製元ページはaとする
ページ名はWikiのバージョン管理はまた原始的とする
1つ目の複製は「ブランチを切ったときのバックアップ」で、cとする
実際のページ名はWikiのバージョン管理はまた原始的 (bsahd backup)とする
[Wikiのバージョン管理はまた原始的 (bsahd)]の編集開始時のバックアップです。[* 編集しないでください]みたいなヘッダーを付ける
2つ目の複製はブランチの編集用で、bとする
実際のページ名はWikiのバージョン管理はまた原始的 (bsahd)とする
このページは[Wikiのバージョン管理はまた原始的]のブランチですみたいなヘッダーを付ける
bを編集する
diff3 -m a c b
後述のscrapmerge.js
esbuildかければブラウザでも使えるだろう
意味
編集前はcです
編集後1はbです
編集後2はaです
両方の編集統合して出力
コンフリクトマーカーを残したままaを前のdiff3の出力で上書き
b,cを消す
すでにブランチが存在する場合に、ブランチに追記しないようにする
マージ実行時に、b,aも開く
b,aは削除するので
タイトル行を排除する
scrapmerge
ブランチ機能
https://gyazo.com/a67e04635665485cf977fe65a89afe6e2回複製のために画面を出すので、ポップアップブロッカーを解除する必要がある
ブランチした後、aのページでマージを押すとマージする
ユーザー名はdocument.querySelector("ul.user-menu li.list-header").innerText で調べる
ブランチ用Userscriptも作る
コマンド版
deno.iconが必要です
使い方:deno run https://scrapbox.io/api/code/villagepump/scrapmerge.js/scrapmerge.js プロジェクト名 aのページ名 cのページ名 bのページ名 > 出力先ファイル名.diff
ページ名はダブルクオーテーションで囲ってください
Q&A
typescript使わないの?
動的で何が悪いの(怒)
ざっとしか見れていないが、すごい面倒そうに思えたseibe.icon
これだとチャットみたいに書いたことが即時反映されることによるコミュニケーションを行えない気がする
体系的に整理する場所には向いてるのかなbsahd.icon
ここ自分も勘違いしてたtakker.icon
wikiにgitの概念を入れるの良さそう
Gitのような管理をwikiでやりたいbsahd.icon