Как это сделать? После внесения изменений через git config
я могу разделить мои поэтапные и зафиксированные изменения с помощью vimdiff, но когда я делаю git show
, я все еще вижу разницу в старом обычном стиле. Как это сделать для git show
?Force git show показать diff с помощью vimdiff
ответ
С git show
вы можете отображать объекты, такие как commits (see the man page for reference). Таким образом, вы не показываете diff двух файлов, но меняете файлы (возможно, несколько). Таким образом, нет двух файлов, которые можно сравнить. Но это именно то, что делает vimdiff, он открывает два файла бок о бок и выделяет различия.
Когда вы используете git difftool
или что-то в этом роде, он будет создавать файлы для обеих сторон diff и использовать инструмент (в вашем случае vimdiff) для их сравнения. git show
не создает эти файлы, поэтому его вывод не может быть показан vimdiff.
tl; dr: git show
- это инструмент для отображения объектов git, а не для создания diff, поэтому его вывод не может быть показан как diff с использованием vimdiff.
Что вы можете сделать, это использовать git difftool
. Он откроет gvimdiff для каждого измененного файла.
Вы можете использовать обычные опции git diff
, чтобы сравнить различные коммиты.
По умолчанию git show
без параметров, а также git show <object>
отображает изменения ко всем файлам в рамках фиксации. Поскольку vimdiff может сравнивать только один файл за раз, вы не можете использовать его с этими параметрами.
Однако git show <object> -- <file>
показывает изменения в одном файле внутри фиксации. Вы можете отобразить изменения в vimdiff, запустив difftool
вместо:
git difftool SHA~:SHA -- <file>
Если вам нужно больше гибкости, вы всегда можете использовать git show
для извлечения конкретных версий файла и передать их в vimdiff через Process Substituion
export FILE=path/to/file; vimdiff <(git show SHA1:$FILE) <(git show SHA2:$FILE)
Попробуйте использовать git aliases. Это для git show
git config --global alias.s difftool\ HEAD^\ HEAD
И это для git show <revision>
git config --global alias.s '!f() { rev=${1-HEAD}; git difftool $rev^ $rev; }; f'
Чтобы увидеть, как это работает, ознакомятся с this page.
Возможный дубликат http://stackoverflow.com/questions/28048270/how-do-i-use-vim-as-git-show-editor – anujm