Git не правильно определяет изменения определенных файлов? - PullRequest
0 голосов
/ 05 октября 2018

Я заметил, что Git неправильно определяет измененные файлы .out (которые уже есть в индексе), сгенерированные TI Code Composer Studio (Eclipse).После компиляции / сборки вызов git status показывает файлы .out в changes to be committed (как удаленные) и untracked files вместо changes not staged for commit.Любая идея, что определенно приводит к тому, что определенные файлы заканчиваются следующим образом?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Статус файла «удален», если он существует в текущем коммите, но отсутствует в индексе.

Файл не отслеживается, если он существует в рабочем дереве, но отсутствует в индексе.

В этом случае оба факта верны: файл находится в текущем коммите (заморожен там навсегда вместе со всеми другими файлами, зафиксированными в коммите), не в индексе (потому что кто-то или что-то удалило его из индекса), а - это в рабочем дереве.Учитывая ваше описание в этом комментарии , в среде IDE может быть либо запущен git rm для удаления файла из индекса и рабочего дерева, либо может быть выполнен эквивалент git add -u после удаления файла израбочее дерево, но перед повторным созданием файла в рабочем дереве.

(Команда git add, отметив, что файл отсутствует в рабочем дереве, удалит файл из индекса. Последующий git add, запускаемый, когда файл равен в рабочем дереве, скопирует его в индекс, но вам понадобится вариант git add, который добавляетфайл, которого еще нет в индексе.)

0 голосов
/ 05 октября 2018

Это не проблема с GIT.По замыслу это так и работает.Я запустил тест для двойной проверки, но если:

  1. Файл file.out является частью дерева
  2. Что-то / один запускается git rm file.out.Это должно быть git rm, если удаление не будет организовано, оно не будет воспроизводиться.
  3. Вы создаете файл с тем же именем.Он будет указан как неотслеживаемый.

Это стандартное поведение GIT.Поэтапные изменения «почти» фиксируются, и точно так же, как воссоздание файла, ранее удаленного в другом коммите, будет отображаться как новый, так что это произойдет здесь.Обратите внимание, что если удаление не является поэтапным, произойдет то, что вы ожидаете от правильного поведения - git будет знать, что это тот же файл.

Чтобы git понимал, что файлы одинаковы, вам нужнобежать

git add file.out

, поэтому git видит, что тот же файл все еще существует в области рабочей области, и просто перечисляет одну modified, подготовленную для фиксации.Причина, по которой он работает следующим образом, заключается в том, что у вас есть дополнительный наполовину зафиксированный слой, который вы все еще можете поиграть и восстановить (например, контрольную точку в игре).

Что касается , почему Composer делает это, яЯ не уверен.Я думаю, что правильное поведение ставит все изменения файла, поэтому я не знаю, почему новый файл не добавляется в дерево.Если это просто вывод журнала, который не является частью источника, рассмотрите добавление *.out к .gitignore, хотя вы должны убедиться, что Composer не добавляет его (и не игнорирует игнорирование).

...