Имя: Пароль:
IT
 
Найти конкретную строку во всех изменениях git репозитория через GUI
,
0 TormozIT
 
гуру
09.07.21
07:56
Использую Visual Studio Code с расширением GitLens для анализа изменений в модулях конфигурации 1С в git репозитории.
Сегодня в очередной раз возникла задача найти конкретную строку во всех изменениях репозитория.
Код перемещался по модулям и методам в процессе развития конфигурации и немного менялся, но перемещения редко происходили с в одном коммите с изменением искомой строки.
Это можно сделать через GitLens или еще как то?
Нагуглить ответ пока не смог.
1 TormozIT
 
гуру
09.07.21
07:58
Модератора прошу поправить тему на "Найти конкретную строку во всех изменениях git репозитория через GUI"
2 ДенисЧ
 
09.07.21
08:01
3 acht
 
09.07.21
08:02
(2) Ему, похоже, GUI важнее
4 TormozIT
 
гуру
09.07.21
08:02
(2) Это я находил. Но там grep, а не GUI.
5 acht
 
09.07.21
08:09
(4) Ну дык сделай следующий шаг и поищи grep gui.
Получишь кучку вариантов, типа https://github.com/bokuweb/vscode-git-grep
6 TormozIT
 
гуру
09.07.21
08:24
Нашел эту команду в GitLens, но почему то иногда при открытии результатов такого поиска не происходит позиционирования на искомую строку и приходится жать клик и нажимать F3.
https://i.imgur.com/Gxw9tmn.png
7 TormozIT
 
гуру
09.07.21
08:32
(5) Конкретно по твоей ссылке годный вариант, если с 1-2 попыток ты найдешь нужное место. Если же надо просмотреть много результатов, то будет уже неудобно.
Про поиск "GUI grep" направление перспективное. Спасибо.
8 TormozIT
 
гуру
09.07.21
09:01
Не смог понять, как ввести в этом поиске строку "div|p|b" (не регулярное выражение) так чтобы нашлись все точные совпадения. Там режим регулярных выражений если отключаю, то находит миллион совпадений, как будто он включен.
https://i.imgur.com/SK7X1Mh.png
9 LoneBull
 
09.07.21
09:16
(8) Чисто на шару - может попробовать экранировать?
Типа
div\|p\|b
10 TormozIT
 
гуру
09.07.21
09:17
(9) Так работает, но в общем случае я буду искать и намного более длинные строки =)
11 TormozIT
 
гуру
09.07.21
09:24
(8) Похоже на баг в GitLens. Буду делать писать разработчикам.
12 TormozIT
 
гуру
10.07.21
08:38
Создал заявку в проекте gitlens для Visual Studio Code по поводу невозможности отключить поиск в формате регулярного выражения https://github.com/eamodio/vscode-gitlens/issues/1572
Поэтому задача все еще остается нерешенной - как найти конкретную строку (не шаблон, не регулярное выражение) по всем изменениям в репозитории? При этом операция будет многократной, поэтому какие либо ручные преобразования искомой строки не допускаются (как например в (9)).
13 LoneBull
 
10.07.21
10:45
(12) Преобразование ведь можно сделать и не ручное - хоть обработку на предприятии написать, хоть ещё как.
Пару лишних кнопок нажать, да.

Но конечно лучше второй день страдать над этим, нужно же как-то развлекаться ;)
14 TormozIT
 
гуру
10.07.21
11:07
(13) Тут я ищу удобное многократное (инструмент), а не разовое решение задачи. Зачем каждый раз делать какую то явную конвертацию, когда здравый смысл подсказывает, что должна быть готовая пользовательская команда? Ведь обычный поиск в VSCode ищет и регулярное выражение и точное совпадение (переключатель работает ожидаемо). Чем поиск по изменениям принципиально с точки зрения пользователя отличается от обычного поиска?
Вот если я не найду удобного способа, тогда уже будет оправдано использовать неудобный способ.
А неудобный способ пока такой
1. Преобразовать строку для поиска на точное совпадение через регулярное выражение с помощью https://regex-escape.com/regex-escaper-online.php
2. Искать преобразованную строку через gitLens в изменениях
15 Asmody
 
10.07.21
11:24
(12) Сделал ишку - сделай и ПРку. Отличная возможность прокачать TypeScript и помочь хорошему проекту! :)
16 Timon1405
 
10.07.21
11:44
git log -S 'word' не подходит?
17 TormozIT
 
гуру
10.07.21
11:56
(16) Слово GUI в заголовке вроде написал.
18 TormozIT
 
гуру
10.07.21
14:26
(15) Ну для начала не понял как отлаживать это расширение. Поковырялся минут 10 и сдался.
Кажется этот флаг отрабатывается тут
    export function toKey(search: SearchPattern) {
        return `${search.pattern}|${search.matchAll ? 'A' : ''}${search.matchCase ? 'C' : ''}${
            search.matchRegex ? 'R' : ''
        }`;
    }
https://github.com/eamodio/vscode-gitlens/blob/main/src/git/search.ts
19 LoneBull
 
