2016-05-24 7 views
1

Как это сделать? После внесения изменений через git config я могу разделить мои поэтапные и зафиксированные изменения с помощью vimdiff, но когда я делаю git show, я все еще вижу разницу в старом обычном стиле. Как это сделать для git show?Force git show показать diff с помощью vimdiff

+0

Возможный дубликат http://stackoverflow.com/questions/28048270/how-do-i-use-vim-as-git-show-editor – anujm

ответ

1

С 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, чтобы сравнить различные коммиты.

1

По умолчанию 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) 
0

Попробуйте использовать 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.

 Смежные вопросы

  • Нет связанных вопросов^_^