'receive-pack': услуга не включена для './.git'

(Решенный уже, я пишу это для следующего парня)

Я запускал демон git на одном компьютере и пытался синхронизировать с другим.

На компьютере A я побежал:

git daemon --reuseaddr --base-path=. --export-all --verbose

На компьютере B я побежал:

git clone git://computerA/.git source # worked
cd source
git pull # worked
git push # failed with "fatal: The remote end hung up unexpectedly"

На компьютере A выход демона:

[5596] Connection from 127.0.0.1:2476
[5596] Extended attributes (16 bytes) exist <host=localhost>
[5596] Request receive-pack for '/.git'
[5596] 'receive-pack': service not enabled for './.git'
[5444] [5596] Disconnected (with error)

Я отправлю сообщение, которое нашел. Если у вас есть более полный ответ, пожалуйста, добавьте его.

Ответ 1

Просто запустите

git daemon --reuseaddr --base-path=. --export-all --verbose --enable=receive-pack

(на компьютере A вместо оригинальной команды git daemon), и нажатие работает.

Обратите внимание, что вам нужно выполнить

git reset --hard

на компьютере A, чтобы он "видел" изменения с компьютера B.

Сообщение Script

Проблема с жестким reset заключается в том, что он перезаписывает любые локальные изменения, которые у вас были на компьютере A.

В конце концов я понял, что имеет смысл иметь отдельный репозиторий (голый клон), в котором нет файлов, затем попросите компьютер B нажать на него и компьютер A вытащить из него. Таким образом, он может работать в обоих направлениях и сглаживать все изменения плавно. У вас может быть даже два голых клона, по одному на каждом компьютере, и нажатие между ними.

Ответ 2

Я столкнулся с этой ошибкой, но решение кажется другим для тех, кто использует git -http-backend. (git push/pull/clone поверх http вместо ssh или git)

Это должно быть сделано на удаленном сервере, и лучше всего делать это при создании. (последняя строка может запускаться независимо, если repo уже существует/используется)

$ mkdir eddies  # MAKE folder for repo
$ chown -R eddie:websrv eddies/  #ensure apache (webserver) can access it
$ cd eddies/
$ git --bare init --shared
Initialized empty shared Git repository in /var/git/eddies/
$ ls
branches  config  description  HEAD  hooks  info  objects  refs
$ git config --file config http.receivepack true

Ответ 3

У меня есть проблема с git reset --hard, поэтому вот мое альтернативное решение.

В локальном клонированном репо сделайте ветвь

git checkout -b my_new_branch

в репозитории удаленного источника разрешить службу receive-pack

git daemon --reuseaddr --base-path=. --export-all --verbose --enable=receive-pack

нажмите новую ветку на удаленную область.

git push origin my_new_branch

объединить новую ветку в начало с помощью

git merge my_new_branch