10.07.21
14:59
(18) Судя по тому что оно формирует через pipe (|) идут опции поиска, а его экранирование не предусмотрено (и поэтому в итоге опции не применяются)

Выглядит так как будто можно не разбираться и просто экранировать все спец.символы из search.pattern и возвращать результирующую строку уже экранированной.
Понятно что это костыль и PR с таким исправлением оформлять не стоит, но самому попользоваться наверное вполне можно.
20 TormozIT
 
гуру
22.07.21
19:40
Так и не нашел способ без извратов поискать точное совпадение.
Сегодня потребовалось искать строку

МенеджерЗаписи = РегистрыСведений["ДополнительныеСведения"].СоздатьМенеджерЗаписи();

Опять пришлось искать через способ (14).
Удивлен, что вселенная до сих пор не смогла создать удобный инструмент для поиска по столь древнему механизму как git. В онлайн и оффлайн интерфейсе GitHub тоже не нашел подобной фичи.
21 TormozIT
 
гуру
22.07.21
23:15
Попробовал еще несколько расширений для VSCode для работы с гитом. Все они заметно скромнее имеют фичи чем gitLens. Так что там и близко нет нужной фичи.

Еще попробовал программу "Source tree". Ее поиск даже не позволяет управлять режимом "регулярное выражение". Он даже по запросу

РегистрыСведений["ДополнительныеСведения"]

Нашел ничего.
https://i.imgur.com/3EehqlB.png
А вот по запросу

ДополнительныеСведения

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

Так что gitLens пока удерживает позицию лидера.
22 Yardman
 
23.07.21
07:32
(20) Вроде если в искомой строке нет "|" - должно и без экранирования нормально работать.
23 Адинэснег
 
23.07.21
08:02
24 Вафель
 
23.07.21
08:57
(22) а как же [ ] ?
25 Вафель
 
23.07.21
08:59
Самый простой вариант для тс, дописать свой буфер менеджер, чтоб он умел копировать с экранированием
26 TormozIT
 
гуру
23.09.21
08:16
Сегодня снова встала элементарная с точки зрения постановки задача - найти все коммиты, где добавлялась/изменялась/удалялась конкретная строка кода

ПредставлениеКатегории = ирОбщий.ПредставлениеИзИдентификатораЛкс(ОписаниеКорневогоТипа.Множественное) + "." + ОбъектМДКорневогоТипа.Представление();

Стиснув зубы, вытерпел и заэскейпил через https://regex-escape.com/regex-escaper-online.php эту строку в

ПредставлениеКатегории \= ирОбщий\.ПредставлениеИзИдентификатораЛкс\(ОписаниеКорневогоТипа\.Множественное\) \+ "\." \+ ОбъектМДКорневогоТипа\.Представление\(\);

Дальше вставил ее в поле ввода шаблона поиска в gitLens
https://i.imgur.com/eZsSB10.png

И получил 2 неподходящих результата и 0 подходящих, хотя они точно есть (копировал текст из конкретного комитта).
Пример неподходящего результата
https://i.imgur.com/OS2WKAm.png
27 ДенисЧ
 
23.09.21
08:37
Мыши плакали, кололись...
28 novichok79
 
23.09.21
10:14
некоторые вещи легче через терминал, имхо.
29 Asmody
 
23.09.21
11:44
(26) В общем случае задача не решаема.
Пример:

а) была строка:
5342 + Процедура УстановитьПериодСпискаДокументов(Параметры)

б) потом её переименовали:
5342 - Процедура УстановитьПериодСпискаДокументов(Параметры)
5342 + Процедура УстановитьНачальныйПериодСпискаДокументов(Параметры)

в) потом добавляли-удаляли строки в модуле (номер строки поменялся):
5342 5279  Процедура УстановитьНачальныйПериодСпискаДокументов(Параметры)

г) потом добавили параметр в процедуру:
5279 - Процедура УстановитьНачальныйПериодСпискаДокументов(Параметры)
5279 + Процедура УстановитьНачальныйПериодСпискаДокументов(Параметры, ЕщеПараметр)

и как оно из серии diff-ов должно понять, что а) и г) - это "история" одной строки?
30 TormozIT
 
гуру
23.09.21
12:37
(27) Ну я кажется более узко сформулировал - конкретную строку (например "Пурцяв=Строки[1]") хочу искать в текстах комиттов. Все ее вариации мне не нужны, а нужно строго тот вид, как я указал.
Перед этим я существующей функцией просмотра истории комиттов строки кода GitLens нашел первый комит, где эта строка была добавлена (с точки зрения гита), но я точно знаю что она была туда перемещена. Т.е. тут с точки зрения гита идет разрыв истории строки кода. А я хочу через него перешагнуть, т.е. пройти через перемещение строки кода и дальше посмотреть ее историю.
31 acht
 
23.09.21
19:41
(26) > элементарная с точки зрения постановки задача
Эталонный заказчик
32 Asmody
 
23.09.21
23:36
(30) В Sourcetree есть поиск по коммитам