git-grep не использует несколько потоков - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь использовать git grep для поиска всех ревизий очень большого хранилища. Я использую команду:

$ git rev-list --all | xargs git grep -I --threads 10 --line-number \
  --only-matching "SomeString"

Я использую последнюю официальную версию git на Mac:

$ git --version
git version 2.19.1

Это занимает очень много времени, глядя на монитор активности, используя только один поток. Однако документы говорят, что по умолчанию должно использоваться 8. Используется только один поток с параметром --threads <num> или без него. У меня нет другого набора настроек, который бы переопределил этот параметр:

$ git config --list
credential.helper=osxkeychain
user.name=****
user.email=****

Есть идеи, что мне не хватает? Кто-нибудь еще может использовать git-grep и подтвердить, что он видит несколько потоков?

Спасибо за любую помощь

1 Ответ

0 голосов
/ 13 ноября 2018

Интересно, это потому, что вы используете | xargs, который ожидает ввода на stdin.Поскольку выходные данные из git rev-list представляют собой один поток, xargs по умолчанию будет использовать только один процесс:

-P max-procs, --max-procs=max-procs
              Run up to max-procs processes at a time; **the default is 1**.  If
              max-procs is 0, xargs will run as many processes as possible
              at a time.

Поэтому попробуйте увеличить его с помощью указанного выше флага:

git rev-list --all | xargs -P 10 git grep -I --threads 1 --line-number \
    --only-matching "SomeString"

Этобудет порождать несколько git grep с, что позволит git grep использовать несколько потоков, так что это своего рода функциональный ответ.

...