2023/04/16

git : rebase での Current と Incoming

「git rebaseなんてそうそう使うものではない」と思っていたのだが、GitHub で Pull Request を出す際に「最新のメインブランチで出し直して」みたいな状況があってそうもいっていられなくなった。

すんなり rebase できるときもあればコンフリクトすることもある。
コンフリクトの解消がどうも苦手なので、ちゃんとしておこう。

コンフリクトしたときには「正しく修正する」のが基本ではあるが、なかなか難しいと思うのだよ。
そういうときは過去すぎて忘れてることも多いしね。

 

今回のテーマは「Current」と「Incoming」はどっちがどっちなのだ?である。


Visual Studio Code で解消しているので、その視点で見ていく。

Source Control バーで「!」マークがついているのがコンフリクトしているファイルたちである。
コンテキストメニューはこうなっている。

image

まあ、コンテキストメニューは All しかないが、ファイルの方ではコンフリクトした箇所それぞれに Current と Incoming が見えている。上側が Current で下側が Incoming になっていると思う。

記憶に残っていればなんとかなるのだが、package.json とかだとバージョンだけ違うけど変更するほどでもない、みたいなこともある。package-lock.json なんかは手動でマージが面倒だから作り直すこともありそうだし、go.sum なんかは私にはちょっと無理だ。

 

ブランチA を自分が編集中で、ブランチB を rebase に選んだという状況だということにしよう。つまりブランチB の最新 commit に差し替えようとしてコンフリクトした、ということだ。

ブランチB にブランチA を継ぎ足そうとしているので、ブランチB の最新 commit に対してブランチA の commit を 1つずつ順番に確認していく。
つまり、今(ブランチB) に対してブランチA のこの commit が不一致の原因なのだけどどうする?という問いかけなので、

  • Current : ブランチB
  • Incoming : ブランチA の特定 commit

ということになる。

「私の修正は無視していいですわ」という場合は Current を選べばよいし、commit として無視して良いなら --skip する。
もし自分の修正を反映することになるなら、その commit は新たな commit としてブランチB に接ぎ木される。すんなり rebase が成功するときはこの場合だな。

2023/03/11

[vbox]はいぱーばいざー?

VirtualBox が急に動かなくなる件を未だに引きずっている。
apt update している間に kernel が新しくなってるかもしれんし、そもそも直ってないのかもしれん。

hiro99ma blog: [vbox] VirtualBox が急に動かなくなる
https://blog.hirokuma.work/2022/12/vbox-virtualbox-7.html

 

dmesg で見ると 「drm:vmw_msg_ioctl」 というエラーが出ていたので、その線で追ってみると VirtualBox の issue があった。

https://www.virtualbox.org/ticket/20474

はいぱーばいざー?
WSL2 を使ってみたときに有効にしたかもしれないが、今はオフなのだ。

image

リンクがあった Microsoft のページでは msinfo32 を使って確認していた。

image

あれ??
この設定画面だけではわからないということだろうか。

PowerShell を管理者権限で開いて書いてあるコマンドを動かした。

image

これでよいのか?

Microsoft のページには「Disable Device Guard and Credential Guard」という項目もある。
どの項目になるんだ・・・。

https://www.tunesbro.jp/blog/how-to-disable-or-remove-hyper-v-in-windows-11.html

セキュリティの項目か。
全部やってから再起動すると、 msinfo32 にハイパーバイザーうんぬんは出なくなった。
Hyper-V が出てくるようになったのだが、これでよいのか?

image

2023/03/04

win11: Windows Updateしたらexplorer.exeが起動しなくなった

image

このアップデートをしたのだが、Windows11 が起動してログインはしたものの、デスクトップ表示がチカチカして立ち上がったような状態にならなくなった。

セーフモードでもダメで、explorer.exe が見えていなかったし、新規プロセスとして立ち上げてもダメだったので、起動しなくなったんじゃないかと思う。
わからんけどね。

 

今回はセーフモードのメニュー画面で、トラブルシューティングから更新のアンインストールを行った。品質向上と機能の2つがあったのだが、品質向上の方の最新版をアンインストールすると起動するようになった。

やれやれ。


KB番号で検索するとあっさり出てきた。

パッチの適用でWindows 11が起動不能に、サードパーティ製UIカスタムアプリが原因 - 窓の杜
https://forest.watch.impress.co.jp/docs/news/1482191.html

あー、ExplorerPatcher は使ってるね。
最新版の案内が出ていたのでダウンロードだけしてインストールしていなかった。
これでいいんだろうか?

https://github.com/valinet/ExplorerPatcher/releases/tag/22621.1344.53.1_4f3dab5

Microsoft のアナウンスが 「OS Build 22621.1344」なのでよさそうな気がする。
解消方法も分かっているし、試してみるか。。。

 

設定アプリに表示されるダウンロードボタンは応答しなくなっていた(インストールされままの気分になっている?)ので、Microsoftからダウンロードしてインストール。

起動したので、たぶん大丈夫だったんじゃないかな。

2023/02/20

[win] AUXの件は未だ解決せず

AUXの件というのは、この件。

hiro99ma blog: [win] 謎のAUX
https://blog.hirokuma.work/2023/02/win-aux.html

普段であれば「aux はダメよねー」で終わらせるところだが、Windows11 ではアクセスに難はあるもののフォルダとしては機能している(auxフォルダの中のファイルにアクセスできる)のだ。

