我在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
答案 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)
裸存储库没有工作树。 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 63ec5e1见Johannes 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
vsc:\test
),则会向用户表示欢迎通过错误消息:
fatal: git-am cannot be used without a working tree.
尝试运行rebase时。