2

我在 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 一样,没有特殊步骤。

也提到了这个链接,但似乎不是最新的,因为这篇文章中指定的东西都不存在。关联

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

谢谢,让我知道这个问题是否适合这个论坛,或者我应该将它发布给超级用户。

编辑:

在 Eckes 发布之后,它帮助我找出了缺少工作树的错误。

我正在使用的工作站安装了另一个版本的 git,当我检查环境变量时,它被设置为它,一旦我清理它,我就不再收到以前的错误,但是 pull 仍然不起作用,出现错误:


编辑

 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
4

3 回答 3

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


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

于 2012-07-02T11:51:15.047 回答
1

看这里:git pull 疑难解答

裸存储库没有工作树。git pull 在功能上与 git fetch 后跟 git merge 的功能相同,并且要进行合并,您必须有一个工作树(以防有冲突需要解决)。

你必须推送到一个裸仓库。Pull 将不起作用,因为它需要合并到一个工作目录,这就是您看到的错误消息所说的内容。因此,从您将要处理的存储库中设置一个远程到裸存储库并从中推送。PS:创建裸仓库的理想方法是执行 git init --bare

谢谢~

于 2013-08-10T16:27:38.877 回答
1

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

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

在不区分大小写的文件系统上,GIT_WORK_TREE使用与文件系统认为的内容不一致的随机案例设置变量会使 Git 感到困惑,因为它不在工作树内。

更确切地说:

setup:修复不区分大小写的文件系统上的“内部工作树”检测

Git 有一个配置变量来指示它在不区分大小写的文件系统上运行:core.ignoreCase.
但该dir_inside_of()功能不尊重这一点。
结果,如果 Git 对当前工作目录的想法在其大写/小写中与GIT_WORK_TREE变量(例如C:\testvs c:\test)不一致,则用户将收到错误消息:

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

尝试运行变基时。

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

于 2015-10-16T07:29:29.497 回答