В удаленном репо я делаю git pull ...
Точнее, у вас есть пустой репозиторий (созданный с помощью --bare
) на сервере.Затем, либо в ловушке (такой как ловушка после получения) на сервере, либо войдя на сервер, вы заходите в этот пустой репозиторий и запускаете git pull
.
Это не удается, потому что git pull
требует рабочего дерева для работы.Это потому, что git pull
означает:
- run
git fetch
, затем - запустить вторую команду Git.
Первая команда - git fetch
- может использоваться в пустом хранилище.Второй, который обычно git merge
, не может быть использован в пустом хранилище.Вы можете указать Git использовать git rebase
вместо git merge
, но это также нельзя использовать в чистом хранилище.
Хотя есть и другие (довольно сложные) способы справиться с этим непосредственно на сервере,Обычный лучший способ: не делайте этого. ? Серверный репозиторий должен просто служить: он там для приема push-операций, которые помещают в него новые коммиты, и для обслуживания операций клонирования, которые получаютвсе коммиты из него.
Если вы хотите сделать что-то сложное, например извлечь из нескольких репозиториев Git и объединить различные коммиты, сделайте это в клоне.Как только вы разберетесь с результатом - некоторые слияния являются сложными и запутанными и требуют большого ручного вмешательства, отсюда возникает необходимость в рабочем дереве, в котором можно выполнять работу - сделать коммит из результата и отправить коммит на сервер,Сложная работа происходит в обычном (не голом) хранилище, которое контролирует человек.Простые вещи, ориентированные на сервер, происходят в простом пустом хранилище на сервере.
Обратите внимание, что весь смысл пустого хранилища в том, что он действует как простой получатель для git push
.В непустом хранилище с его рабочим деревом может быть кто-то, кто работает над ним.Если бы он получил толчок , пока человек работает, работа человека была бы не синхронизирована с базовым хранилищем.Когда человек совершит свою работу, это фактически отменит полученный толчок.Эффект примерно эквивалентен использованию git revert
с опцией -n
, за исключением того, что когда люди на самом деле do используют git revert -n
, они знают это, но когда они неосознанно возвращают толчки, они не1049 * знают это: у них нет возможности узнать.