Выяснить (используя Git), был ли файл обновлен - PullRequest
0 голосов
/ 04 июля 2018

У меня есть несколько репозиториев Git, которые автоматически обновляются скриптом. Одна из задач сценария - запустить npm install для каждого репозитория (репозитории содержат проекты Node.js).

Время от времени это приводит к обновлению package-lock.json файла, и я хотел бы зафиксировать его автоматически, если он был изменен.

Конечно, я могу просто запустить:

git add package-lock.json
git commit -m 'Update dependencies.'

Но это не получится, если файл не был обновлен: хотя git add просто ничего не делает и завершается с кодом возврата 0, вызов git commit завершается неудачно с кодом выхода 1. Как я могу сделать это так, чтобы это происходило только в том случае, если файл действительно обновлялся?

Другими словами: если файл не был обновлен, я не хочу, чтобы часть git add / git commit происходила. Как я мог это сделать?

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

вы можете использовать git status --porcelain | grep . >/dev/null и проверить состояние выхода grep, чтобы увидеть, есть ли в вашем рабочем дереве изменения

Это работает, потому что git status --porcelain будет выводить все изменения, но не будет выводиться, если рабочее дерево чистое. grep . завершит успешное выполнение, если найдет совпадение, потерпит неудачу, если не найдет, а . является регулярным выражением для «всего» * ​​1007 *

0 голосов
/ 04 июля 2018

Вы также можете использовать git diff <filename>, это будет выводить изменения (если есть) или ничего, если нет изменений.

0 голосов
/ 04 июля 2018

Вы можете использовать git diff --exit-code --quiet <filename>, чтобы проверить, был ли файл изменен. Если возвращаемое значение равно 1, оно было изменено:

if ! git diff --exit-code --quiet package-lock.json ; then
    git add package-lock.json
    git commit -m 'Update dependencies.'
fi

При этом не нужно предварительно проверять файл и просто запускать строки

git add package-lock.json
git commit -m 'Update dependencies.' || true

будет иметь тот же эффект, и возвращаемое значение будет 0

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