Как сравнить локальные и удаленные файлы git?

Мне нужно перечислить все отслеживаемые коммитированные файлы, которые существуют только локально. Скажем, мое локальное репо - это фиксация удаленного репо (на github или gitlab), и это мои локальные отслеживаемые коммитированные файлы:

a.txt
b.txt

А теперь представьте, что в моем удаленном репо есть только один из этих файлов:

a.txt

Какую команду git можно использовать для вывода списка различий между локальными и удаленными репозиториями с точки зрения отслеживаемых зафиксированных файлов? Чтобы быть предельно ясным, какая команда git (git-ls-files, gt-ls-remote, git-ls-tree и т. Д.) Может сгенерировать следующий вывод:

b.txt

РЕДАКТИРОВАТЬ 1: я должен сделать это, не извлекая коммитов из удаленного репо.

РЕДАКТИРОВАТЬ 2: Мне это нужно, чтобы написать крючок git для предотвращения нажатий, но я не уверен, что это хороший вариант использования хуков git.

2 ответа

Решение

Думаю, я разобрался:

git fetch origin && comm -2 -3 \
  <(sort <(git ls-tree -r master --name-only)) \
  <(sort <(git ls-tree -r origin/master --name-only))

Конечный результат:

b.txt

Спасибо Торек и polareper. Ваши предложения очень помогли.

diff -y <(git ls-files) <(git ls-tree -r master --name-only )

Я переношу разницу файлов в мастере на локальный (ls-files). 1

Другие вопросы по тегам