3

При перебазировании с помощью git мне интересно открыть файлы, которые имеют конфликты слияния.

Я могу сделать это с:

vi `git diff --name-status --diff-filter=U | awk '{print $2}'`

но если я псевдоним, что:

alias gdn="vi $(git diff --name-status --diff-filter=U | awk '{print $2}')"

Это не сработает. Я также пытался написать это как функцию, но безрезультатно.

Какой правильный синтаксис?


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

3 ответа3

1

Я что-то пропустил?  Почему бы вам просто не определить псевдоним как команду?

alias gdn="vi `git diff --name-status --diff-filter=U | awk '{print $2}'`"

или же

alias gdn="vi $(git diff --name-status --diff-filter=U | awk '{print $2}')"

(Вам не нужно иметь ; в конце.)

1

Это работает здесь:

alias gdn='vim $(git diff --name-status --diff-filter=U | awk "{print \$2}")'

Вы можете использовать cut вместо awk:

alias gdn='vim $(git diff --name-status --diff-filter=U | cut -f2)'

Обратите внимание, что это не будет работать с именами файлов, в которых есть пробелы.

-1

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

Единственное решение, которое я нашел для работы, это заменить символы новой строки пробелами. Есть много решений этой проблемы, но я нашел tr , наиболее подходящим для этой работы:

alias gdn="vim $(git diff --name-status --diff-filter=U | cut -f2 | tr '\n' ' ' )"

Этот псевдоним был полезен для редактирования конфликтов слияния при использовании git rebase . Если вы хотите открыть файлы с пометкой измененный git status :

alias gsm="vim $(git status --porcelain | cut -f2 -s -d 'M' | tr '\n' ' ' )"

M - это только одна из опций изменения git , полный список здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .