Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

TortoiseGit rebase

タグ: Git TortoiseGit Windows

TortoiseGit 1.6.5(with msysGit 1.7.4)の使い勝手を調べていたときのお話。

tgit_rebase_1.png

この状態から

tgit_rebase_2.png

piyoブランチをmasterブランチのHEADにrebaseしようとしたら

tgit_rebase_3.png

「add piyo.txt」のコミットが消えた。

rebaseの使い方を誤ったのだろうか?
いずれにせよ、このおかしな歴史は元に戻さなければならない。
shift+コンテクストメニューでReflogを出す。

tgit_rebase_4.png
tgit_rebase_5.png

何か表示がおかしい気がするが……

tgit_rebase_6.png

Refを指定したらすっきりした。

tgit_rebase_7.png

piyo{1}を選び、「add piyo.txt」の頃にresetする。
これで無事、rebaseする前の状態に戻ることができた。

さて、この「rebaseするとコミットが消える」現象。
TortoiseGitのIssuesの方にも「時々起こる問題」として何件か上がっているが、最終的には「Issue 512: Git sync lose local commits (remote update, fetch and rebase)」にて

The issue always occurred on single-core machines, or when manually setup affinity mask of TortoiceProc to one core.

「シングルコアのマシンなら確実に起こる」というコメントと共にパッチが上げられていた。
シングルコアとは、なるほど今時のマシンでは発症しにくそうな不具合である。

では、このパッチを適用したバイナリを入れて再度rebaseしてみよう。

tgit_rebase_8.png
tgit_rebase_9.png

今度は期待通りの歴史になることが確認された。

改行コードがLFなバッチファイル

タグ: Windows
echo foo bar
echo ほげ ふが

Windows XP SP3でこのようなバッチファイルを「文字コードはShift JIS」「改行コードはCRLF」で作って実行すると

C:\>echo foo bar
foo bar

C:\>echo ほげ ふが
ほげ ふが

問題なく動作するが、改行コードをLFにすると

C:\>echo foo bar
foo bar

C:\>ほげ ふが
'ほげ' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

実行時に2バイト文字の数だけ?文字が消失してしまう。

逆にバッチファイルの中身が1バイト文字だけであれば

echo foo bar
echo ホゲ フガ

改行コードがLFでも正常に動作する

C:\>echo foo bar
foo bar

C:\>echo ホゲ フガ
ホゲ フガ

っぽい。

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。