Как программно сравнить файлы в двух ревизиях в git?

Я хочу сравнить две версии файла (которые существуют по разным путям) при разных коммитах в git. Я не хочу diff, я просто хочу знать, совпадают ли содержимое и режимы. Документация для diff-файлов не указывает никакого значения для возвращаемых значений. Я не вижу чего-то похожего на cmp(1) в git. Есть ли другой сантехнический инструмент, чтобы сделать это, или у diff-файлов есть возвращаемые значения, которые выражают это?

2 ответа

Решение

git ls-tree <commit> -- <path> выходы

<mode> SP <type> SP <object> TAB <file>

<mode> это файловый режим. <object> это sha1, который указывает на содержание.

Сравните режимы и объекты.

<object> здесь можно назвать по-другому

<commit>:<path>

Так git rev-parse <commit>:<path> может выводить sha1 из BLOB-объекта или дерева. Сравнивая два sha1, мы можем видеть, является ли содержимое одинаковым или нет.

git diff --exit-code <commit> <commit> Я верю, что вы ищете. Это почти внизу в документах https://git-scm.com/docs/git-diff

Или же

git diff --quiet <commit> <commit> Если ваш чисто интересует код выхода и ничего более (нет вывода на консоль)

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