Временно удалить файлы из git
Я настроил локальный мерзавец на моей машине. Когда я инициализировал git, я добавил предварительно скомпилированные библиотеки и двоичные файлы. Однако сейчас, во время моей разработки, я не хочу периодически проверять эти файлы. Я не хочу удалять эти файлы из репо. Есть ли способ не отслеживать эти файлы, пока я не закончу свою разработку. (Я думаю, что не могу использовать.gitignore, так как он работает только для тех файлов, которые не находятся в git. Я хочу временно отключить отслеживание файлов.)
13 ответов
git update-index должен делать то, что вы хотите
Это скажет Git, что вы хотите начать игнорировать изменения в файлеgit update-index --assume-unchanged path/to/file
Когда вы хотите начать отслеживать сноваgit update-index --no-assume-unchanged path/to/file
Вы можете сохранить ваши файлы без изменений после
git rm -r --cached <file>
добавьте ваши файлы с
git add -u
их подталкивать или делать что хочешь.
git rm --cached
Тем не менее, вы не должны в первую очередь создавать скомпилированные двоичные файлы и внешние зависимости. Используйте инструмент, такой как Bundler, чтобы использовать их.
Используйте следующую команду, чтобы распаковать файлы
git rm --cached <file path>
Не ответ на оригинальный вопрос. Но это может кому-то помочь.
Чтобы увидеть внесенные вами изменения (узнать, какие файлы помечены как --assume-неизмененные)
git ls-files -v
Полученный список файлов будет иметь префикс с одним символом (например, H или h). Если это строчная буква (то есть h), то файл был помечен --assume-неизменным
Git-book упоминает об этом в разделе 2.4: "Отмена вещей". По сути, вам нужно сбросить состояние индекса для некоторых файлов обратно в состояние HEAD, то есть в состояние последней проверки (или фиксации). Это отменяет размещение файла в текущем индексе. Команда для этой задачи git reset
[1].
Итак, команда, которую вы должны выполнить:
git reset HEAD /path/to/file
Более новые версии git (я полагаю, начиная с 1.6 или около того) дают эту команду (и многие другие) в качестве подсказки при выполнении git status
, Эти версии очень удобны для пользователя. Персональный совет: если вы используете только несколько файлов, используйте git add -i
, Это запустит интерактивный инструмент постановки, который делает вещь особенно легкой. Кроме того, я настоятельно рекомендую прочитать книгу, так как она очень четко описывает использование git в практических ситуациях.
Я предполагаю, что вы спрашиваете, как удалить ВСЕ файлы в папке сборки или в папке bin, а не выбирать каждый файл отдельно.
Вы можете использовать эту команду:git rm -r -f /build\*
Убедитесь, что вы находитесь в родительском каталоге каталога сборки.
Эта команда рекурсивно "удалит" все файлы, которые находятся в папках bin / или build /. Под словом "удалить" я подразумеваю, что git будет делать вид, что эти файлы "удалены" и эти файлы не будут отслеживаться. Git действительно отмечает эти файлы как находящиеся в режиме удаления.
Убедитесь, что ваш.gitignore готов к предстоящим коммитам.
Документация: git rm
Альтернатива assume-unchanged
является skip-worktree
. Последнее имеет другое значение, что-то вроде "Git не должен отслеживать этот файл. Разработчики могут и могут вносить локальные изменения".
В вашей ситуации, когда вы не хотите отслеживать изменения в (обычно больших) файлах сборки, assume-unchanged
хороший выбор.
В ситуации, когда файл должен иметь содержимое по умолчанию, и разработчик может изменить файл локально, но не должен проверять свои локальные изменения обратно в удаленное репо, skip-worktree
лучший выбор.
Другой элегантный вариант - иметь файл по умолчанию в репо. Скажите, что имя файлаBuildConfig.Default.cfg
. Ожидается, что разработчик переименует это локально вBuildConfig.cfg
и они могут внести любые местные изменения, которые им нужны. Теперь добавьтеBuildConfig.cfg
к .gitignore
поэтому файл не отслеживается.
См. Этот вопрос, который содержит полезную справочную информацию в принятом ответе.
Чтобы удалить все файлы Untrack. Попробуйте эту команду терминала
git clear -fdx
git reset [файл]
Получить файл обратно из рабочей области в рабочий каталог
Я часто забываю добавлять свои модули узлов в файл.gitignore, это решает эту проблему.
Бегать
git rm -r --cached file_to_git_ignore
Тогда иди к себеgitignore
файл и добавитьpath_to_file_to_git_ignore
Удачи
Для удаления неотслеживаемых файлов и папок установите git clean -fdx