Показать только коммиты, которые не влияют ни на один из указанных путей - PullRequest
3 голосов
/ 11 июля 2011

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

Теперьмоя идея заключалась в том, чтобы использовать для этого интерактивную перебазировку.

Чтобы получить первую ветку, я бы сделал это:

git log --format="pick %h %s" --reverse -- <dir-list>

и вставил результат этого в редактор, открытый дляинтерактивная перебазировка.

Но тогда, чтобы получить вторую ветку, мне пришлось бы поддерживать противоположность для всех остальных каталогов в моем репо.

Есть ли способ как-то получить список "противоположных коммитов" или есть другое, более простое решение моей проблемы?

1 Ответ

3 голосов
/ 11 июля 2011
git log --format="pick %h %s" --reverse -- dir1/ dir2/

может быть записано

git log --format="pick %h %s" --no-walk \
    $(git rev-list --reverse -- dir1/ dir2/)

То есть, используя

git rev-list HEAD -- dir1/ dir2/

, чтобы получить список «сырых» идентификаторов ревизий.Теперь, чтобы получить дополнительный набор идентификаторов ревизий, я предлагаю что-то вроде

sort  <(git rev-list HEAD) <(git rev-list HEAD -- dir1/ dir2/) | uniq -u

Интегрируя все это

, дополнительный набор станет

git log --format="pick %h %s" --no-walk \
    $(git rev-list --no-walk --reverse \
       $(sort <(git rev-list HEAD) \
               <(git rev-list HEAD -- dir1/ dir2/) | 
          uniq -u))

noteоба параметра --no-walk там, они имеют решающее значение

Рекомендации

  1. Я настоятельно рекомендую создавать функции или сценарии bash для реализации подэтапов здесь
  2. Если вы просто ищете способ разделить репозитории, посмотрите вместо этого на git-filter-branch !
    • это позволит вам «маскировать» (удалять) ненужную часть дерева для каждой ревизии
    • позволяет пропускать эффективно пустых ревизий, как вы хотите
    • страница руководства содержит примеры только для этого
    • она будет работать ( правильно ), если один коммит отредактировал обе части репо
    • запомнить --tag-name-filter cat опция
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...