Как искать историю репо? - PullRequest
       1

Как искать историю репо?

3 голосов
/ 12 ноября 2011

Сделайте репо с большим количеством коммитов. Я знаю имя файла и вещь (строка, если быть точным, некоторые коэффициенты), которую я ищу, но я не знаю, в каком коммите он находится. Он больше не в текущем , это точно, и не в нескольких предыдущих.

* Как я могу найти по времени , так сказать, для определенной вещи в указанном файле (или во всем репо, я не забота), так что он проходит через все коммиты, пока не найдет его? *

Интересует как mercurial & git. Используйте оба в настоящее время, и я не знаю, возможно ли это в одном из них.

Ответы [ 4 ]

3 голосов
/ 12 ноября 2011

Mercurial имеет команду grep. Из документации:

hg grep [ОПЦИЯ] ... УЗОР [ФАЙЛ] ...

поиск шаблона в указанных файлах и ревизиях

Search revisions of files for a regular expression.

This command behaves differently than Unix grep. It only accepts
Python/Perl regexps. It searches repository history, not the working
directory. It always prints the revision number in which a match appears.

By default, grep only prints output for the first revision of a file in
which it finds a match. To get it to print every revision that contains a
change in match status ("-" for a match that becomes a non-match, or "+"
for a non-match that becomes a match), use the --all flag.

Для Git этот связанный вопрос представляется актуальным:

Как выполнить поиск (поиск) зафиксированного кода в истории git?

2 голосов
/ 12 ноября 2011

Git также имеет команду grep.

git grep regex $(git rev-list --all) file

См. Как выполнить поиск (поиск) подтвержденного кода в истории git? , чтобы найти больше способов поиска.

1 голос
/ 12 ноября 2011

С git вы можете использовать поиск кирки.Есть два интересных флага для git log:

-S<string>
    Look for differences that introduce or remove an instance of <string>.
    Note that this is different than the string simply appearing in diff
    output; see the pickaxe entry in gitdiffcore(7) for more details.

. Это позволяет вам найти коммиты, которые добавляют или удаляют данную строку.

-G<regex>
    Look for differences whose added or removed line matches the given
    <regex>.

Это позволяет вам найти коммиты, где добавлен илиудаленная строка соответствует регулярному выражению.

Вы можете запустить это для определенного файла, отфильтровав вывод git log с -- filename, например, git log -Scoeff -- myfile.c

0 голосов
/ 12 ноября 2011

Mercurial (свежие) имеют revsets , что позволит найти что-нибудь и более просто, чем использование grep (в общем)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...