'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)
我会发布我发现的灵魂。 如果您有更完整的答案,请继续添加。
只需运行
git daemon --reuseaddr --base-path=. --export-all --verbose --enable=receive-pack
(在计算机A上,而不是原始的git daemon
命令),并推送工程。
请注意,您必须运行
git reset --hard
在计算机A上使其“看到”来自计算机B的变化
发布脚本
进行硬重置的问题是,它会覆盖您在计算机A上进行的任何本地更改。
最终我意识到,拥有一个没有任何文件的单独的存储库(一个纯粹的克隆 )会更有意义,然后让计算机B把它推到它和计算机A上。 通过这种方式,它可以同时工作,并以平滑的方式合并所有更改。 你甚至可以有两个裸露的克隆,每个计算机上一个,并在它们之间进行推拉。
我遇到了这个错误,但对于那些使用git-http-backend的解决scheme似乎不同。 (通过http而不是SSH或GIT的git推/拉/克隆)
这必须在远程服务器上完成,最好在创build时完成。 (如果回购已经存在/正在使用,最后一行可以独立运行)
$ 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
我有一些与Git重置问题 – 硬,所以这里是我的替代解决scheme。
在当地的克隆回购做一个分支
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