Я видел это чаще всего, когда корпоративный брандмауэр на рабочей станции / ноутбуке мешает, он убивает соединение.
, например. У меня есть серверный процесс и клиентский процесс на одной машине. Сервер прослушивает все интерфейсы (0.0.0.0), и клиент пытается подключиться к общедоступному / домашнему интерфейсу (обратите внимание, что это не интерфейс loopback 127.0.0.1).
Если на компьютере отключена сеть (например, Wi-Fi выключен), тогда соединение формируется. Если устройство подключено к корпоративной сети (напрямую или vpn), тогда соединение формируется.
Однако, если аппарат подключен к общедоступному Wi-Fi (или к домашней сети), тогда брандмауэр ударяет по убивающим связь. В этой ситуации подключение клиента к интерфейсу loopback работает нормально, а не в домашнем / общедоступном интерфейсе.
Надеюсь, что это поможет.
Вы можете управлять поведением по умолчанию, установка push.default в конфигурации git. Из документации git-config (1) :
push.default
Определяет действие, которое git push должен предпринять, если в командной строке не задано refspec, на удаленном компьютере не настроено refspec, и никакие refspec не подразумеваются ни одной из опций, указанных в командной строке. Возможные значения:
ничего
: ничего не вставлять
сопоставление
: вставлять все соответствующие ветви
Все ветки с одинаковыми именами на обоих концах считаются совпадающими.
Это используется по умолчанию, но не начиная с Git 2.0 ( simple
- новое значение по умолчанию).
upstream
: переместить текущую ветвь в ее восходящую ветвь ( отслеживание
является устаревший синоним для восходящего потока)
текущий
: переместить текущую ветвь в ветвь с тем же именем
простой
: (новый в Git 1.7.11) как восходящий поток, но отказывается отправлять, если ветвь вверх по течению ' s имя отличается от локального
Это самый безопасный вариант и хорошо подходит для начинающих.
Этот режим стал по умолчанию в Git 2.0.
Простой, текущий и восходящий режимы предназначены для тех, кто кто хочет вытолкнуть одну ветвь после завершения работы, даже когда другие ветки еще не готовы к выталкиванию
Примеры командной строки:
Для просмотра текущей конфигурации:
git config --global push.default
Чтобы установить новую конфигурацию:
git config --global push.default current
git push origin
отправит все изменения в локальные ветки, которые имеют соответствующие удаленные ветки в origin
Что касается git push
Работает как
git push
, где- это удаленный узел текущей ветки (или источник, если для текущей ветки не настроен пульт).
Из раздела «Примеры» git-push
справочной страницы
Git push попытается отправить все локальные ветки на удаленный сервер, вероятно, это то, что вам не нужно. У меня есть несколько удобных настроек, чтобы справиться с этим:
Соответствующие псевдонимы «gpull» и «gpush»:
В моем ~ / .bash_profile
get_git_branch() {
echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'
Таким образом, выполнение «gpush» или «gpull» просто подтолкнет моя ветка "сейчас на".
Я просто поместил это в свой раздел псевдонимов .gitconfig, и мне нравится, как это работает:
pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"
Переместит текущую ветку в исходную точку с помощью git pub
или другое репо с git pub repo-name
. Вкусные.