47 votes

receive-pack' : le service n'est pas activé pour './.git'.

(Déjà résolu, j'écris ceci pour le prochain gars)

J'exécutais le démon git sur un ordinateur et j'ai essayé de le synchroniser avec un autre.

Sur l'ordinateur A, j'ai exécuté :

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

Sur l'ordinateur B, j'ai exécuté :

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

Sur l'ordinateur A, la sortie du démon est la suivante :

[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)

Je vais poster la solution que j'ai trouvée. Si vous avez une réponse plus complète, n'hésitez pas à l'ajouter.

56voto

itsadok Points 12971

Il suffit de courir

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

(sur l'ordinateur A, au lieu de l'original git daemon ), et la poussée fonctionne.

Notez que vous devez ensuite exécuter

git reset --hard

sur l'ordinateur A pour qu'il "voie" les modifications apportées par l'ordinateur B.

Post script

Le problème d'un redémarrage à froid est qu'il écrase toutes les modifications locales que vous avez effectuées sur l'ordinateur A.

Finalement, j'ai réalisé qu'il serait beaucoup plus logique d'avoir un dépôt séparé (une clone nu ) qui ne contient pas de fichiers, puis l'ordinateur B y pousse et l'ordinateur A y tire. De cette façon, il peut travailler dans les deux sens et fusionner toutes les modifications de manière fluide. Vous pouvez même avoir deux clones nus, un sur chaque ordinateur, et faire du push-pull entre eux.

21voto

Eddie Points 4270

J'ai rencontré cette erreur, mais la solution semble différente pour ceux qui utilisent git-http-backend. (git push/pull/clone sur http au lieu de ssh ou git)

Ceci doit être fait sur le serveur distant, et il est préférable de le faire à la création. (la dernière ligne peut être exécutée indépendamment si le repo existe déjà / est en cours d'utilisation)

$ 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

4voto

J'ai un problème avec le git reset --hard donc voici ma solution alternative.

Sur le dépôt local cloné, créez une branche

git checkout -b my_new_branch

sur le repo d'origine distant activer le receive-pack service

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

pousser la nouvelle branche vers l'origine distante

git push origin my_new_branch

fusionner la nouvelle branche sur l'origine avec

git merge my_new_branch

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X