'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