Git-Windows-git-pull不能在没有工作树的情况下使用

我面临一个与Windows上的Git相关的问题,我无法从git上的回购拉动更改。 能够添加,提交和推送我的更改,但不能拉。

它给了我一个错误:致命的:C:** \ Git / libexec / git-core / git-pull不能在没有工作树的情况下使用。

在search这个错误时,我得到了一些链接,要求删除工作树或工作目录环境variables。 这个链接似乎更多地解释了git是如何工作的,而是引用了如何解决它,而没有一个看起来像windows特有的。 所以我张贴这个问题

我不是一个裸仓库,这里是gitconfiguration文件的内容:

[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true hideDotFiles = dotGitOnly [remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = https://username@github.com/Project/projectname.git [branch "master"] remote = origin merge = refs/heads/master 

第一次在Windows上使用GIT是使用它的mysqit。 我是否需要设置其他参数或特定于Windows的某些环境variables,就像在Ubuntu上使用git一样,也没有特别的步骤。

也提到这个链接,但是doest似乎是最新的,因为在这篇文章中没有任何东西存在。 链接

任何build议或帮助表示赞赏。

谢谢,让我知道如果这个问题是适合在这个论坛或我应该发布给超级用户。

编辑:

Eckes发布后,它帮助我找出失踪工作树的错误。

我正在工作的工作站有一个更多版本的git安装,当我检查环境variables设置为它,一旦我清理它,没有得到以前的错误了,但拉仍然无法正常工作,得到一个错误:


编辑

  remote: Counting objects: 132, done. remote: Compressing objects: 100% (64/64), done. remote: Total 104 (delta 74), reused 70 (delta 40) Receiving objects: 100% (104/104), 33.05 KiB, done. Resolving deltas: 100% (74/74), completed with 24 local objects. fatal: write failure on 'stdout': Bad file descriptor error: https://github.com/Project/projectname.git did not send all necessary objects 

Solutions Collecting From Web of "Git-Windows-git-pull不能在没有工作树的情况下使用"

真奇怪。 看着Git/libexec/git-core/git-pull (从git version 1.7.11.msysgit.0 ),有命令

 require_work_tree_exists 

该命令在Git/libexec/git-core/git-sh-setup

 require_work_tree_exists () { if test "z$(git rev-parse --is-bare-repository)" != zfalse then die "fatal: $0 cannot be used without a working tree." fi } 

所以,如果你真的不是裸露的回购(即你的.git/config真的是你的回购之一),这将不会打印出消息。

但是在Git/libexec/git-core/git-sh-setup还有一个命令打印出这个字符串:

 require_work_tree () { test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = true || die "fatal: $0 cannot be used without a working tree." } 

我建议改变这两条消息中的一条 ,以便能够确定哪一条与您真正相关。 第二个是发出,如果你正在发行git命令的目录是没有git回购目录。 只要可以肯定: git pull必须在git repo中运行…


编辑:
为了检查,出了什么问题,请在你的git bash上尝试require_work_tree_exists的代码。 它不应该输入代码的then部分。

看到这里: 解决git拉

裸仓库没有工作树。 git pull在功能上与git fetch关联的git merge相同,要做一个合并,你必须有一个工作树(如果有冲突,你需要整理)。

你必须推到裸露的回购。 拉不能工作,因为它需要一个工作目录合并,这就是你看到的错误信息说。 因此,设置一个远程回购的回购协议,你将会继续努力。 PS:创建一个裸回购的理想方法是做git init –bare

谢谢〜

如果GIT_WORK_TREE中的路径不正确,则可以在Windows上看到此错误(“ cannot be used without a working tree. ”)。
将用git 2.7(2015年第四季度)

参见Johannes Schindelin( dscho )的 commit 63ec5e1 (2015年9月28日) 。
(由Junio C gitster合并- gitster -在提交6652939 ,2015年10月15日)

在不区分大小写的文件系统上,使用随机的情况设置GIT_WORK_TREE变量,这与文件系统认为混淆不清的Git不在工作树内部。

更确切地说:

setup :修复“大小写不敏感”文件系统中的“工作树内部”检测

Git有一个配置变量来表明它在不区分大小写的文件系统上运行: core.ignoreCase
但是dir_inside_of()函数并不尊重这一点。
因此,如果Git对当前工作目录的想法与GIT_WORK_TREE变量(例如C:\test vs c:\test )的大小写不一致,那么用户将被错误消息所迎接:

 fatal: git-am cannot be used without a working tree. 

当试图运行一个rebase。

这修正了Git-for-windows#402 (由Daniel Harding [living180]报告 )。