Eclipse и EGit: как легко просмотреть изменения во ВСЕХ измененных файлах перед фиксацией в *локальном* репозитории

Я использую Eclipse Indigo SR2 со (встроенным) плагином EGit v.1.3.0.201202151440-r и не смог найти способ легко просмотреть все мои изменения перед фиксацией.

Я использовал Eclipse с SVN в течение многих лет, и это всегда было очень легко сделать. Обычно я щелкал правой кнопкой мыши свой проект, выбирал Team->Synchronize, дважды щелкал первый измененный файл (в перспективе Team Sync), затем несколько раз нажимал Ctrl-., чтобы просмотреть все изменения в одном файле, а затем перейти к следующему файлу, так как я написал сводку своих изменений для сообщения фиксации.

Но, конечно, git сильно отличается от Subversion, поэтому мой рабочий процесс должен измениться. С EGit «Team Sync» кажется полезным только для просмотра изменений между моими локальными файлами и удаленным репозиторием (т.е. перед отправкой на удаленный). Мне нужен способ просмотреть изменения с момента моей последней фиксации в моем локальном репозитории. Обычно я даже не забочусь (пере)просматривать изменения перед отправкой на удаленный сервер (и если бы я это сделал, я бы предпочел простой эквивалент git log, чтобы увидеть, какие коммиты я собираюсь отправить).

Если я щелкну правой кнопкой мыши свой проект и выберу Team->Commit, мне будет представлено окно, которое делает почти все, что мне нужно сделать (выбрать файлы для подготовки, зафиксировать, написать сообщение о фиксации, изменить предыдущую фиксацию , и т.д.). Чего он не позволяет сделать, так это быстро и легко просмотреть все мои изменения в редакторе сравнения. Не могу поверить, что такой возможности не существует! Кажется, мне нужно дважды щелкнуть каждый отдельный файл, просмотреть изменения, закрыть редактор сравнения и дважды щелкнуть следующий файл. Это просто смешно!

TL/DR - я ищу простой эквивалент графического интерфейса (в Eclipse), чтобы делать то, что я легко могу сделать из командной строки, используя git vimdiff (где vimdiff - это псевдоним git, который использует vimdiff в качестве "difftool" для циклического прохождения всех измененные файлы), за которым следует git commit (возможно, с git add или двумя промежуточными значениями).

Если ни у кого нет хорошего решения, мне любопытно, как другие справляются со своим рабочим процессом фиксации с помощью EGit. Я прекрасно справлялся с фиксацией из командной строки (не то, чтобы Eclipse этому рад), но я не могу поверить, что EGit настолько бесполезен, как мне кажется. Возможно, мое гугл-фу уже не так сильно, как раньше?


person Lambart    schedule 29.06.2012    source источник
comment
Прошло 4 года, а то, что все еще действительно необходимо, так это экскурсия по парадигме дерьма от svn до git. По крайней мере, у нас есть stackoverflow.   -  person Adam    schedule 28.01.2016


Ответы (3)


Знаете ли вы о представлении «Git Staging». Он отслеживает все файлы, которые были изменены, и вы можете просмотреть изменения в любое время. (Это может быть немного лучше, чем использование диалога фиксации)

В качестве альтернативы можно зафиксировать все изменения без просмотра, а затем использовать представление истории для сравнения двух коммитов (просто выберите последний самый высокий коммит, щелкните правой кнопкой мыши и выберите «Сравнить друг с другом»). Таким образом, вам не нужно дважды щелкать отдельные файлы. Если вам нужно что-то изменить, вы всегда можете «исправить» последний коммит. (обычно я придерживаюсь такого подхода)

