Grep список файлов, возвращаемых из состояния git - PullRequest
0 голосов
/ 06 ноября 2018

Итак, я пытаюсь очистить имеющийся у меня скрипт, который получает список промежуточных файлов, используя git status, чтобы вернуть относительный путь к файлу каждого подготовленного файла. Я посмотрел документацию по git status, чтобы узнать, есть ли способ заставить его возвращать путь абсолютный каждого промежуточного файла, но, похоже, для этого нет возможности, и git ls files или git diff будут работать для этого, так как конкретный вариант использования во время слияния.

Во время слияния использование git diff ничего не возвращает, в то время как git status показывает все подготовленные файлы, поэтому я застрял с использованием git status.

Из этого списка я хочу затем grep просмотреть список файлов, чтобы извлечь любые строки, содержащие строку "Path: ", и вывести ее. По сути, у меня есть список поэтапных файлов .yml, и я хочу извлечь все изменения свойства Path в этих ymls. Вот что у меня так далеко:

IFS=$'\n'
for file in `git status -s -uno | sed s/^..//`
    do
        relativePath=$(echo $file | sed 's/^[ \t]*//;s/[ \t]*$//' | tr -d '"')
        startPath=`pwd`
        grep "Path: " "$startPath/$relativePath"
    done
unset IFS

Пояснение:

git status -s -uno | sed s/^..//

  • Я передаю результат git status в sed, чтобы удалить лишние пробелы

relativePath=$(echo $file | sed 's/^[ \t]*//;s/[ \t]*$//' | tr -d '"')

  • Я отображаю путь к файлу и направляю его в sed, чтобы удалить лишние пробелы, которые не были удалены из начального вызова sed в начале цикла for. Затем я направляю это в tr, чтобы удалить первые и последние двойные кавычки из строки, поскольку мне нужно объединить этот относительный путь с моим начальным путем, чтобы получить полный путь.

startPath=`pwd`

grep "Path: " "$startPath/$relativePath"

  • Сохраните текущий рабочий каталог в переменной, затем объедините его с нашим относительным путем и передайте его в grep

Этот скрипт работает и извлекает данные, которые мне нужны, но я чувствую, что есть гораздо более чистый способ сделать это. Есть ли способ заставить git status возвращать полный путь каждого промежуточного файла, чтобы мне не нужно было иметь вторую переменную $startPath, которую я объединяю с моими $relativePath, которые передаются в grep?

1 Ответ

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

Поскольку вы, вероятно, вызываете git status из репо, все пути будут относительно $ PWD, так что вы можете просто добавить его на место, да?

$: git status -s | sed "s@^[^ ]* @$PWD/@"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...