Подтвердить что ты не робот

Как я могу запустить "git status" и просто получить имена файлов

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Я думаю, что разрез хорош для этого.

git status -s | cut -c4-

Ответ 3

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

как насчет

  • git diff --name-only

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

  • git diff --name-only --staged

    для... хорошо поставленных шагов:)

  • git diff --name-only HEAD

    получили оба

Ответ 4

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

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

Я не вижу, как это будет полезно.

Ответ 5

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

Ответ 6

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

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

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

git status --porcelain|awk '{if($1=="M") {print "scp " $2 " [email protected]_ip:~/my_codebase/$(dirname " $2 ")/;"} }'|sh

Ответ 7

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

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")

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