Как я могу запустить «git status» и просто получить имена файлов - PullRequest
49 голосов
/ 08 марта 2011

в отличие от длинного относительного пути?

Ответы [ 7 ]

69 голосов
/ 09 марта 2011

Вывод git status --porcelain, разработанный для облегчения анализа в скрипте, выводит полные пути, а не относительные, независимо от того, где находится ваш текущий каталог в дереве.

Каждая строка, выводимая git status --porcelain, имеет два начальных символа, указывающих состояние файла (например, он не отслежен, изменен, новый, удален и т. Д.), За которым следует пробел, так что если вы просто хотите указать полный путь ко всему это будет упомянуто в выводе git status, который вы можете сделать:

git status --porcelain | sed s/^...//
51 голосов
/ 06 февраля 2013

Я думаю, что сокращение подходит для этого.

git status -s | cut -c4-
42 голосов
/ 16 марта 2011

Ага, я думаю Я просто понял вопрос : вам нужны базовые имена? Прикрепите | while read a; do basename "$a"; done к любому из следующих действий:

как насчет

  • git diff --name-only

    для изменений относительно индекса

  • git diff --name-only --staged

    для ... хорошо организованных чагов:)

  • git diff --name-only HEAD

    получил оба

7 голосов
/ 11 марта 2011

Чтобы получить только имена файлов , как вы и просили:

git status --porcelain | sed -e 's!.*/!!'

Я не понимаю, как это было бы полезно.

3 голосов
/ 31 мая 2012

Получить имя измененных файлов

git status --porcelain|awk '{if($1=="M") {print "basename " $2}}'|sh

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

git status --porcelain|awk '{if($1=="M") {print "scp " $2 " account_name@server_ip:~/my_codebase/$(dirname " $2 ")/;"} }'|sh
3 голосов
/ 08 марта 2011

git status всегда будет проходить вниз ( редактировать и выше) дерева и отображать относительные пути.Если вам нужен только файл в каталоге, в котором вы находитесь, См. Связанный ответ

2 голосов
/ 27 февраля 2015

git status выводит относительные пути, поэтому, если вы перейдете в тот же каталог, что и файл (в корневом каталоге вашего рабочего каталога), до запуска git status, он выведет только базовые имена добавленных / промежуточных файлов.

cd /long/path/to/my/repo/root/dir
"stuff" > ./newfile.txt
> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   /long/path/to/my/repo/root/dir/plus/some/more/levels/of/directory/structure/inside/it/changed_file.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#       long/path/to/my/repo/root/dir/plus/some/even/more/levels/of/directory/structure/inside/it/but_another_new_file.txt
#       newfile.txt
no changes added to commit (use "git add" and/or "git commit -a")

то есть, 'newfile.txt' указан без полного пути, потому что вы находитесь на том же пути, что и он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...