#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 все равно предложит мне перезагрузиться