我有一个现有的裸Git存储库,它是通过从CVS导入我们的源和历史而创建的。我做了一面镜子,使用:
git clone --mirror git://aserver.adomain.com/myrepo
然后,我想将所有分支和标记推送到我们的内部Git仓库主机,但推送似乎并没有将裸存储库视为Git仓库。
我尝试了以下内容:
git clone --mirror git://aserver.adomain.com/myrepo
git remote set-url origin http://user@anotherserver.adomain.com/project/myrepo.git
git push origin
导致:
$ git push origin
Password for 'xxxx':
error: cannot spawn git: No such file or directory
或者我尝试:
$ git remote rm origin
Note: Some branches outside the refs/remotes/ hierarchy were not removed;
to delete them, use:
...a whole lot of branches...
user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ ls
HEAD config description hooks info objects packed-refs refs
user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ git branch -a
...a whole lot of local branches...
user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ git remote add mygithost http://user@anotherserver.adomain.com/project/myrepo.git
user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ git push --all mygithost
Password for 'xxxx':
error: cannot spawn git: No such file or directory
&#34的含义是什么;不能产生git"?
如何将所有分支机构的裸仓库推送到空的现有仓库?
我已经搜索了几种可能性并审核了几个SO问题,但我没有看到解决此问题的方法。显然,我对这个过程的理解是有缺陷的。
我想我的理解并没有缺陷。错误以某种方式误导我认为裸存储库出现了问题,因为我可以克隆并按分支推送分支,从#34;常规"克隆。
事实证明,这是MSysGit中的一个错误。我转移到Linux,因为在我的情况下,保留所有历史是必需的。我不能简单地删除分支和标签,因为这些需要被推送到空的远程仓库。所以,以下工作确实有效:
$ git remote rm origin
$ git clone --mirror git://aserver.adomain.com/myrepo
$ cd /some/path/myrepo.git
$ git remote add mygithost http://user@anotherserver.adomain.com/project/myrepo.git
$ git push --all mygithost
$ git push --tags mygithost
答案 0 :(得分:7)
由于此评论导致了一个解决方案(请参阅问题末尾的编辑),此处将其转贴为答案:
您使用的是MSysGit吗?众所周知,如果您有大量标签,就会发生这种情况。请参阅This post。
答案 1 :(得分:1)
根据this post,潜在的问题是,如果安装到路径中包含空格的目录,则git行为不正常。这与我遇到错误并报告错误消息的环境一致。
我认为这种行为并不令人惊讶,因为git最初是由Linux的作者编写的。典型的解决方法似乎是使用对路径名中的空格不利的操作系统。
答案 2 :(得分:1)
在Windows上使用git时,由于大量标签,我也遇到此问题。我通过制作一个批处理脚本来解决它,一次一个地推送一些标签,直到标签数量略低于500.然后我能够制作一个git push
需要一些时间来完成,但是工作了
所以你几乎只需打开记事本,为你想要推送的每个标签写git push origin <yourtagname>
,每行一个,将它保存为你的git存储库文件夹中的blabla.bat并运行它。如果您只是复制标记文件夹.git\refs\tags
中的所有文件名并执行一些替换魔法,则可以更轻松地在每个文件名前面添加git push origin
。
答案 3 :(得分:1)
我遇到了同样的问题(不能产生git:没有这样的文件或目录)当试图推送stash / bitbucket git服务器从TFS导出的一些大型项目(在本地pc git文件夹上)。有一个分支和很多标签(3K +标签)。推送所有标签命令时出现问题,而按下单个标签则可以正常工作。我正在使用GitExtensions(基于msysgit)和远程连接是http。
解决方案突然爆发:我重新配置我的git 使用SSH连接到远程而不是http ,这奇迹般地解决了问题:推动所有标签成功