|
Найти конкретную строку во всех изменениях 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 есть поиск по коммитам
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |