Git файл всегда изменяется, когда я ставлю его - PullRequest
0 голосов
/ 06 апреля 2020

у меня в репозитории есть файл sass, например _subfile.scss, когда я git add <path to the file> имя файла меняется на что-то вроде этого _subFile.scss, и я не вижу ничего, связанного со старым именем, если попробуйте и добавьте он снова возвращает свое имя и продолжает делать это, и я понятия не имею, ПОЧЕМУ ...

обратите внимание, что я никогда не вносил никаких изменений в этот файл ВСЕ, он просто появился в списке измененных файлов так что обычно я просто спрятал его, но спрятать ничего не значит, он просто остался там ...

Итак, есть идеи, почему это может происходить и как это решить?

Заранее спасибо.

РЕДАКТИРОВАТЬ 1: Git статус:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   src/scss/components/_featureddiscussionsmodule.scss

Git sta sh:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   src/scss/components/_featuredDiscussionsModule.scss

я не хочу добавить этот файл, потому что он вообще никогда не менялся, и я понятия не имею, почему он виден в изменениях: /

1 Ответ

1 голос
/ 06 апреля 2020

Вы упоминаете, что используете MacOS. MacOS по умолчанию имеет регистр в чувствительных файловых системах. То есть, если вы сначала создадите файл с именем, скажем, ReadMe.txt, а затем попытаетесь создать новый и другой файл с именем README.TXT, ОС откажется выполнить то, что вы просили. Вместо этого он просто перезаписывает ваш ReadMe.txt файл.

Теперь в ваших нескольких git status выходных данных у нас есть две строки:

   modified:   src/scss/components/_featureddiscussionsmodule.scss
   modified:   src/scss/components/_featuredDiscussionsModule.scss

Обратите внимание на два разных имени файла.

При коммиты сохраняются как Git, файлы хранятся в специальном, только для чтения, Git только сжатом формате. Это не обычные файлы ОС. У них нет имен файлов на уровне операционной системы. 1 Таким образом, Git может хранить два совершенно разных файла, один с именем src/scss/components/_featuredDiscussionsModule.scss, а другой - с именем в нижнем регистре. .

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

Вы можете легко:

  • полностью игнорировать эту ситуацию (просто никогда не используйте и не изменяйте этот файл и позволяйте ему, по-видимому, случайным образом перелистывать назад и вперед), или
  • удалите один из двух файлов, который заканчивается с тем же имя, когда вы работаете с этим коммитом, а затем делаете новый коммит, или
  • создаете чувствительную к регистру файловую систему: см. мой ответ на Как изменить регистр имен нескольких файлов, уже зафиксированных ?

Последний метод, вероятно, лучший, поскольку он позволяет вам работать с коллегами, возможно, используя Linux, который, вероятно, создал эту ситуацию в первую очередь.

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


1 Git использует форму хранилища объектов , в котором данные каждого объекта хранятся под идентификаторами ha sh. Сам коммит имеет идентификатор ha sh, и данные этого коммита содержат идентификатор ha sh объекта tree . Древовидные данные кодируют имена файлов - как данные, а не как имена ОС - и содержимое каждого файла хранится под еще одним ha sh ID. Таким образом, все, что видит операционная система, имеют имена с sh идентификаторами, и даже это происходит только с потерянными объектами: объекты в конечном итоге получают упакованные , чтобы сжимать их еще дальше, после чего остается только один файл упакованных объектов на уровне файлов ОС.

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