Git показывает кучу файлов в моем репо как удаленные, но они не - PullRequest
0 голосов
/ 22 ноября 2018

Очень странно, неожиданно, git показывает большинство файлов в моем репо как удаленные.ls показывает их, tree показывает их, я могу их открыть.

Я пытаюсь скопировать репозиторий в другую папку, состояние git показывает то же самое ...

Любая идея, какэто может случиться, и как это решить?

РЕДАКТИРОВАТЬ: мне удалось временно решить эту проблему, скопировав только папку .git в другой каталог, git status этого репозитория, а затем снова скопировать все файлы вновая папка.Затем через некоторое время он снова показывает файлы как удаленные ...

РЕДАКТИРОВАТЬ2: Чтобы решить эту проблему, сохраняя копию всех моих файлов, я упираюсь головой, а затем повторно скопировать резервные файлы в хранилище,Сейчас все в порядке.

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 показывает все файлы, перечисленные как удаленные выше

1 Ответ

0 голосов
/ 22 ноября 2018

Изменения, которые «должны быть зафиксированы», - это те изменения, которые хранятся в index (или промежуточная область или кеш ).Git делает новые коммиты из того, что находится в индексе прямо сейчас , поэтому хорошее описание индекса заключается в том, что это то, что вы предлагаете совершить .

Если вы скопировали репозиторий, но не скопировали индекс (или скопировали его каким-либо образом, который не сохранил все это), это могло бы объяснить проблему.Индекс не является ни самим хранилищем, ни рабочим деревом.Вместо этого индекс находится между хранилищем и рабочим деревом.Таким образом, файлы могут находиться там, в рабочем дереве, в хорошем порядке, но отсутствовать в индексе, и Git скажет вам, что удаление будет зафиксировано, если вы выполните коммит сейчас.

Вы можете указать Gitдля повторного заполнения индекса из текущего коммита, используя git reset --mixed.Или вы можете записать указанные (или все) файлы рабочего дерева, используя git add.То есть:

  • git reset --mixed: копировать (все файлы) из HEAD в индекс
  • git add <em>file</em>: копировать (указанный file) из рабочего дерева в индекс

Если вы рассматриваете индекс между фиксацией HEAD и рабочим деревом, все это имеет больше смысла:

   HEAD           index         work-tree
----------      ----------      ----------
README.txt      README.txt      README.txt
file.ext        file.ext        file.ext
main.py         main.py         main.py
  • Копия HEAD каждого файла доступна только для чтения: никакие изменения не могут быть изменены, и это подтвержденные копии.Эти файлы сжимаются - возможно, сильно сжимаются - и в специальном формате только для Git.

  • Индексная копия каждого файла доступна только для Git, как и копия HEAD, за исключениемчто это чтение / запись: это было незаморожено .При фиксации next будет использована индексная копия путем ее замораживания (и как только все файлы будут заморожены и фиксация завершена, эта индексная копия станет копией HEAD, поскольку HEAD изменяет новый коммит).

  • Копия рабочего дерева каждого файла является обычным файлом в его обычной форме.Git не использует для совершения коммитов.Git не очень заботится о этом, правда;Git просто предоставляет вам для использования, работы и, возможно, изменения, если хотите.

Как только вы изменили файл, вы используете git add, чтобы скопировать его обратно в индекс, переписав старую копию индекса.Процесс add сжимает и выполняет Git-файл, чтобы он был готов к фиксации.

Команда git commit берет все, что находится в индексе прямо сейчас , и фиксирует это вновый коммит.Новый коммит становится коммитом HEAD.

При первом запуске git checkout <em>branch</em> Git заполняет индекс и рабочее дерево из коммита подсказки branch.Этот коммит становится коммитом HEAD, а HEAD и индексом совпадают.Когда вы делаете новый коммит, этот новый коммит становится кончиком текущей ветви, а HEAD и индекс совпадают.Обратите внимание, что рабочее дерево было просто выводом начальной проверки, а не вводом новой фиксации.(Он был, или, скорее, некоторые файлы в нем были помещены в index , если вы git add -ed некоторые или все файлы.)

Обычно вы удаляете файлы из индексаиспользование git rm:

  • git rm <em>file</em> удаляет file из и индекса и рабочего дерева;или
  • git rm <em>file</em> удаляет file из индекса, но оставляет его одного в рабочем дереве.

В любом случае, после удаления произнесите, file.ext из индекса, он у вас все еще есть в HEAD, поэтому у вас есть один из следующих двух результатов:

   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

Поиск работы-tree не скажет вам, что файл ушел из index , он только скажет вам, ушел ли файл из рабочего дерева .Но git status скажет вам, потому что git status работает два git diff s:

  • Сначала git status сравнивает фиксацию HEAD с индексом.Что бы ни отличалось, Git говорит вам, что это «изменение, которое нужно совершить» (я полагаю, «qui seront validées»).Что бы ни было то же самое , Git ничего не говорит о.

  • Затем git status сравнивает индекс с рабочим деревом.Что бы ни отличалось, Git говорит вам, что это изменение, которое, по крайней мере, пока не планируется совершить.Конечно, вы можете git add обновить файл в индексе;после этого первое сравнение, HEAD против индекса, покажет что-то другое.

  • Файл, которого нет в индексе, но находится в рабочем дереве, называетсябыть неотслеживаемым ("не suivis").Это верно, даже если файл находится в коммите HEAD.(Однако обратите внимание, что вы можете подавить эту жалобу на неотслеживаемые файлы, перечислив файл или шаблон для него в .gitignore.)

Вывод: файлы находятся в HEAD и рабочее дерево, но не в индексе

Вывод, который вы показали, является именно тем, чего следует ожидать в этом случае.Файл находится в HEAD, но не в индексе: он будет отсутствовать в следующем коммите, если вы не вернете его обратно в индекс.И файл не находится в индексе, но находится в рабочем дереве: он не отслеживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...