...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

Gitリポジトリにrmできないファイルがあって困った(解決)

Gitのリポジトリにrmできないファイルが登録されています。

ファイル名の日本語が文字化けしたまま登録されているようです。

5602▒▒▒▒101022_unsorted.csv

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git ls-tree HEAD
100644 blob 25b7b9224949fcd83c1481544dc99dff11d588a0    5602▒▒▒▒101022_unsorted.csv
100644 blob 8f488375ff1b2a635ca9b9cae6c2960fae802d24    5605log.csv
100644 blob c698d1f2ddd89c98d7bdc3477f08e2d2537a5ee4    5606.csv
100644 blob 99ba79c5a780215f6116e2555b9697b750dab152    build.bat
100644 blob c96fc9a3e1a6413befccbd0f00e671745ba6d489    ddbg.exe
100644 blob 3d7a94bbfeea0a85c0a317456aec2369b5f2afb2    ddbg_gdb.bat
100644 blob 9f9882425bfbab1776b7ea5ae918ddaa70300a52    full5605log.csv
100644 blob 49f6adde9c069db5ece2897e95ef2a97e43372d0    go.bat
100644 blob 9055d7a385e4c894ad5bab57168e33145f443ea2    main.d
100644 blob 61db5a9781b1e3822c9536b41b22f2fab03ad345    main.exe.manifest
100644 blob f743a04e64275dc7905cef7abe6359573d2bea51    main_debug.def
100644 blob a3a61fe6f9d525d710f1af512bdbe794d32d2bee    main_release.def
100644 blob 2ee670abb92837809162198e6570c4f4e9ce1410    release.bat
100644 blob edee8482c4ae789cd755d0645b4ac732d397ab25    run.bat
100644 blob 9d35dfe2bef5df0103381aeb6f8eba61c06293cb    shell.bat
100644 blob aa909e5af286121a1f740d8338b4d33f890aa7ca    typetuple2.d

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git show 25b7b9224949fcd83c1481544dc99dff11d588a0
<93><FA><8E><9E>,<D3><C6><C0><8E><ED><95><CA>,F1 F2 F3 F4 F5 F6,F7 F8 F9 FA FB FC,TG(<91><AC><93>x),TG(<8B><97><97><A3>),<8E><ED><95><CA>,<BD>ð<C0><BD>1,<BD>ð<C0><BD>2,<8E>ԑ<AC>,<8E><F3><90>M<DA><CD>
<DE><D9>
 10/10/22 20:17:22,A0h,C9 0A 00 00 00 02,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:22,12h,CA 0A 00 00 00 02,48 B6 00 00 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:22,A1h,09 1A 00 00 18 12,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:23,A0h,C9 0E 00 00 00 12,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:23,A1h,09 1A 00 00 18 92,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:23,12h,CA 0E 00 00 00 12,D9 8B 00 00 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:23,FFh,0A 00 4F 00 00 03,1E 5C 13 01 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:24,A0h,C5 06 02 10 38 12,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:24,A1h,09 19 00 00 18 92,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:24,12h,C6 06 02 10 38 12,8C 24 00 00 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:26,A1h,09 19 00 00 28 92,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:29,A0h,C5 06 02 10 38 12,00 00 00 00 41 12,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:29,A1h,09 19 00 00 28 92,00 00 00 00 41 12,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:30,FFh,0A 00 4F 00 00 13,1E 5C 10 01 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:30,A0h,C5 04 02 10 38 12,00 00 00 00 41 12,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:30,12h,C6 04 02 10 38 12,04 32 00 00 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:17:32,  ,  ,  ,0000h,0000h,23h,ABh,00h
 10/10/22 20:17:32,FFh,0A 00 4F 00 00 10,1E 54 10 01 00 00,0000h,0000h,21h,ABh,00h
 10/10/22 20:19:18,  ,  ,  ,0000h,0000h,23h,A3h,00h
 10/10/22 20:19:18,FFh,0A 00 4F 00 00 10,1E 5C 10 01 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:20,A0h,C5 05 02 10 38 12,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:20,A1h,05 14 71 00 28 82,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:20,12h,C6 05 02 10 38 12,40 39 00 00 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:20,A1h,05 14 71 00 28 A2,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:20,A0h,C5 06 02 10 38 12,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:20,A1h,09 19 00 00 28 A2,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:20,12h,C6 06 02 10 38 12,8C 24 00 00 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:20,A1h,09 19 00 00 28 92,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:22,FFh,0A 00 4F 00 00 10,1E 5C 13 01 00 00,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:22,A0h,C9 0A 00 00 00 92,00 00 00 00 41 13,0000h,0000h,21h,A3h,00h
 10/10/22 20:19:22,12h,CA 0A 00 00 00 92,C1 22 00 00 00 00,0000h,0000h,21h,A3h,00h

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git rm 25b7b9224949fcd83c1481544dc99dff11d588a0
fatal: pathspec '25b7b9224949fcd83c1481544dc99dff11d588a0' did not match any files

