Git автоматически отменяет изменения при оформлении заказа или извлечении

#git #visual-studio #git-checkout #twincat

Вопрос:

Для наших проектов мы используем программное обеспечение TwinCAT, основанное на Visual Studio (это означает, что оно управляется с помощью файлов проекта VS), и у нас возникла эта проблема:

Просто открыв проект, вы внесете изменения в файлы проекта. Эти изменения являются несущественными идентификаторами или суммами конфигураций целевых устройств, и все они могут быть отброшены. При отмене изменений в TwinCAT эти изменения часто повторяются TwinCAT сразу после их удаления с помощью git, поэтому невозможно переключать ветви или извлекать коммиты без выгрузки проекта или использования внешних инструментов.

Вопрос в том, есть ли способ включить команду отмены при проверке или извлечении или их можно принудительно выполнить. Я знаю, что это ужасный способ управления git и что есть вероятность потерять работу.

Комментарии:

1. Вы можете создать псевдоним, который скрывает затронутые файлы, выполняет операцию, а затем удаляет их. Однако не будет решать конфликты.

2. Вместо того, чтобы пытаться отменить, как меня просили, чтобы справиться с этой ситуацией, я обычно добавляю эти «неважные файлы» в .gitignore файл и удаляю их из репозитория. Таким образом, ваш редактор может делать то, что ему нужно, и эти изменения даже не будут отслеживаться git.

3. @underrun проблема с этим заключается в том, что эти файлы содержат некоторые неважные данные, но также и некоторые очень важные данные, поскольку эти файлы на самом деле являются файлами проекта Visual Studio

4. Затем свяжитесь с поставщиком инструмента и попросите его перенести данные «дерьма» в отдельный файл.

5. Не могли бы вы опубликовать образец файла проекта до и после «неважных» изменений?

Ответ №1:

Вы действительно не можете избежать этого в twincat. Но если вы используете git, вы можете свести к минимуму изменения.
То, что вы описываете, в большинстве случаев на самом деле не меняется, но блоки идентификаторов просто перемещаются внутри файла.

В настройках Beckhoff TwinCAT Visual Studio я бы рекомендовал 2 настройки, если вы используете git:

  • Установите параметр проекта «Минимизировать изменения идентификаторов в файлах TwinCAT». Описание здесь: Идентификаторы параметров проекта — вам нужно сделать это только один раз для каждого проекта, и все члены команды получат это изменение.

введите описание изображения здесь

  • Установите «Отдельные идентификаторы строк». Это относится не к изменениям проекта, а к изменениям в исходных файлах. Вы получаете меньше изменений в исходных файлах только потому, что выполняете отладку и устанавливаете точки останова. Поскольку это уже меняет идентификаторы линий. Он создает для них отдельный файл вместо того, чтобы включать их в исходный файл. Этот файл LineIds.dbg можно игнорировать в файле .gitignore. См.: LineIDs — Но этот параметр является параметром Visual Studio. Каждый разработчик в команде должен внести этот параметр, иначе изменения будут внесены в файлы разработчиками, у которых нет этого параметра.

Таким образом, подводя итог, можно сказать, что это не предотвращает изменения, о которых вы говорите, но существенно сводит их к минимуму.
Когда это все еще происходит, я проверяю изменения своим следующим изменением, и это на некоторое время «отключает» изменения идентификатора.

Возможно, это будет рассмотрено Бекхоффом в будущем выпуске.

Ответ №2:

Я думаю, что вы ищете фильтры git! Они позволяют игнорировать определенные изменения в определенных файлах. В этой статье я также упоминаю другие советы, которые вы можете использовать, чтобы свести к минимуму изменения в ваших файлах.

Комментарии:

1. очень интересно. Не знал о фильтрах. И все же я не уверен, что это может решить проблему. Можете ли вы отфильтровать полные строки, которые были перемещены вверх или вниз в файле? Их может быть множество. Обычно это не просто одна строка.

2. Ну, в основном это зависит от ваших sed навыков / awk / perl bash. Отдельные строки не должны быть слишком большой проблемой для sed . Для многострочных совпадений perl это лучший вариант. Просто попробуйте, чтобы посмотреть, работает ли это в вашем случае.

Ответ №3:

git checkout -m branch-name переключит ветви и объединит незафиксированные изменения в целевую ветвь. https://git-scm.com/docs/git-checkout#Documentation/git-checkout.txt—m

git checkout -f branch-name заставит git переключать ветви, даже если есть незафиксированные изменения. Изменения будут потеряны. https://git-scm.com/docs/git-checkout#Documentation/git-checkout.txt—f

Я обычно выгружаю проект TwinCAT перед переключением ветвей, так как VS все равно предложит мне перезагрузиться