По иронии судьбы, хотя поведение git по умолчанию заключается в том, что неотслеживаемые файлы считаются ценными, добавление файла в .gitignore
говорит git о том, что он может уничтожить файл, когда захочет.используется для обозначения сгенерированных файлов, и поэтому git будет перезаписывать их без вывода сообщений.Записи в .git/info/exclude
, возможно, предполагается использовать для локальных версий файлов конфигурации.
Пожалуйста, прочитайте это обсуждение во всей его полноте, поскольку, как представляется, существует некоторая путаница в отношении разницы междудва.Я только что попробовал это, и записи в .git/info/exclude
защищены, когда вы возвращаетесь назад во времени, создавая «ошибку: не отслеживаемый файл рабочего дерева .rvmrc будет перезаписан слиянием».Это различное поведение между этими двумя, возможно, не было преднамеренным, согласно Хунио С. Хамано.Однако, если вы можете удалить запись из .gitignore
и переместить ее в .git/info/exclude
, вы сможете выполнить эту работу, осознав, что последняя не является версионной или общей для репозиториев и потребует ручного сотрудничества с вашим коллегой.
Что касается проблемы с разрешениями, см. Это:
$ touch foo
$ ls -l foo
-rw-r--r-- 1 josh staff 0 Oct 1 09:55 foo
$ sudo chown root:wheel foo
$ ls -l foo
-rw-r--r-- 1 root wheel 0 Oct 1 09:55 foo
$ unlink foo
$ ls -l foo
ls: foo: No such file or directory
В Unix возможность создания или удаления файла основана только на разрешениях каталога , которыесодержит это.Разрешения на сам файл предназначены только для модификации файла (к сожалению, в вашем случае).Утилита rm
вежливо проверяет разрешения для файла, но unlink
является более низким уровнем и слепо вызывает системный вызов.