sha-1でファイルを指定する方法は分かりましたが、showはできるのにrmはできません。そういうもの?

 

$ git config --global core.quotepath false

これは設定しているので、git statusしたら化けているファイル1つ以外は、日本語が化けないで表示されます。

・git rm $(git ls-files --deleted) もダメ

Git rmメモ(Hishidama's Git rm Memo)

「git rm」に拠らずに削除されたファイル(UNIXrmコマンドや、エディターの削除機能等で削除したファイル)は、ファイル名の補完が効かないので、指定するのが面倒。

削除されたファイル一覧は「git status」で表示されるので、それをコピーして「git rm」の引数に指定し直せばいいのだが、数が多いと面倒。

「git ls-files --delete」あるいは「git ls-files -d」を使うと(git管理下から)削除されたファイル一覧を表示することが出来るので、それを「git rm」の引数に指定すれば楽。

$ git rm $(git ls-files --deleted)

参考: あっきぃさんの『削除したファイルをコミットする Git

やってみる。

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git ls-files
5602▒▒▒▒101022_unsorted.csv
5605log.csv
5606.csv
build.bat
ddbg.exe
ddbg_gdb.bat
full5605log.csv
go.bat
main.d
main.exe.manifest
main_debug.def
main_release.def
release.bat
run.bat
shell.bat
typetuple2.d

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git ls-files --deleted
5602▒▒▒▒101022_unsorted.csv

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git rm $(git ls-files --deleted)
fatal: pathspec '5602Ô101022_unsorted.csv' did not match any files

ダメだった。

・git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached もダメ

git rm | Atlassian Git Tutorial

ファイルシステムに存在しないファイルを削除する方法
「rm ではなく git rm を使う理由」で説明したとおり、git rm は標準シェル rm と git add を結合して作業ディレクトリからファイルを削除し、削除結果をステージング インデックスにプロモートするのに便利なコマンドです。標準のシェル rm コマンドだけを使って複数のファイルを削除すると、リポジトリの中が散らかってしまいます。

次のコミットの一環として明示的に削除したすべてのファイルを記録する場合は、次のコミットの準備として git commit -a を実行してすべての削除イベントをステージング インデックスに追加します。

ただし、シェル rm で削除したファイルを完全に削除する場合は、以下のコマンドを使用します。

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
このコマンドでは作業ディレクトリから削除したファイルのリストを生成し、そのリストを git rm --cached にパイプしてステージング インデックスを更新します。

やってみた。

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
fatal: pathspec '5602Ô101022_unsorted.csv' did not match any files

ダメだった。

・git reset --hard でおかしくなった

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git reset --hard
HEAD is now at e6352be Update to dmd 2.101.0

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    5602▒▒▒▒101022_unsorted.csv

Untracked files:
  (use "git add <file>..." to include in what will be committed)

...

        56028d868eÔ101022_unsorted.csv

...

        main.exe
        main.obj
        sort/
        svn_ver/

no changes added to commit (use "git add" and/or "git commit -a")

56028d868eÔ101022_unsorted.csv というファイルが復活してきました。

TortoiseGitでは、それとは別に、まだ文字化けしているファイルが行方不明だと言われていますが・・・。

TortoiseGitで「56028d868eÔ101022_unsorted.csv」を「追加」すると、文字化けしたファイルが行方不明だとは表示されなくなりました。

そのままコミットしてみると、TortoiseGit上では行方不明のファイルはなくなりましたが、git bashでgit statusすると、やっぱり文字化けした方がdeletedって出ます。

なんだかややこしいことになりました。

$ git ls-tree HEAD
100644 blob 25b7b9224949fcd83c1481544dc99dff11d588a0    56028d868eÔ101022_unsorted.csv
100644 blob 25b7b9224949fcd83c1481544dc99dff11d588a0    5602▒▒▒▒101022_unsorted.csv

ハッシュ値が同じだけど、それっていいのだろうか。ファイルの内容だけで決まる?

brobはファイルの内容だけで、indexはファイルパスと内容で決まるそうです。

じゃあ、indexを編集すればいいかも。

・rm .git/index

Gitリポジトリのインデックスが壊れたら - Eyes, JAPAN Blog

$ rm .git/index
$ git reset

エクスプローラーで.git/indexを削除してみます。

削除した後に、まずは git status で状態を見てみます。

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    5602▒▒▒▒101022_unsorted.csv
        deleted:    5605log.csv
        deleted:    5606.csv
        deleted:    build.bat
        deleted:    ddbg.exe
        deleted:    ddbg_gdb.bat
        deleted:    full5605log.csv
        deleted:    go.bat
        deleted:    main.d
        deleted:    main.exe.manifest
        deleted:    main_debug.def
        deleted:    main_release.def
        deleted:    release.bat
        deleted:    run.bat
        deleted:    shell.bat
        deleted:    typetuple2.d

...

TortoiseGitでは、文字化けしたファイルが行方不明でなく削除と認識されました。

このままだと、必要なファイルまでdeletedになってしまうので、これは差分として認めません。

文字化けしたファイル以外について、TortoiseGitで「変更の取り消し」をします。

それから、コミット。成功しました。

git bashで見てみると、

haru@haru90 MINGW64 ~/Desktop/HogeLog (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

...

ちゃんと削除できているようです。

やったね!

オーバーレイアイコンの優先順位(Dropbox VS TortoiseGit)

Windowsでは、最大15種類までらしい。

MSさん何とかしてください。

とりあえず、よく使いそうなものが先になるように並べ替えた。

冒頭にスペースが多いほど、優先順位が高くなるらしく、各社でスペース大戦争をしているそうな(何だそりゃ)。

 

追記:

TortoiseGitの設定で、オーバーレイハンドラーの項目に「レジストリエディターを起動する」ボタンがあるので、これをクリックすると、上のレジストリエディタの画面が表示される。

 

ふと、DropboxよりもTortoiseGitの方が優先度高いよなと思い、順序を見直した。



Adobe Acrobat Reader DCで手のひらツールをデフォルトにする方法

qiita.com

wnkhs.net

 

レジストリをいじらないとできないらしい。

書いてあるキーを編集してみたけど、反映されなかったので別のキーを検索してみたら、

コンピューター\HKEY_USERS\S-1-5-21-2727554755-1954124979-3275100530-1001\SOFTWARE\Adobe\Adobe Acrobat\DC\Selection

うちの場合はこっちだった。

追記:

上記のキーの値をHandにすればOK。

テキストファイル名と同名のフォルダを作ってテキストファイルをmail.txtにリネームしてそのフォルダに入れる

ThunderbirdのメールをImportExportToolsでテキスト化したときに,メールの件名のフォルダを作ってから,その中に本文のテキストファイルを入れて欲しい。設定ではできないみたいなので,仕方がないからせめてフォルダに入れるところは自動化する。
まず,スクリプトのintofolder.ps1ってファイルを作る。
2020/05/01追記:最後に改善版を追加しました。
2020/10/03追記:最後に複数ファイル版を追加しました。

New-Item $args[0].ToString().Split(".")[0] -ItemType Directory
Rename-Item $args[0] -NewName "mail.txt"
Move-Item "mail.txt" $args[0].ToString().Split(".")[0]

それのショートカットを作って,プロパティーの「リンク先」をこうする。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -File intofolder.ps1
また,プロパティの「作業フォルダー」は全文削除する。

f:id:haru-s:20200815190025p:plain

「【至急】先日のメール至急回答願います.txt」みたいなテキストファイルをショートカットにドラッグ&ドロップすれば使える。
PowerShellだと件名に空白が入っていてもちゃんと動くみたいだ。バッチファイルじゃうまく動かなかった。
これでやっと小指の負担が減る。

bgt-48.blogspot.com


2020/05/01追記:
メールの件名をファイルパスに使おうとするので,件名にワイルドカード文字に当たる文字があったらうまく動かなかった。
こうしたら解決した。

New-Item $args[0].ToString().Split(".")[0] -ItemType Directory
Rename-Item -LiteralPath $args[0] -NewName "mail.txt"
Move-Item -LiteralPath "mail.txt" $args[0].ToString().Split(".")[0]


2020/10/03追記:
まとめて操作する場面が多かったので,複数ファイルのDnDができるようにした。

foreach($arg in $args)
{
    New-Item $arg.ToString().Split(".")[0] -ItemType Directory
    Rename-Item -LiteralPath $arg -NewName "mail.txt"
    Move-Item -LiteralPath "mail.txt" $arg.ToString().Split(".")[0]
}

メモリ追加

OS: Windows10 Professional
CPU: Core i7 920 BOX (2.67GHz)
メモリ: トランセンド DDR3-1333 2GB 3枚組
    CORSAIR DDR3-1333 4GB 3枚組
グラフィックボード: GeForce 9600 GT 512MB
電源: SUPER FLOWER SF-600R14HE
HDD: SATA 6Gb/s 2TB WDC WD20EFRX
HDD: SATA 6Gb/s 3TB WDC WD30EZRX(2TBまで認識。旧OSをしばらく接続)
HDD: SATA/300 500GB ST3500320AS
マザーボード: Gigabyte EX58-UD4
ディスプレイ: BenQ G2400WD (1920x1200 32bit 60Hz)
ディスプレイ: MITSUBISHI RDT1710V (1280x1024 32bit 60Hz)

大分快適になった。