我在Windows 10文件夹上有一个裸仓库。这个裸仓库已经使用了一段时间,并进行了数十次提交。偶然地,今天,我跑了
git status
fatal: this operation must be run in a work tree
git init
git add .
git commit -m "initial commit"
就可以了。
因此,我在之前的裸仓库中创建了一个工作仓库。现在,如果我尝试克隆它,我最终会从工作仓库中克隆文件,这些文件是裸仓库中的原始文件,而不是工作文件。
我想删除我启动的这个工作仓库,同时保持原始裸仓库不变。
我该怎么做?通过查看它们的时间戳,我可以看到更改过的文件,但这足够吗?恐怕我可能已经覆盖了某些内容,并且删除将危害所有内容。
谢谢。
答案 0 :(得分:1)
“裸”存储库如下所示:
$ git init --bare
Initialized empty Git repository in .../tmp/tbare/
$ ls -AF
HEAD config hooks/ objects/
branches/ description info/ refs/
您可能还有一些其他文件和/或目录,包括index
和logs
,这取决于您一直在做什么。
在该裸仓库中运行git init
会添加一个.git
目录,这样您现在就有两个 Git仓库:当前目录中的裸仓库和{{ 1}}非裸目录,当前目录为其工作树:
.git
bare 存储库中没有任何更改,但是现在$ git init
Initialized empty Git repository in .../tmp/tbare/.git/
$ ls -AF
.git/ branches/ description info/ refs/
HEAD config hooks/ objects/
找到了git ...
目录并使用了该目录。如果您希望使用裸仓库,则必须告诉Git不要看.git
而是看.git
:
.
如果您只是删除 $ git --git-dir=. status
fatal: This operation must be run in a work tree
$ git status | head -1
On branch master
目录,则Git返回到无法找到.git
,而是使用.git
来获取裸存储库的情况。 :
.
现在一切都恢复了以前的状态—您已经删除了其他存储库(及其所有提交,因为它们包含的有用内容也没有包含在其工作树中,该存储树是原始存储库)。
要获得温暖的模糊感觉,请在除去$ rm -rf .git
$ ls -AF
HEAD config hooks/ objects/
branches/ description info/ refs/
$ git status
fatal: This operation must be run in a work tree
之前运行.git
。在执行任何操作之前,您应该查看裸存储库持有的所有提交。