Как программно сравнить файлы в двух ревизиях в 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>
Если ваш чисто интересует код выхода и ничего более (нет вывода на консоль)