为什么我收到消息,"致命:这个操作必须在工作树中运行?"

Bia*_*cki 71 git

刚刚在Windows上安装了git.我将GIT_DIR变量设置为c:\ git \并验证此环境变量是由cygwin维护的(即echo $ GIT_DIR应该是什么).我去了我想创建git存储库的文件夹,让我们说c:\ www,然后运行:

git init
git add .
Run Code Online (Sandbox Code Playgroud)

然后我得到错误:

fatal: This operation must be run in a work tree
Run Code Online (Sandbox Code Playgroud)

我不确定出了什么问题,但是c:\ git目录有一个配置文件,上面写着:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = true
    symlinks = false
    ignorecase = true
Run Code Online (Sandbox Code Playgroud)

我很确定这不应该是裸露的,这是我们的问题.

blj*_*blj 169

此外,您可能位于.git子文件夹中,将一个文件夹向上移动到项目根目录.

  • 我见过的最佳答案!应该是接受的答案. (4认同)
  • 有没有办法抑制这个消息? (2认同)

Cas*_*bel 49

错误的直接原因是,是的,无法使用git-add裸存储库.根据定义,裸存储库没有工作树.git-add从工作树中获取文件并将它们添加到索引中,以准备提交.

不过,您可能需要在设置中加入一些思考.GIT_DIR是用于所有git命令的存储库目录.您是否真的尝试为您跟踪的所有内容创建单个存储库,可能是您系统中的所有内容?git存储库本质上跟踪单个目录的内容.您需要设置GIT_WORK_TREE一个包含您想要跟踪的所有内容的路径,然后您需要.gitignore阻止您不想跟踪的所有内容.

也许你正在尝试创建一个只跟踪的存储库c:\www?然后你应该把它放入c:\www(不要设置GIT_DIR).这是git的正常用法,其存储库位于"module"顶级目录的.git目录中.

除非你有充分的理由,否则我建议坚持使用git喜欢的方式.如果您有几件事要跟踪,您可能需要几个存储库!

  • 只需`git config --unset core.bare`. (49认同)
  • 1.我们只是跟随Linus T.的'20天命令中的'Everyday GIT'和git-init(1)manpPage(不幸的是可能已经过时了?)2.你的帖子只表明错误但没有给我们如何应对它的线索 (9认同)

Jac*_*man 16

万一发生在我身上的事情发生在其他人身上,我需要这样说:当我收到此错误时,我在我的项目中的.git目录中.我搜索并搜索了答案,但没有任何效果.我所要做的就是回到正确的目录.对我来说,这是一个面孔的时刻.如果那里的其他人和我一样愚蠢,我希望你发现这个答案很有帮助.


Fes*_*loe 10

只是克隆在另一个文件夹相同的项目和复制git的/文件夹到您的项目.

创建临时文件夹:

mkdir temp
Run Code Online (Sandbox Code Playgroud)

切换到临时文件夹

cd temp/
Run Code Online (Sandbox Code Playgroud)

克隆temp文件夹中的相同项目:

git clone [-b branchName] git@path_to_your_git_repository
Run Code Online (Sandbox Code Playgroud)

将.git文件夹复制到您的项目中:

cp -R .git/ path/to/your/project/

切换到您的项目并运行 git status

删除临时文件夹,如果你完成.

希望这会对某人有所帮助


CB *_*ley 8

显式设置GIT_DIR环境变量会强制git将给定目录用作git存储库.在正常使用期间永远不需要它.

在您的示例中,因为已经指定了a GIT_DIR并且未命名.git(前导点很重要)并且您没有提供--work-tree选项或设置GIT_WORK_TREE环境变量,所以当您说时,您需要一个裸存储库git init.

因为裸存储库没有工作树,所以对于裸存储库而言,大量命令没有意义.git add只是一个.

是否有特殊原因需要为git存储库使用非标准位置,而不是在.git工作树根下的子文件夹中?虽然可以安排它,但往往更多的工作,更容易出现用户错误.


kop*_*por 8

我有这个问题,因为.git/config包含worktree = D:/git-repositories/OldName. 我只是把它改成worktree = D:/git-repositories/NewName

我发现,因为我使用了git gui,它显示了更详细的错误消息:

git gui 错误


Bab*_*ibi 7

这应该解决它:

git config --unset core.bare
Run Code Online (Sandbox Code Playgroud)

  • 如果给个解决办法。还请解释一下原因。 (5认同)
  • 它帮助了我。我不在乎为什么:) (4认同)
  • 这解决了我的问题。 (2认同)

小智 6

创建一个简单的GIT存储库

一个小咆哮:git无法自己创建一个普通的裸存储库.愚蠢的git确实.

确切地说,无法克隆空存储库.所以一个空的存储库是一个无用的存储库.实际上,您通常会创建一个空的存储库并立即填充它:

git init
git add .
Run Code Online (Sandbox Code Playgroud)

但是,创建裸存储库时无法使用git add:

git --bare init
git add .
Run Code Online (Sandbox Code Playgroud)

给出错误"致命:此操作必须在工作树中运行".

你也看不出来:

Initialized empty Git repository in /home/user/myrepos/.git/
fatal: http://repository.example.org/projects/myrepos.git/info/refs not found: did you run git update-server-info on the server?

git --bare init
git update-server-info # this creates the info/refs file
chown -R <user>:<group> . # make sure others can update the repository
Run Code Online (Sandbox Code Playgroud)

解决方案是在其他地方创建另一个存储库,在该存储库中添加一个文件,并将其推送到裸存储库.

mkdir temp; cd temp
git init
touch .gitignore
git add .gitignore
git commit -m "Initial commit"
git push (url or path of bare repository) master
cd ..; rm -rf temp
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助你


小智 5

就我而言,我的存储库与“.git”文件位于同一文件夹中。我必须向上一级目录,它解决了。