person Deepak Azad    schedule 29.06.2012
comment
Спасибо за ваш ответ. Нет, я никогда не слышал о представлении Git Staging. К сожалению, он использует тот же редактор сравнения, который не позволяет мне напрямую переходить от одного измененного файла к другому. У меня начинает складываться впечатление, что сломался Eclipse, а не EGit. - person Lambart; 29.06.2012
comment
Эта ссылка обсуждает патч для EGit, чтобы исправить именно то, что меня беспокоит. Но ему уже более 3 лет, и я думаю, что патч так и не был принят: git.661346.n2.nabble.com/ - person Lambart; 29.06.2012
comment
Это Эгит :-) Но инструментарий постоянно улучшается. - person Deepak Azad; 30.06.2012
comment
Сначала я не был уверен, как написать имя с большой буквы, поэтому я тщательно проверял, прежде чем что-то писать. Если вы посмотрите Help-›About Eclipse, щелкните «Сведения об установке», перейдите на вкладку подключаемых модулей и выполните сортировку по поставщику, вы увидите несколько записей, перечисленных как Eclipse EGit. По крайней мере, так обстоит дело с Индиго. В любом случае, я был бы рад написать это как угодно... лишь бы это работало на меня. :-) - person Lambart; 04.07.2012
comment
О, я хотел сказать, что здесь виноват EGit, а не Eclipse в целом :-) - person Deepak Azad; 04.07.2012
comment
Ой! Я думал, ты придираешься к моему письму. Причина, по которой я подозреваю, что это Eclipse, заключается в том, что редактор сравнения является функцией Eclipse, а не специфичной для EGit. И редактор сравнения не позволяет мне перейти к следующему измененному файлу, когда я достиг конца файла и снова выбрать следующее изменение. Но я полагаю, что если EGit неправильно настраивает редактор сравнения, то это может быть ошибкой. - person Lambart; 04.07.2012
comment
За мой вопрос снова проголосовали, поэтому я пришел, чтобы просмотреть его, а также ответы. Что бы это ни стоило, я привык использовать представление Git Staging, которое вы рекомендовали. Недавно я снова попробовал представление Synchronize (не уверен, было ли это до или после обновления до Eclipse Luna), но оно все еще не работает так, как я помнил, и Git Staging, кажется, работает лучше. Я думаю, что это все еще не позволяет мне использовать клавиатуру, чтобы легко перейти к различиям следующего измененного файла, но я привык хватать мышь и дважды щелкать каждый файл, поэтому я не пробовал это в последнее время. - person Lambart; 09.02.2015
comment
Кстати, если по какой-то причине вы видите, что репозиторий не выбран в представлении git staging, попробуйте сделать следующее: 1. Перейдите в представление Git Staging, нажмите «Связать с редактором» и Выбор 2. Перейдите в представление репозиториев Git, отметьте нужный репозиторий и через контекстное меню используйте «Копировать путь в буфер обмена» (может быть, копировать в буфер обмена не нужно...) 3. Промежуточный вид был подключен к нужному репозиторию. источник - person burcakulug; 09.06.2015

здесь говорится, что вы можете увидеть различия между рабочим деревом и любым заданным ссылка. Возможно, вам стоит попробовать последнюю версию (Juno) Eclipse/EGit и посмотреть, стала ли она лучше?

Обновление: я попробовал это в последней версии Eclipse, и, насколько я вижу, все работает нормально. Вот как это сделать:

На момент написания этой статьи вам следует выбрать версию Eclipse Juno 4.2. На странице загрузки вы можете выбрать один из нескольких пакетов в соответствии с вашими потребностями. «Eclipse IDE для разработчиков Java» поставляется в комплекте с EGit, но вы также можете установить EGit в любой дистрибутив, используя Eclipse Marketplace (в меню «Справка»).

  • После того, как вы импортировали свой проект в Eclipse, убедитесь, что проект «общий»:

Щелкните проект правой кнопкой мыши -> Команда -> Поделиться проектом.. -> Git

Теперь сделайте следующее:

  • Переключитесь на перспективу синхронизации команды.
  • Нажмите маленькую кнопку синхронизации в представлении синхронизации.
  • Выберите Git
  • Выберите подходящую ветку для синхронизации, например refs/remotes/origin/master.
  • Обязательно установите флажок "Включить в сравнение локальные незафиксированные изменения"
  • Нажмите Готово

Теперь измените некоторые файлы и посмотрите, как они появятся в представлении синхронизации. Дважды щелкните измененные файлы, чтобы увидеть разницу (как на скриншоте ниже).

Скриншот Eclipse Juno — EGit Synchronize View

