1

У меня есть следующие настройки, касающиеся Git:

  • Небольшой сервер под управлением Arch Linux и Git-клиент по умолчанию. У меня есть эта настройка, чтобы автоматически вносить изменения в определенные файлы, а затем помещать эти изменения в мой репозиторий Github.
  • Мой ПК с Windows 8.1 с установленным SmartGit. Иногда я делаю изменения в файлах, которые затем вручную помещаю в свой репозиторий Github.

Проблема, с которой я столкнулся, заключается в том, что когда я вносил некоторые изменения в файлы на моем ПК с Windows, а затем отправлял эти изменения, мой сервер Arch Linux, по-видимому, терял способность передавать свои изменения в удаленный репозиторий. Клиент Arch Linux может без проблем отправлять свои автоматические изменения до тех пор, пока я не запрошу что-нибудь на ПК с Windows. После этого что-то ломается. Единственный способ, который я нашел для решения этой проблемы, - это удалить локальный репозиторий на моем сервере Arch Linux, а затем создать новый локальный репозиторий, потянув его с удаленного компьютера.

Я написал сценарий клиента Arch Linux для извлечения и извлечения данных из удаленного репозитория, прежде чем вносить какие-либо изменения, и я делаю то же самое при внесении изменений на моем ПК.

Кто-нибудь может помочь мне выяснить, почему это происходит и что я могу сделать, чтобы предотвратить возникновение этой проблемы в будущем? Помощь будет принята с благодарностью.

Вот сценарии, которые я использую на своем сервере Arch Linux:

Основной скрипт:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

# Test if an internet connection is present
ping -c 3 google.com > /dev/null 2> /dev/null
if [ $? != 0 ]; then
        exit 1
fi

# Git requires that the working directory be the repository I am working with
cd /home/git-user/repositories/xjdhdr-random-code

# Update local repository to ensure no conflicts exist before I make changes
/home/git-user/bin/expect-gitpull.sh

# snip: Everything between these two commands basically make a lot of changes to a lot of text files. Probably has nothing to do with Git or my problem.

# Commit changes to remote repository.
cd /home/git-user/repositories/xjdhdr-random-code
git add -A -f --ignore-errors --
git commit -m "Automatic commit of machine generated changes to repository" --no-edit --


/home/git-user/bin/expect-gitpush.sh

exit 0

/home/git-user/bin/expect-gitpull.sh

#!/bin/expect

set password {*don't need anyone to see my passphrase*}

cd /home/git-user/repositories/xjdhdr-random-code

spawn git pull origin

expect "Enter passphrase for key '/home/git-user/.ssh/id_rsa':"

send -- "$password\r"

send -- "\r"

expect "%PROMPT%"

spawn git fetch -p origin

expect "Enter passphrase for key '/home/git-user/.ssh/id_rsa':"

send -- "$password\r"

send -- "\r"

expect "%PROMPT%"

/home/git-user/bin/expect-gitpush.sh

#!/bin/expect

set password {*ditto*}

cd /home/git-user/repositories/xjdhdr-random-code

spawn git push --recurse-submodules=check

expect "Enter passphrase for key '/home/git-user/.ssh/id_rsa':"

send -- "$password\r"

send -- "\r"

expect "%PROMPT%"

1 ответ1

0

Я понял, в чем проблема. По умолчанию ожидаемость установлена так, что время ожидания любых команд Expect через 10 секунд, если строка, которую их просили ждать, не появляется. В моем случае ожидаемый «% PROMPT%» истекал во время выполнения команды "git push". И поскольку после этого не было других команд, сценарий был прерван. Это означало, что толчок не мог завершиться успешно.

Решение состоит в том, чтобы добавить установленное время ожидания X в верхней части скрипта, заменив X на количество секунд, которое вы ожидаете ожидать (или используйте -1, если вы хотите, чтобы оно ожидало бесконечно).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .