rhysd / committia.vim

A Vim plugin for more pleasant editing on commit messages
MIT License
731 stars 30 forks source link

Result to deleted all file when HEAD commit is "Merge pull request..." #19

Closed zchee closed 9 years ago

zchee commented 9 years ago

最終のcommitが"Merge pull request..."の際に上からcommitしますと、mergeコミットにはファイル情報がない?ためか、diffバッファの表示がgit管理化の全てのファイルが削除されていることになるようです。

committia.vimのコードを確認していないので、こちらの設定などの問題でしたら申し訳ないです。

zchee commented 9 years ago

すみません、原因がそうではなかったようです。以後のcommitでもdeleteになってしまいます。 Mergedのせいなのか他なのか、調査してみます。

rhysd commented 9 years ago

最後の commit が 447fb27 な commitia.vim で確認してみましたが,報告いただいたような症状は起きませんでした. 試したシーケンスは以下です.

  1. 最新のコミットがマージコミットであることを確認
  2. 適当な変更を入れる
  3. git add → git commit

再現条件分かりましたら報告いただけると助かります.

electricnude commented 9 years ago

本件、autochdir とは関係ないでしょうか? ジブンの環境では、set autochdir 指定している場合、 STATUS Window と DIFF Window に正しく対象が表示されません

rhysd commented 9 years ago

@electricnude

情報ありがとうございます.確かに :set autochdir すると壊れることが手元で再現出来ましたので,とりあえず別 issue として処理します.

rhysd commented 9 years ago

@electricnude

3bdbaa1 で少なくとも僕の環境では直りました.

@zchee

最新に更新しても再現するかどうか試してもらえると助かります.

electricnude commented 9 years ago

早々にご対応いただきましてありがとうございます。 3bdbaa1、 364c9d1 双方にて確認しました。

DIFF Window は直りました! ありがとうございます。 STATUS Window は残念ながら変わらない状態です。

当方設定の問題である可能性が高いので、調査してみます
rhysd commented 9 years ago

@electricnude

ご確認ありがとうございます. 今回の変更ではウィンドウを開く間は一時的に set noautochdir する処理を入れたので,status window の件については autochdir 関係ない可能性もあります.お手数ですが,.vimrc:set noautochdir した状態でも再現するかどうか見てもらえませんでしょうか?

electricnude commented 9 years ago

set autochdir 、set noautochdir 、未指定 を .vimrc に記した場合各々の挙動は以下のようになりました:

STATUS Window DIFF Window
set autochdir x o
set noautochdir o o
OMIT o o

ご参考になれば幸いです

rhysd commented 9 years ago

@electricnude

確認ありがとうございます.助かります. 原因が分かったので bef9b57 で修正しました.

原因は 'autochdir' がコミットバッファを開いた時に自動でカレントディレクトリを .git 下に持っていくからでした.一応 :help autochdir にも書いてありますが,Vim プラグインを使う際はあまりこのオプションは使わないほうが良いかもしれません.とりあえず .git 以下では git status で何故かすべてのファイルが deleted になるみたいですので,.git 外に一時的に cd するワークアラウンドを入れました.

rhysd commented 9 years ago

@electricnude

--work-tree を教えてもらったので, f773219 で根本解決が出来た気がします.

electricnude commented 9 years ago

ご対応いただきましてありがとうございます。 確認致しました:

bef9b57 f773219
set autochdir o o(*)
set noautochdir o o
OMIT o o

仰られるとおり、set autochdir 指定はイロイロ問題が発生するようですね。 にもかかわらず、ご対応いただきましてありがとうございました。 おかげさまで見やすくなりました。ありがとうございます。


以下、余談となります... 上表 (*)に関して、補足いたします:

ご対応いただきました現状で充分なのですが、 f773219 の場合(恐らく .git 相当の位置からの Status 確認になるようで)、 例えば、a,b,c ファイル構成がこんな場合:

.
|-- .git/
|-- a
|-- b
`-- c

でファイル変更状況がこんな場合:

$ git status -s
M  b
 M c

git commit 時の STATUS Window は以下のように( ../ がついた表示 )となります:

  # On branch master
  # Changes to be committed:
  #   (use "git reset HEAD <file>..." to unstage)
  #
  #       modified:   ../b
  #
  # Changes not staged for commit:
  #   (use "git add <file>..." to update what will be committed)
  #   (use "git checkout -- <file>..." to discard changes in working directory)
  #
  #       modified:   ../c
  #

<_committia_status__ - ⮀ ...tatus__ ⮁⮃ unix ⮃ utf-8 ⮃ gitcommit ⮂   7% ⮂   1:1

一連のご対応で、set autochdir 指定している環境でも充分、 確認しやすくなっていますし、 ご対応以前のママでも、STATUS WindowDIFF Window の表示が正しくないだけで、 gitインデクスやワークツリーが破壊されることは無いので、 ここまで考慮するのは イキスギ かもしれません。

が、ご連絡しちゃいまッス!! ヤボでスイマセン!

zchee commented 9 years ago

返信気づくの遅れてしまいました…

あれから再現できなくなってしまって困っていたのですが、set autochdirが原因だったのですね。 確かに別件でsetしたりしていて今は外したので、理解できました。

autochdirが問題多いというのも知りませんでしたので勉強になります ご丁寧に対応していただき、ありがとうございます。

rhysd commented 9 years ago

@electricnude

ご連絡ありがとうございます. cwd が移動してしまう以上,../b のようにパスがずれてしまうのは仕方ない(仕様)と思います.

@zchee

ご確認ありがとうございます.了解です!