社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

git在我的repo中显示一堆文件为已删除,但它们不是

beesleep • 5 年前 • 1374 次点击  

很奇怪,突然,git将我的repo中的大部分文件显示为已删除。 ls 给他们看, tree 给他们看,我可以打开。

我试图将存储库复制到另一个文件夹,git状态显示相同…

你知道这是怎么发生的,怎么解决?

编辑:我通过只复制 .git 文件夹到另一个目录, git status 此repo,然后再次将所有文件复制到新文件夹。过了一会儿,它会将文件重新显示为已删除…

edit2:为了解决这个问题,在保留所有文件的副本的同时,我硬着头皮休息,然后将备份的文件重新复制到repo中。现在一切都好了。

edit3(更多信息): 我在保存一份损坏的回购文件夹以备不时之需。我敞开心扉是因为我还在想这怎么会发生!

>> cat $(find . -name .gitignore)
git
*.pyc
*.lprof
*.cprof
profile.sh
/doc/
/.idea/
__pycache__
/tmp/

(对不起,用法语,我尽量翻译)。很多文件,只是显示了一些例子

 >> git status
 Sur la branche master (on the branch master)
...
Modifications qui seront validées : (modification that will be validated)
  (utilisez "git reset HEAD <fichier>..." pour désindexer)
    (supprimé = deleted)
    supprimé :        GUI/MainWindows.py
    supprimé :        GUI/PathParameters.py
    supprimé :        GUI/parameter_utils.py
    supprimé :        GUI/ui/ui_DefaultPathDialog.py
    supprimé :        GUI/ui/ui_mainGUI.py
    supprimé :        examples/__init__.py
    supprimé :        externals/__init__.py
    supprimé :        main.py
    supprimé :        tools/searchUtils.py
    supprimé :        tools/spatial.py
    supprimé :        tools/utils.py
    supprimé :        tools/yaml.py
    ....

Modifications qui ne seront pas validées : (modification that won't' be validated)
  (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
  (utilisez "git checkout -- <fichier>..." pour annuler les modifications dans la copie de travail)
    (modifié = modified)
    modifié :         GUI/ui/ui_mainGUI.ui
    modifié :         requirements.txt

Fichiers non suivis: (files not followed)
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)

    GUI/MainWindows.py
    GUI/base/
    GUI/parameter_utils.py
    GUI/ui/ui_DefaultPathDialog.py
    GUI/ui/ui_mainGUI.py
    examples/
    externals/
    main.py
    tools/

git diff --cached 显示以下内容,源代码为红色。时间很长,我不会把消息来源放在这里。如果你不想知道更多细节,就问吧!

>>git diff --cached

diff --git a/GUI/MainWindows.py b/GUI/MainWindows.py
deleted file mode 100644
index c9ef7ac..0000000
--- a/GUI/MainWindows.py
+++ /dev/null

正如我所解释的, LS 显示上面列出的所有已删除文件

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40056
 
1374 次点击  
文章 [ 1 ]  |  最新文章 5 年前
torek
Reply   •   1 楼
torek    6 年前

“要提交”的更改是存储在 指数 (阿卡 中转区 阿卡 隐藏物 )git进行新的提交 索引里有什么 马上 ,所以对索引的一个很好的描述是 你打算做什么 .

如果您复制了存储库,但没有复制索引(或以某种方式复制了索引,但没有保留所有索引),这将解释问题。索引既不是存储库本身,也不是工作树。相反,指数 之间 存储库和工作树。因此,文件可以在那里,在工作树中,按顺序排列,但在索引中丢失,git将告诉您,如果现在提交,删除将被提交。

你可以告诉git重新填写索引 当前提交,使用 git reset --mixed . 或者,可以使用 git add . 即:

  • Git重置--混合 :从复制(所有文件) HEAD 索引
  • git add file :复制(指定的 file )从工作树到索引

如果您将索引视为介于 提交和工作树,这一切都更有意义:

   HEAD           index         work-tree
----------      ----------      ----------
README.txt      README.txt      README.txt
file.ext        file.ext        file.ext
main.py         main.py         main.py
  • 这个 每个文件的副本都是只读的:任何提交都不能更改,它是已提交的副本。这些文件是压缩的,可能是高度压缩的,并且是一种特殊的、仅限Git的格式。

  • 每个文件的索引副本仅为git,就像 复制,除了它是读/写的:它已经 解冻 . 这个 下一个 提交将通过冻结索引副本来使用该索引副本(一旦冻结所有文件并完成提交,则该索引副本 变成 这个 复制是因为 对新提交的更改)。

  • 每个文件的工作树副本都是一个普通的文件,其格式是普通的。Git没有 使用 它做出承诺。吉特不太在乎 关于 它,真的;git只是为 使用,合作,如果你愿意的话可能会改变。

一旦你 改变 一个文件,你用 Git添加 将其复制回索引,覆盖旧的索引副本。这个 add process压缩并git验证文件,以便可以提交它。

这个 git commit 命令获取索引中的任何内容 马上 并将其冻结为新的提交。新的提交将成为 承诺。

当你第一次跑步时 git checkout branch ,git从tip commit填充索引和工作树 branch . 承诺变成 承诺,和 和索引匹配。当你做一个 新的 提交,新的提交将成为当前分支的尖端,并且 和索引匹配。请注意,工作树仅仅是一个 输出 最初的结帐,不是 输入 新的承诺。(或者更确切地说,其中的一些文件被放入 指数 如果你 Git添加 -编辑了一些或所有文件。)

通常,您可以使用 git rm :

  • git rm file 删除 文件 二者都 索引 工作树;或
  • 移除文件 文件 删除 文件 从索引中删除,但将其单独留在工作树中。

不管怎样,搬走之后,比如说, file.ext 从索引上看,你还保留着它 ,所以您有以下两个结果之一:

   HEAD           index         work-tree
----------      ----------      ----------
README.txt      README.txt      README.txt
file.ext                        file.ext
main.py         main.py         main.py

或:

   HEAD           index         work-tree
----------      ----------      ----------
README.txt      README.txt      README.txt
file.ext
main.py         main.py         main.py

在工作树中查找不会告诉您文件已从 指数 ,它只会告诉您文件是否已从 工作树 . 但是 git status 会告诉你的,因为 Git状态 git diff S:

  • 第一, Git状态 比较 提交到索引。不管有什么不同,git告诉你的是一个“需要承诺的改变”(“我猜是qui seront valides”)。不管是什么 相同的 ,吉特什么也没说。

  • 然后, Git状态 将索引与工作树进行比较。不管有什么不同,git告诉您,这是一个至少尚未承诺的变化。你可以 Git添加 当然,更新后的文件进入索引;之后,第一次比较, vs索引,会显示出一些不同的东西。

  • 一个不在索引中但在工作树中的文件被称为 未追踪 (“非瑞士人”)。即使文件在 承诺。(但是,请注意,您可以通过在 .gitignore )

结论:档案在 以及工作树,但不在索引中

你展示的结果正是这个案例的预期结果。文件在 但不在索引中:它将从 下一个 提交,除非你把它放回索引中。文件不在索引中,而是在工作树中:它是未跟踪的。