Есть ли способ лучше, чем взлом строкового вывода, проверить, что git checkout требует обновления для обновления?

С GNUsed:

dig @1.1.1.1 google.com  +noall +answer +stats | \
  sed -nEz 's/.*[[:space:]]([0-9.]+)\n;; (Query time[^\n]*\n).*/\1 \2/p'

С опцией sedи -zввод обрабатывается как одна большая строка, а опция -nпечатает только совпадающие части(/p). Поскольку за IP-адресом сразу же следует новая строка и ;; Query time, мы можем использовать более простое регулярное выражение для сопоставления с IP-адресом. Обе строки захватываются в группу (…), а ввод заменяется на \1 \2, относящимся к этим группам.

0
23.11.2021, 19:33
1 ответ

На каком-то этапе вам потребуется получить информацию из удаленного репозитория. В настоящий момент вы используете git pullдля загрузки информации и ее слияния. Вы должны разделить это на 2 шага, сначала загрузите информацию о состоянии удаленного репо. В качестве второго шага посмотрите, достигли ли вы даты -до -, если нет, то объедините данные, сделайте очистку и сделайте.

Как сообщает вам git pull --help, он запускает git fetch, а затем либо git rebase, либо git merge.

Если вы знаете имя локальной ветки и ветки, которую она отслеживает, вы можете использовать низкоуровневую команду git show-ref, чтобы получить хеш-значения и проверить, равны ли они. Это работает, только если вы точно отслеживаете восходящую ветку, но очень дешево.

same_commit(){
    set -- $(git show-ref --hash --verify "$@")
    [ "$1" = "$2" ]
}
# get the changes if any, but don't merge them yet
git fetch origin
# See if there are any changes
if same_commit mainline origin/mainline
then
   echo "Everything up to date"
   exit 0
fi
# Now merge the remote changes
git pull origin
make clean
make

Если у вас также есть локальные изменения, вам нужно посмотреть, есть ли в вашей локальной ветке все восходящие потоки.

contains(){
    # return true if the first name has the second as an ancestor
    git merge-base --is-ancestor "$2" "$1"
}
if contains master origin/master
then
    echo nothing to do
    return 0
fi
2
23.11.2021, 21:33

Теги

Похожие вопросы