そして、もう1つ。
おそらく Windows10 でも困らない範囲で使えていたことがあったと思うのだ。

 

・・・この「思うのだ」というのが非常に曖昧でして。
私が仕事も含めて使っている環境は比較的最近まで Windows10 がメインだったのだ。
それが PC の入替などやっているうちに Windows11 の環境が増えてきて、Windows10 の PC は今回の件が解決しない PC だけとなってしまった。

そしてまた、この件の PC で開発するは外出時(私はほとんど外出しない)なので、久々にやってみたらこうなっていたのに気付いたので、いつからそうなったのかがよくわかっていない。


なんとなくで WSL2 関係で追加したものをアンインストールしてみたが関係なかった。

 

じゃあ、こういうのはどうだ?
WSL2 の Ubuntu から npm install し直してみるのだ。

・・・ Ubuntu 側からはアクセスできるが、エクスプローラからはやはりダメだ。

 

では、WSL2 側のファイルシステムで npm install してみると?

・・・これはエクスプローラからもアクセスできた。
ただ、これは WSL2 側のフォルダを見るときのやりかたが UNC でのアクセスになっているからだろう。

image

 

じゃあじゃあ、プロジェクトのフォルダを共有しておいて UNC形式にして Android Studio で開いたらよいのでは!?
唐突に Android Studio が出てきたが、React Native のプロジェクトなので最終的に Android Studio で開けないと困るのだ。

・・・Android Studio が UNC のパスを認識してくれなかった。

 

しかし、WSL2 のパスは見えるようだ。
ならば WSL2 側にプロジェクトを持って行って開けば・・・。

image

ダメかー。甘かったかー。

というか、これはどういう状況なんだろうね。
Android Studio は Windows で動いているから Windows の世界で動いているのかと思っていたのだけど、JDK は WSL 側にインストールしてくれとかいわれてるし。

IntelliJ IDEAがWSL上のGradle同期に対応 - programwiz.org
https://programwiz.org/2021/04/19/idea-support-gradle-on-wsl/

なるほど、IntelliJ が対応したのか。
Android Studio が Chipmunk だったので Eel まで上げたらもしかしたら・・・と思ったが同じだった。

難しいね。


Windows11 では、エクスプローラからフォルダ削除はできなかったものの、中のファイルにはアクセスできた。
なので、なんかちょっと変わったんだろうね。

2023/02/12

[win] 謎のAUX

お仕事で React Native の作業をしていた。
Node.js っぽく書けつつ、Android と iOS の画面については共有でき、必要に応じてネイティブ側の実装をして呼び出したりすることができるのが React Nativeだ。
実装しているといろいろ文句を言いたくなって Flutter とかよさそうだなとは思いつつ(触ったことはない)、あっちはあっちで同じように大変なんだろうなと思う。

 

私のメイン環境は Windows10 で、React Native も Windows 上で開発していた。
Windows11 の環境もあったので、そちらでも開発していた。
もう1台の Windows10 環境があってそちらに git clone して持って行ったのだが、ここで問題が起きた。
npm install などは成功するのだが Android 環境でのビルドに失敗するのだ。
正確には gradle sync がよくわからないエラーで失敗するのだ。

 

ここからタイトルの話になる。
npm install した node_modules の下の方に aux というディレクトリがあり、その中にあるファイルにアクセスしようとして not found 扱いになったようなのだ。

ということに気付くまでは、Android OS のバージョンだの環境変数だの JDK だのいろいろ疑った。
「そういえば aux や con は FAT だと使えなかったよな」ということに気付いたのが数日前だ。

なぜ思い至らなかったかというと、別の Windows 環境ではエラーになっていなかったからだ。
比べてみたが、動く方の Windows 環境では aux ディレクトリの下にあるファイルにテキストエディタでアクセスできたのだが、動かない方の Windows 環境ではアクセスに失敗したのだ。

同じ NTFS のディスクなのになぜ??


まずは仕様から見ていこう。

FAT 名前付け規則
https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/backup-and-storage/fat-hpfs-and-ntfs-file-systems#fat-naming-convention

FAT の予約された名前の中に「AUX」が入っている。 MS-DOS でテキストエディタなどがなくてファイルに文字を書き込みたいときは CON を使ったりしていたので、そういうのと同じ感じだ。

ファイルシステムの FAT32 の仕様書っぽいのには出てこない(文字検索しかしてないが)。

https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/fatgen103.doc

FAT の仕様のなかでも 8.3規則に紐付いているだけとか? であれば 8.3形式を無効にするやり方はあったと思う。
とはいえ、私がそういう設定をした記憶が無い。
うーむ。

 

実物で確認しよう。
これなのだが。

https://github.com/RobinBobin/react-native-google-drive-api-wrapper/tree/master/src/api/aux

使うときは npm install でやっているからそうすべきだろう。

nvs use 16.16.0
md test
cd test
npm init -y
npm install @robinbobin/react-native-google-drive-api-wrapper

そして中身を見てみる。

> dir node_modules\@robinbobin\react-native-google-drive-api-wrapper\api\aux

 \\. のディレクトリ

ファイルが見つかりません

見えないのだが、Explorer からは見えていて、アクセスには失敗する(テキストエディタで開こうとした)。

image

これが動く環境だと開けるのだ。開けはするが、aux というフォルダなどを作ろうとするとエラーになったりはする。

困ったのだけど、まったく手がかりがないねぇ。