没有工作树,不能使用Git-Windows-git-pull

时间:2012-07-02 10:42:17

标签: windows git github

我在Windows上面临与Git相关的问题,无法从git上的repo中提取更改。能够添加,提交和推送我的更改,但不能拉。

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

在搜索此错误后,我在SO上获得了一些链接,要求删除工作树或工作目录环境变量。这个链接似乎更多地解释了git如何工作而不是引用如何解决它而且似乎没有一个特定于windows。所以我发布了这个问题

我不是一个裸存储库,这里是git配置文件内容:

 [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使用mysgit。我是否需要设置其他参数或某些特定于Windows的环境变量,因为我在ubuntu上使用git也没有特殊步骤。

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

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

谢谢,让我知道这个问题是否适合本论坛,或者我应该将其发布到SuperUser。

修改:

在Eckes发布之后,它帮助我找到了丢失工作树的错误。

我正在处理的工作站安装了另外一个版本的git,当我检查环境变量时,它已设置为它,一旦我清理它,我不再得到上一个错误,但拉仍然无法正常工作,收到错误:


修改

 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

3 个答案:

答案 0 :(得分:2)

这很奇怪。查看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 repo目录的目录上发出git命令,则会发出第二个。只是为了确定:git pull必须在git repo中运行...


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

答案 1 :(得分:1)

见这里:Troubleshooting git pull

裸存储库没有工作树。 git pull在功能上与git fetch跟随git merge一样,并且要进行合并,你必须有一个工作树(如果你需要解决冲突)。

你必须推到一个裸仓库。 Pull不起作用,因为它需要一个工作目录来合并,这就是你看到的错误信息。 因此,设置一个遥控器到您将要处理的仓库的裸仓库并从中推出。 PS:创建一个裸仓库的理想方法是执行git init --bare

感谢〜

答案 2 :(得分:1)

cannot be used without a working tree.中路径的大小写不正确时,可以在Windows上看到此错误(" GIT_WORK_TREE")。
将通过git 2.7(2015年第4季度)

修复

commit 63ec5e1Johannes Schindelin (dscho)(2015年9月28日) Junio C Hamano -- gitster --commit 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]报告)。