person Thomas Ferris Nicolaisen    schedule 29.06.2012
comment
Спасибо за ваш ответ. Не думаю, что мне это поможет, но в любом случае я не вижу подменю «Синхронизировать». Возможно, потому, что я сейчас не работаю над веткой, или, возможно, потому, что я использую старую версию Eclipse. Спасибо, что обратили на это мое внимание. Я понятия не имею, как меня привела к неправильной загрузке, когда я установил Eclipse на эту машину для разработчиков всего несколько месяцев назад. То, что Eclipse не показывает имя вместо номера версии в Help-›About, кажется мне глупостью. Я верил, что я был в курсе. - person Lambart; 29.06.2012
comment
Вау, веб-сайт Eclipse стал очень запутанным. Это говорит о многом, не сообщая много полезной информации о том, чем занимается Юнона. Из чтения вики по разработке Eclipse я понял, что только последняя версия Juno 4.2 (выпущенная в этом месяце) на самом деле рекомендуется для обычных пользователей. Думаю, я не так устарел, как думал. - person Lambart; 29.06.2012
comment
@Lambart Я обновлю свой ответ, чтобы предоставить дополнительную информацию о том, как использовать представление «Синхронизация». - person Thomas Ferris Nicolaisen; 02.07.2012
comment
спасибо за ваше подробное и продуманное обновление. Хотя я не думаю, что кто-то еще ответил на мой вопрос (боюсь, ответа нет), я бы проголосовал за ваш ответ, если бы у меня была такая репутация. Я действительно думаю, что скоро попробую Juno, но то, что вы описываете, похоже, является функциональностью, с которой я уже знаком - я сам описал ее во втором абзаце своего вопроса. Поскольку вы не упомянули об этом, я не думаю, что это решает основную проблему (также упомянутую в пункте 2): вам все еще нужно (дважды) щелкать по каждому отдельному файлу или вы можете легко перейти от одного файла к другому? следующий? - person Lambart; 04.07.2012
comment
Если вы просто ищете сочетание клавиш для перехода к следующему файлу, Ctrl+. работает (и Shift+Ctrl+. для реверса). (Cmd+. в OSX). - person Thomas Ferris Nicolaisen; 04.07.2012
comment
О, это радостная новость. Я всегда так делал, но здесь с Indigo + EGit это не работает. Поскольку вы говорите, что это работает в Juno, я собираюсь продолжить и обновить. Я вернусь и сообщу о своих результатах. - person Lambart; 05.07.2012
comment
Я не мог работать над этим проектом в течение последних 3 месяцев (новая дневная работа - в основном с использованием vim для работы, отличной от Java), но, наконец, я возвращаюсь к своему собственному проекту, используя новый ноутбук... так что Наконец-то я установил Юнону. И... вы правы, все работает намного лучше, чем в Indigo! Я очень рад, что наконец смог принять ваш ответ. В очередной раз благодарим за помощь. - person Lambart; 02.12.2012
comment
P.S. Используя пользовательские сочетания клавиш, теперь у меня есть Ctrl+. установите «Выбор следующего изменения при сравнении в редакторе» и Ctrl+Shift+. установите «Далее» в Windows. Теперь я могу легко переходить от изменения к изменению с помощью Ctrl+точка, а затем, когда я доберусь до конца файла, я использую Ctrl+Shift+точка, чтобы перейти к следующему измененному файлу. (Я установил противоположные ярлыки с помощью клавиши , для перехода назад) - person Lambart; 02.12.2012
comment
По какой-то причине представление «Синхронизация» не показывало мне ветки назначения. Мне пришлось использовать представление репозиториев Git, щелкнуть правой кнопкой мыши ветку и выбрать «Синхронизировать с рабочей областью». Затем это открыло перспективу командной синхронизации, и все было хорошо. - person steinybot; 08.01.2015
comment
Сейчас я очень привык использовать представление Git Staging. Я думаю, что это лучше работает с концепцией git области индекса / промежуточной подготовки, чем Team Sync. Мне не нравится расположение экрана на моем ноутбуке с маленьким экраном, и я не думаю, что смогу использовать клавиатуру для сравнения следующего файла, что поначалу меня очень беспокоило. Но я привык хватать мышь. Я изменил свой принятый ответ, но очень ценю ваше время и усилия @ThomasFerrisNicolaisen - и теперь у меня есть возможность проголосовать за этот прекрасный ответ, хотя другой работает лучше для меня. - person Lambart; 09.02.2015
comment
@ThomasFerrisNicolaisen Есть ли способ сделать так, чтобы опция Include local uncommitted changes in comparison проверялась по умолчанию? - person Vignesh Raja; 13.07.2018
comment
@VigneshRaja Я не знаю. Я не использовал Eclipse уже много лет. - person Thomas Ferris Nicolaisen; 13.07.2018

Я пишу это для Eclipse Oxygen, но это должно относиться и к другим версиям.

  1. Вариант 1 с представлением синхронизации команды: щелкните проект правой кнопкой мыши > Сравнить с > Фиксировать. Здесь можно выбрать последнюю фиксацию, даже если вы не отправили ее в репозиторий.
  2. Вариант 2 с просмотром различий. Если вы хотите увидеть версию "diff" без фиксации, вы можете сделать это, щелкнув правой кнопкой мыши свой проект > команда > тайники > изменения тайника > установите флажок Включить неотслеживаемые файлы. Это будет сохраните все ваши изменения в тайник. Затем вы щелкните правой кнопкой мыши проект > команда > тайники > выберите сохраненный тайник. Вы нажимаете зеленую стрелку в правом верхнем углу, чтобы повторно применить все ваши изменения, которые вы спрятали обратно в свой код. В том же окне тайника вы увидите вкладку «Различия» в правом нижнем углу. Нажав на вкладку diff, вы увидите ваши изменения в стиле diff, выделенном красным/зеленым цветом. Хотелось бы, чтобы был способ создать представление различий без сохранения, но это единственный обходной путь, который я нашел.
person Kt Mack    schedule 26.06.2019
comment
Звучит полезно! Лично я нашел Eclipse настолько ужасным (начиная с переписывания Luna), что в 2016 году я наконец перешел на IntelliJ и не оглядывался назад. - person Lambart; 26.06.2019