Невозможно увидеть новые файлы, добавленные в рабочий каталог git
git версия 1.7.4.1
Я использую git в Ubuntu.
Я скопировал некоторые файлы из другого каталога в рабочий каталог git. Обычно отображается под Untracked files
. Однако они не появляются. Поэтому я не могу их добавить.
Когда я делаю git status
, новые файлы не отображаются.
Я попытался добавить их, выполнив git add source.c
, а затем попробовал git status
. Файл не показывался.
Итак, я открыл файл и сделал save as
как одно и то же имя. Статус git все еще не смог увидеть файл.
Я сделал git ls-files
, и новые файлы отображаются в порядке.
Я проверял права доступа к файлам, и они такие же, как и все текущие файлы в моем каталоге git.
У меня никогда не было этой проблемы раньше.
Большое спасибо за любые предложения,
Ответы
Ответ 1
Если git ls-files
показывает source.c
, то он уже должен быть в индексе. Это означает, что оно уже отслеживается и, возможно, уже выполнено. Если source.c
вообще не отображается в git status
, файл должен быть зафиксирован.
Попробуйте изменить файл, чтобы увидеть, отображается ли оно как измененное в git status
. Чтобы убедиться в том, что файл проверен, запустите git cat-file -p HEAD:source.c
, чтобы просмотреть содержимое зарегистрированного файла (см. git help revisions
для документации о синтаксисе HEAD:source.c
).
Кроме того, может быть выполнено одно или несколько из следующих утверждений:
- Файл был изменен, но бит "предполагать неизменный" установлен в индексе. Взгляните на вывод
git ls-files -v source.c
. Если первый столбец является строчной буквой, тогда устанавливается бит "предполагать неизменный". Это предотвратит появление каких-либо изменений в git status
. Вы можете отключить бит "предполагать без изменений", запустив git update-index --no-assume-unchanged source.c
.
- Файл был изменен, но бит "skip-worktree" установлен в индекс. Если первый столбец вывода
git ls-files -v source.c
равен s
или s
, тогда устанавливается бит "skip-worktree" . Вы можете отключить бит "skip-worktree" , запустив git update-index --no-skip-worktree source.c
.
- Ваш индекс поврежден. Попробуйте удалить
.git/index
(Git будет воссоздавать его по мере необходимости).
- Проблемы с файловой системой предотвращают правильную работу
stat()
. Попробуйте запустить git update-index --really-refresh
. Если ваш рабочий каталог находится на сетевом диске (NFS, sshfs и т.д.), Попробуйте переместить репозиторий на локальный диск.
Ответ 2
Трудно сказать, что неправильно из приведенной информации, однако в качестве обходного пути вы можете попробовать git add -f filename.c
. Это добавит файл, даже если в противном случае он будет проигнорирован.
Ответ 3
Это действительно трюк в темноте, но у меня иногда были подобные проблемы, и это был случай одного из них:
- У вас есть правило в .gitignore, которое игнорирует файлы
- У вас есть .git-каталог в одном из каталогов, которые вы скопировали.
Ответ 4
Я создал пакет, заканчивающийся с помощью image.gen, у которого был соответствующий каталог, заканчивающийся на image/gen. И была запись .gitignore, которая была специфична для Android gen/.
Это привело к тому, что файл не добавлялся в git/показ в статусе git.
Проверьте ниже, это помогло мне решить проблему.
Используйте команду git check-ignore
для отладки вашего файла gitignore (исключить файлы).
В примере:
$ git check-ignore -v config.php
.gitignore:2:src config.php
Вышеописанная информация о шаблоне соответствия (если есть) для каждого заданного имени пути (включая строку).
Итак, возможно, расширение вашего файла не игнорируется, но весь каталог.
Возвращаемый формат:
<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>
Или используйте следующую команду для печати .gitignore
в папке пользователя и репо:
cat ~/.gitignore $(git rev-parse --show-toplevel)/.gitignore $(git rev-parse --show-toplevel)/.git/info/exclude
В качестве альтернативы используйте git add -f
, который позволяет добавлять в противном случае игнорируемые файлы.
Подробнее см. man gitignore
, man git-check-ignore
.
fooobar.com/questions/132833/...
Ответ 5
Возможно, стороннее приложение обновило ваш файл gitignore_global.txt
(~/.gitignore_global
в Linux/OS X).
Это было со мной. Я установил "Исходное дерево" и заметьте после этого, что git не отслеживает новые файлы.
Он обнаружил, что "Исходное дерево" изменило файл "gitignore_global.txt" и добавило ему несколько расширений, чтобы не отслеживать.
Попытайтесь найти этот файл и посмотреть, нет ли там расширений файлов, которые не будут там
Ответ 6
Удаление файла .git/index сделало трюк. Довольно неприятная ошибка, с которой я, похоже, вступаю в контакт, когда я клонирую скелетные модули в свой проект zf2.
Ответ 7
У меня была та же проблема. Git не показывал новых файлов, добавленных в мой проект.
Мой был вызван следующим:
Каким-то образом моя основная папка проектов добавлена в "Список игнорирования репозитория" (это то, что вызвано в SourceTree).
Это файл .gitignore в корне моей основной папки проектов.
Он работал после того, как я удалил имя папки в файле .gitignore.