#16 Run external diff on actual local file, not a temporary copy

Cort Stratton

Several popular visual diff utilities (e.g. Araxis Merge, ExamDiff, WinMerge) have afeature where you can edit file directly in the diff view, and save your changes (this is extremely useful for selectively backing out certain changes without reverting the entire file). However, since qgit passes a temporary copy of the locally-edited file to the external diff program, this feature does not work. Actually, it's worse than that -- it appears to work, but any changes made through the diff viewer are saved to the temporary file (which is removed as soon as the diff viewer exits).

Would it be possible for qgit to pass the filename of the actual locally-edited file to the external diff viewer, instead of creating a local copy?


  • Marco Costalba
    Marco Costalba

    The problem is that the file could be not exsisting !!

    You can select two arbitrary revisions in the revision list, none of the corresponding files could be present in the working dir, so they have to be created on the fly.

    It is only a subcase when one of the two selected files is actually the file in HEAD, i.e. the current version of the file.

  • Cort Stratton
    Cort Stratton

    Yes, I understand that older revisions of the file would not exist, and would need to be created as temporary files. However, it would be meaningless to edit those versions anyway, so keeping them as temp files is the correct behavior. The change I'm suggesting would only affect the subcase you mention, when one of the files is the HEAD revision. This should be an easy test.

    This is the behavior in many other major SCC GUI tools (e.g. gitk, Perforce).