git: как я могу легко определить, что я нахожусь в середине перебазирования - PullRequest
2 голосов
/ 05 января 2020

Я пишу bash однострочник, где я хочу делать что-то автоматически каждый раз, когда я запускаю git rebase --continue внутри while [ true ] l oop. Когда он остановится, если я все еще перебазирую, я сделаю X, тогда я попрошу, чтобы перебазирование продолжилось снова. Легко ли сказать, что я все еще перебиваю? Я пробовал с if [ ! -f .git/REBASE_HEAD ]; then break; fi, но файл все еще присутствует после завершения ребазирования. Я вижу, что .git/rebase-merge присутствует при перебазировании и пропал после того, как это сделано. Могу ли я использовать это как мой совет?

Ответы [ 2 ]

4 голосов
/ 05 января 2020

Мы можем видеть как git-prompt.sh обнаруживает, что находится в перебазировке .

    if [ -d "$g/rebase-merge" ]; then
        if [ -f "$g/rebase-merge/interactive" ]; then
            r="|REBASE-i"
        else
            r="|REBASE-m"
        fi
    else
        if [ -d "$g/rebase-apply" ]; then
            if [ -f "$g/rebase-apply/rebasing" ]; then
                r="|REBASE"
            elif [ -f "$g/rebase-apply/applying" ]; then
                r="|AM"
            else
                r="|AM/REBASE"
            fi
        elif [ -f "$g/MERGE_HEAD" ]; then
            r="|MERGING"
        elif __git_sequencer_status; then
            :
        elif [ -f "$g/BISECT_LOG" ]; then
            r="|BISECTING"
        fi

И есть дополнительные статусы в __git_sequencer_status.

Поскольку каталог Git не всегда .git, сценарий использует git rev-parse --git-dir для получения каталога git ($g выше). Затем из вышеприведенного можно увидеть, какие каталоги и файлы внутри соответствуют каким действиям.

Свернув это, вы ищете один из двух каталогов.

  • $g/rebase-merge
  • $g/rebase-apply
2 голосов
/ 05 января 2020

Да, это работает. Посмотрите , как git-prompt.sh делает , чтобы установить PS1:

if [ -d "$g/rebase-merge" ]; then
    __git_eread "$g/rebase-merge/head-name" b
    __git_eread "$g/rebase-merge/msgnum" step
    __git_eread "$g/rebase-merge/end" total
    if [ -f "$g/rebase-merge/interactive" ]; then
        r="|REBASE-i"
    else
        r="|REBASE-m"
    fi
else
    if [ -d "$g/rebase-apply" ]; then
        __git_eread "$g/rebase-apply/next" step
        __git_eread "$g/rebase-apply/last" total
        if [ -f "$g/rebase-apply/rebasing" ]; then
            __git_eread "$g/rebase-apply/head-name" b
            r="|REBASE"
        elif [ -f "$g/rebase-apply/applying" ]; then
            r="|AM"
        else
            r="|AM/REBASE"
        fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...