Git как убрать файлы из отслеживания
Не все файлы, созданные или обновленные в коде, следует фиксировать в Git. Временные файлы из среды разработки, тестовые выходные данные и журналы — все это примеры файлов, которые создаются, но не являются частью базы кода. Настройка файлов, отслеживаемых Git с помощью функции gitignore .
Из этого руководства вы узнаете, как выполнить следующие задачи:
- Использование gitignore для предотвращения отслеживания файлов
- Пропускать файлы только в вашей системе
- Пропускать файлы во всех репозиториев в системе
- Игнорировать изменения в зафиксированных файлах
Использование gitignore для предотвращения отслеживания файлов
Создайте gitignore -файл в репозитории Git, чтобы не допустить размещения в Git нежелательных файлов. Share . gitignore в ветви по умолчанию в репозитории. Вы и ваша команда можете обновить файл, чтобы изменить типы файлов, которые следует игнорировать.
Создание. gitignore
Если вы используете Visual Studio 2019 версии 16.8 или выше, опробуйте систему управления версиями Git. Узнайте, чем интерфейс Git отличается от Team Explorer, на странице наглядного сравнения.
Visual Studio автоматически создает файл . gitignore в репозитории при создании нового репозитория для проекта.
Скачайте файл template. gitignore для типа проекта и настройте его в соответствии с вашими потребностями. Если проект не соответствует шаблону, можно создать пустой . gitignore из командной строки. Перейдите в репозиторий Git и выполните одну из следующих команд, используя сведения о репозитории:
Windows
Linux и macOS
Git применяет . gitignore к папке и вложенным папкам, где она находится. Мы рекомендуем разместить . gitignore в корневой папке репозитория, чтобы избежать путаницы.
Настройка. gitignore
Измените gitignore , чтобы включить в репозиторий типы файлов, пути и шаблоны файлов. Git начинает пропускать эти файлы сразу после обновления . gitignore. Если другим пользователям вашей команды требуется один и тот же набор игнорируемых файлов, обязательно зафиксируйте изменения.
Если вы используете Visual Studio 2019 версии 16.8 или выше, опробуйте систему управления версиями Git. Узнайте, чем интерфейс Git отличается от Team Explorer, на странице наглядного сравнения.
чтобы изменить файл gitignore для репозитория, перейдите в представление Параметры в Team Explorer, а затем выберите репозиторий Параметры. Выберите изменить для gitignore.
Используйте текстовый редактор, например следующий пример, в котором используется vim:
Каждая строка в . gitignore исключает файл или набор файлов, соответствующих шаблону. Полный синтаксис gitignore очень гибок. Ниже приведены некоторые примеры наиболее распространенных записей.
Windows users: все пути к файлам в gitignore -файле используют разделитель косой черты, а не обратную косую черту.
Пропускать файлы только в вашей системе
Ваш gitignore является общим для участников команды, так как файл зафиксирован и отправлен в репозиторий Git. Чтобы исключить файлы только в системе, измените файл . git/info/Exclude в локальном репозитории. Изменения в этом файле не являются общими для других пользователей. Они применяются только к файлам в этом репозитории. Для этого файла используется тот же синтаксис , что и в файле. gitignore.
Пропускать файлы во всех репозиториев в системе
Настройте Global . gitignore для использования во всех репозиториев в системе с помощью программы командной строки , как показано в следующем примере:
Этот подход удобен для игнорирования целых типов файлов, которые вы не хотите зафиксировать, например скомпилированных двоичных файлов.
Игнорировать изменения в зафиксированных файлах
Временно игнорировать изменения
Во время разработки удобно отключить отслеживание изменений файлов в файле, зафиксированном в репозитории Git. Этот подход удобен при настройке параметров или файлов конфигурации, которые являются частью источника проекта, для собственной рабочей среды.
Возобновление отслеживания файлов с помощью следующей команды:
Вместо этого можно использовать следующие параметры. Эти параметры предназначены главным образом для отметки файлов, которые не должны изменяться разработчиками.
Чтобы отключить отслеживание изменений, выполните следующие действия.
Чтобы возобновить отслеживание изменений, выполните следующие действия.
Безвозвратная отмена отслеживания файла
Если файл уже записан в Git, он .gitignore не применяется. Git продолжит отслеживание изменений в этом файле.
Если вы хотите отключить отслеживание файла, необходимо явно указать git, который он должен удалить из отслеживания. Следуя этим указаниям, файл останется в локальном рабочем каталоге, но не будет относиться к записи в Git.
Добавьте файл в .gitignore .
Выполните следующую команду:
Зафиксируйте удаление файла и обновленный файл . gitignore в репозитории.
есть файл, который отслеживается git , но теперь файл находится на .gitignore список.
однако этот файл продолжает отображаться в git status после редактирования. Как вы заставляете git чтобы совсем забыть об этом?
.gitignore позволит предотвратить неотслеживаемые файлы могут быть добавлены (без add -f ) к набору файлов, отслеживаемых git, однако git будет продолжать отслеживать любые файлы, которые уже отслеживаются.
чтобы остановить отслеживание файла, необходимо удалить его из индекса. Это может быть достигнуто с помощью этой команды.
удаление файла из Главной редакции произойдет при следующем коммите.
серия команд ниже удалит все элементы из индекса Git (не из рабочего каталога или локального РЕПО), а затем обновит индекс Git, соблюдая при этом git игнорирует. PS. Index = Cache
первый:
затем:
Это принимает список игнорируемых файлов и удаляет их из индекса, а затем вносятся изменения.
Я всегда использую эту команду, чтобы удалить эти неотслеживаемые файлы. Однострочный, Unix-стиль, чистый вывод:
он перечисляет все ваши игнорируемые файлы, заменяет каждую выходную строку на строку в кавычках вместо того, чтобы обрабатывать пути с пробелами внутри, и передает все в git rm -r --cached чтобы удалить пути / файлы / dirs из индекса.
-
ваш приложения для игнорируемых файлов конфигурации-высшую.ini и использовать более совершенные файл config.ini (или поочередно, ищите
переместить его, зафиксировать, а затем переместить его обратно. Это работало для меня в прошлом. Вероятно, есть более "хитрый" способ добиться этого.
что не сработало для меня
поэтому я предлагаю
использует до ls-files и
Я сделал это с помощью git filter-branch. Точная команда, которую я использовал, была взята из man-страницы:
предупреждение: это приведет к удалению файла из всей вашей истории
эта команда воссоздаст всю историю фиксации, выполнив git rm перед каждой фиксацией и так избавится от указанного файла. Не забудьте создать резервную копию перед запуском команды как это будет будут потеряны.
допустим, вы уже добавили/зафиксировали некоторые файлы в свой репозиторий git, а затем добавили их в свой .гитюдного; эти файлы будут по-прежнему присутствовать в ваш индекс репозитория. В этой статье мы увидим, как от них избавиться.
Шаг 1: зафиксируйте все ваши изменения
прежде чем продолжить, убедитесь, что все ваши изменения зафиксированы, включая ваши .файла.gitignore
Шаг 2: Удалите все из репозитория
чтобы очистить РЕПО, используйте:
- rm это команда удалить
- - r позволит рекурсивный удаление
- - cached будут удалены только файлы из индекса. Ваши файлы все еще будут там.
The rm команда может быть неумолимой. Если вы хотите попробовать то, что он делает заранее, добавить -n или --dry-run флаг, чтобы проверить вещи.
Шаг 3: Re добавить все
Шаг 4: Commit
ваш репозиторий чистые :)
нажмите изменения на пульте дистанционного управления, чтобы увидеть изменения действуют и там.
обновить .gitignore file-например, добавьте папку, которую вы не хотите отслеживать в .gitignore .
git rm -r --cached . - удалить все отслеживаемые файлы, в том числе разыскиваемые и нежелательные. Ваш код будет в безопасности, пока вы сохранили локально.
git add . – все файлы будут добавлены обратно, за исключением .gitignore .
Я думаю, что, возможно, git не может полностью забыть о файле из-за его концепции (раздел "снимки, а не различия").
эта проблема отсутствует, например, при использовании CVS. CVS хранит информацию в виде списка изменений на основе файлов. Информация для CVS представляет собой набор файлов и изменений, внесенных в каждый файл с течением времени.
но в Git каждый раз, когда вы совершаете или сохраняете состояние своего проекта, он в основном делает снимок того, что все ваши файлы выглядеть в этот момент и сохраняет ссылку на этот снимок. Поэтому, если вы добавили файл один раз, он всегда будет присутствовать в этом снимке.
эти 2 статьи были полезны для меня:
git предположим-без изменений против skip-worktree и как игнорировать изменения в отслеживаемых файлах с Git
исходя из этого я делаю следующее, если файл уже отслеживается:
от в этот момент все локальные изменения в этом файле будут проигнорированы и не перейдут на удаленный. Если файл изменяется на удаленном, конфликт произойдет, когда git pull . Тайник не сработает. Чтобы решить ее, скопируйте содержимое файла в безопасное место и выполните следующие действия:
содержимое файла будет заменено удаленным содержимым. Вставьте изменения из безопасного места в файл и выполните еще раз:
если все, кто работает с проектом, будет выполнять git update-index --skip-worktree <file> , проблемы с pull должен отсутствовать. Это решение подходит для файлов конфигураций, когда каждый разработчик имеет свою собственную конфигурацию проекта.
это не очень удобно делать каждый раз, когда файл был изменен на удаленном, но может защитить его от перезаписи удаленным контентом.
переместить или скопировать файл в безопасном месте, так что вы не потеряете его. Затем git rm файл и фиксация. Файл по-прежнему будет отображаться, если вы вернетесь к одному из этих предыдущих коммитов или другой ветви, где он не был удален. Однако во всех последующих коммитах вы больше не увидите этот файл. Если файл находится в Git ignore, вы можете переместить его обратно в папку, и git не увидит его.
ответ от Мэтта страха был самым эффективным ИМХО. Ниже приведен только сценарий PowerShell для тех, кто в windows, чтобы удалить только файлы из своего репозитория git, который соответствует их списку исключений.
Если вы не хотите использовать CLI и работаете в Windows, очень простое решение-использовать TortoiseGit, Он имеет действие "удалить (сохранить локальный)" в меню, которое отлично работает.
Я клонировал проект, который включает в себя несколько .csproj файлов. Мне не нужно / не нравится, чтобы мои локальные csproj файлы отслеживались Git (или появлялись при создании патча), но они явно нужны в проекте.
Я добавил *.csproj к своему МЕСТНОМУ .gitignore , но файлы уже находятся в репо.
Когда я набираю git status, он показывает мои изменения, csproj которые я не заинтересован в отслеживании или отправке патчей.
Как убрать «отслеживание» этих файлов из моего личного репозитория (но сохранить их в источнике, чтобы я мог их использовать), чтобы не видеть изменения при создании статуса (или создании патча)?
@Cupcake, вопрос, на который ты ссылался, был написан через 15 дней после этого? Возможно, вы имеете в виду другое? Канонические вопросы @marflar не обязательно должны быть самыми старыми , только самые лучшие . На тот, на который яПросто вызовите git rm --cached каждый из файлов, которые вы хотите удалить из контроля версий. Пока ваши локальные шаблоны игнорирования верны, вы не увидите эти файлы, включенные в вывод состояния git.
Обратите внимание, что это решение удаляет файлы из репозитория, поэтому всем разработчикам необходимо поддерживать свои собственные локальные (не контролируемые редакцией) копии файла.
Чтобы git не обнаружил изменения в этих файлах, вы также должны использовать эту команду:
Что вы, вероятно, хотите сделать: (снизу @ Райан Тейлор ответ )
- Это говорит git, что вы хотите свою собственную независимую версию файла или папки. Например, вы не хотите перезаписывать (или удалять) производственные / промежуточные файлы конфигурации.
Если вы это сделаете git update-index --assume-unchanged file.csproj , git не будет проверять file.csproj на наличие изменений автоматически: это остановит их появление в состоянии git, когда вы их измените. Таким образом, вы можете пометить все ваши файлы .csproj таким образом, хотя вам придется вручную отмечать любые новые файлы, которые отправляет вам репозиторий верхнего уровня. (Если они есть в вашем .gitignore или .git/info/exclude , то созданные вами будут игнорироваться)
Я не совсем уверен, что такое файлы .csproj . если они что-то похожи на конфигурации IDE (аналогично файлам Eclipse .eclipse и .classpath), то я бы предложил, чтобы они никогда не контролировались исходным кодом в все. С другой стороны, если они являются частью системы сборки (например, Makefiles), то, очевидно, они должны - и был бы полезен способ получения необязательных локальных изменений (например, из local.csproj a la config.mk). разделите сборку на глобальные части и локальные переопределения.
Это единственный правильный ответ здесь! Я использую ответ @araqnids в течение многих лет, и он работает именно так, как было предложено для решения этой проблемы. Что означает префикс «file» в аргументе команды? Почему это не просто .csproj ? Есть ли способ, которым вы можете обнаружить, что это было сделано для файла, или для каких файлов это было сделано в репо? Я немного нервничаю из-за того, что забыл, что сделал это, а потом удивляюсь, почему, черт возьми, этот файл не обновляется позже! @GreenAsJade: git ls-files -v покажет файлы, которые предполагается неизменными, с помощью строчного индикатора (например, h вместо обычного H для кэшированных файлов).1. Это сохранит локальный файл для вас, но удалит его для всех остальных, когда они потянут.
git rm --cached <file-name> или git rm -r --cached <folder-name>
2. Это для оптимизации, как папка с большим количеством файлов, например, SDK, которые, вероятно, никогда не изменятся. Он говорит git прекратить проверять эту огромную папку каждый раз на наличие изменений, локально, поскольку она не будет иметь никаких изменений. assume-unchanged Индекс будет обнулен и файл (ы) перезаписаны , если есть вверх по течению изменения в файле / папке (при вытягивании).
3. Это говорит git, что вы хотите свою собственную независимую версию файла или папки. Например, вы не хотите перезаписывать (или удалять) производственные / промежуточные файлы конфигурации.
Важно знать, что git update-index не будет распространяться с помощью git, и каждому пользователю придется запускать его независимо.
Этот ответ является наиболее полным - он предлагает различные решения с разветвлениями каждого. В конкретном случае, с которым я работаю, пароль встроен в файл конфигурации. Я хочу распространить файл шаблона, а затем добавить пароль к моей копии. Копия с паролем должна игнорироваться и не перезаписываться. Как я могу проверить, в моем локальном компьютере, какие файлы применяются для «предположить, без изменений» или «skip-worktree»? Очень хороший ответ Но git выдает ошибку, когда я пытаюсь переключиться на другую ветку: error: «Ваши локальные изменения в следующих файлах будут перезаписаны извлечением . », и решение состоит в том, чтобы спрятать изменения перед переключением и отстегнуть, когда ты возвращаешься в ветку. @RyanTaylor: Я пытался сначала предположить, что без изменений (не работает), и пропустить команду рабочего дерева (не работает), когда я проверяю с помощью состояния git, файлы не отображаются, значит команда работает. Но когда я снова it gives me error that your local changes would be overwritten извлекаю код из репозитория git origin в этих 2 файлах, это означает, что он не отслеживается, верно?Это двухэтапный процесс:
Удалить отслеживание файла / папки - но сохранить их на диске - используя
Теперь они не отображаются как «измененные», но все равно отображаются как
Добавьте их в .gitignore
Нет, это удалит файл из отслеживания, сохранит его локально, но приведет к тому, что он будет удален для всех, кто тянет . В моем случае я случайно добавил папку, которую я не хотел отслеживать, так что это то, что мне нужно. Да, это действительно неправильный ответ на заданный вопрос - но, вероятно, это правильный ответ для большинства людей, которые находят этот вопрос в результатах поиска (например, я).Принятый ответ все еще не работал для меня
Эта ссылка очень полезна, особенно для рекурсивного удаления всех файлов в .gitignore Я возвращался сюда 3 раза, надеюсь, я смогу сохранить память до следующего раза! @ Комментарий Эдварда Ньюэлла, как и в приведенном выше ответе, также применим и здесь: «это удалит файл из отслеживания, сохранит его локально, но приведет к тому, что он будет удален для всех, кто извлекает »git rm -r - кэшировано.
мерзавец добавить.
git commit -m "исправление .gitignore"
Если у вас есть весь проект локально, но вы забыли добавить его, git ignore и теперь отслеживаете некоторые ненужные файлы, используйте эту команду, чтобы удалить все
убедитесь, что вы находитесь в корне проекта.
Тогда вы можете сделать обычное
Добавить
совершить
От себя
Вывод
Надеюсь, что это поможет людям, которые должны внести изменения в их .gitignore или забыли все это вместе.
- Удаляет весь кеш
- Смотрит на ваш .gitignore
- Добавляет файлы, которые вы хотите отслеживать
- Подталкивает к вашему репо
Как указано в других ответах, выбранный ответ является неправильным.
Ответ на другой вопрос предполагает , что это может быть пропуск worktree , которые потребуются.
Нет, не совсем: --skip-worktree используется для сохранения файла в хранилище, но для остановки отслеживания его изменений . Как говорится в вашем ответе: --skip-worktree полезен, когда вы указываете git не трогать определенный файл, потому что разработчики должны его изменить @ErdalG. Точно. В соответствии с вопросом, они хотят игнорировать любые изменения в файле, но сохраняют файл в Согласитесь с @the_new_mr --assume-unchanged и --skip-worktree получите аналогичный эффект, но их цели совершенно другие. Первый предназначен для ускорения производительности git путем обмана git не проверять определенные файлы , а второй - для игнорирования будущих изменений в определенных файлах , которые подходят для времени выполнения, но важных файлов.Чтобы сэкономить время, вы можете использовать правила, которые вы добавляете в свой .gitignore, для удаления нескольких файлов / папок, т.е.
git rm --cached app/**/*.xml
git rm --cached -r app/widgets/yourfolder/
Это очень хорошее решение, потому что в любом случае вы хотите починить gitignore шаг за шагомЧтобы предотвратить мониторинг файла с помощью git
И чтобы вернуть его обратно используйте
Многие люди советуют вам использовать git update-index --assume-unchanged . Действительно, это может быть хорошим решением, но только в краткосрочной перспективе.
Что вы, вероятно, хотите сделать, это: git update-index --skip-worktree .
(Третий вариант, который вам, вероятно, не нужен: git rm --cached он сохранит ваш локальный файл, но будет помечен как удаленный из удаленного хранилища.)
Разница между первыми двумя вариантами?
- assume-unchanged Это временно позволяет скрыть изменения из файла. Если вы хотите скрыть изменения, внесенные в файл, изменить файл, а затем оформить заказ в другой ветке, вам придется использовать, no-assume-unchanged вероятно, сохраненные изменения.
- skip-worktree будет следовать за вами независимо от того, какую ветку вы заказываете, с вашими модификациями!
Случай использования assume-unchanged
Предполагается, что этот файл не должен быть изменен, и дает более чистый вывод при выполнении git status . Но когда вы переходите в другую ветку, вам необходимо сбросить флаг и зафиксировать или сохранить изменения перед этим. Если вы активируете эту опцию, вам нужно будет разрешать конфликты, а git не будет автоматически объединяться. На самом деле скрывает только модификации ( git status не будет отображать помеченные файлы).
Мне нравится использовать его, когда я хочу только на некоторое время остановить отслеживание изменений + зафиксировать кучу файлов ( git commit -a ), связанных с той же модификацией.
Случай использования skip-worktree
У вас есть класс настройки, содержащий параметры (например, включая пароли), которые ваши друзья должны изменить в соответствии с их настройкой.
- 1. Создайте первую версию этого класса, заполните поля, которые вы можете заполнить, и оставьте другие поля пустыми / пустыми.
- 2: зафиксируйте и отправьте его на удаленный сервер.
- 3: git update-index --skip-worktree MySetupClass.java
- 4: Обновите свой класс конфигурации с вашими собственными параметрами.
- 5: вернитесь к работе над другой функциональностью.
Изменения, которые вы делаете, будут следовать за вами независимо от ветки. Предупреждение: если ваши друзья также хотят изменить этот класс, они должны иметь ту же настройку, иначе их изменения будут перенесены в удаленный репозиторий. При вытягивании удаленная версия файла должна перезаписать вашу.
PS: делайте одно или другое, но не оба, так как у вас будут нежелательные побочные эффекты. Если вы хотите попробовать другой флаг, вы должны сначала отключить его.
В предыдущем уроке по созданию репозитория Git мы научились создавать новый репозиторий git для проекта. Теперь, когда у нас есть проект Git, пришло время начать работать и с ним. Проект Git можно рассматривать как состоящий из трех частей:
- Рабочий каталог: локальный репозиторий, где вы будете выполнять всю работу, такую как создание, редактирование, удаление и организация файлов проекта.
- Промежуточная область: отслеживаемый локальный репозиторий, где вы будете перечислять изменения, внесенные в рабочий каталог.
- Репозиторий: удаленный репозиторий, в котором Git постоянно хранит изменения в виде различных версий проекта.
Эта статья полностью посвящена работе с локальным репозиторием и отслеживаемыми / не отслеживаемыми изменениями. Мы будем охватывать следующие команды git:
- Git add
- Git status
- Git remove
Прежде чем использовать вышеперечисленные команды, мы должны создать некоторые файлы в проекте репозитория git.
После этого репозиторий git будет выглядеть следующим образом:
Git Status
Git Status — это еще одна обязательная команда, которая возвращает информацию о текущем состоянии репозитория. Например, список измененных файлов, список отслеживаемых изменений на промежуточном этапе, неотслеживаемые изменения на локальном уровне и информация о текущей ветви и коммитах.
- Промежуточная область: Git имеет концепцию промежуточной области, где отслеживаются все обновления/изменения. Здесь хранятся изменения, которые вы хотели бы зафиксировать. Изменения могут представлять собой одну строку, файлы или части файлов.
- Неотслеживаемые изменения: Изменения/файлы в локальном каталоге, которые не перемещаются на промежуточную стадию, называются неотслеживаемыми изменениями.
- Отслеживаемые изменения: Изменения / файлы на промежуточном этапе называются отслеживаемыми изменениями.
1) Теперь откройте командную строку и перейдите в репозиторий git
2) Просто введите git status в командной строке.
branch master: говорит о том, что рабочее дерево является главной ветвью.
no commits yet: дает информацию о коммитах, на данный момент их еще нет.
Untracked files: говорит о том, что Git видит файлы, но еще не начал отслеживать изменения и отметил их красным цветом.
Status messages: дает соответствующие инструкции для промежуточных / нестагнирующих файлов.
Git add
Команда git add добавляет изменение в рабочий каталог в промежуточную область. Она сообщает Git, что в проекте есть несколько обновлений, которые пользователь хочет зафиксировать. Здесь следует отметить, что git add не влияет на удаленный репозиторий, так как изменения фактически не записываются до тех пор, пока вы не выполните git commit.
1) Давайте просто начнем с добавления одного файла к заявке. Чтобы использовать команду git add, просто введите git add filename. Слово filename здесь относится к имени файла, который вы редактировали, например CustomerData_IND.txt. Кроме того, используйте команду git status, чтобы увидеть, что git теперь может рассказать нам о состоянии репозитория.
Changes to be comitted: здесь отображается информация о отслеживаемых файлах, хранящихся на промежуточном этапе. Это тот самый, который мы добавили с помощью команды git add.
Untracked files: здесь отображается информация о неотслеживаемых файлах. Это те самые, которые добавили в проект раньше, но до сих пор не подтолкнули к постановке.
Команда Git Remove
Чтобы практиковать эту команду, давайте попробуем удалить тот же CustomerData_IND.txt, который был добавлен ранее.
Untracked files: CustomerData_IND.txt файл вернулся к списку игнорируемых изменения.
Добавление различных измененных файлов в промежуточную среду
Выше мы просто добавили один файл в staging. Что делать, если там будет несколько файлов для добавления. Это может быть легко достигнуто с помощью git add <file> <file>.
Чтобы добавить несколько файлов, введите
git add CustomerData_IND.txt CustomerData_UK.txt
Удаление различных файлов из промежуточного состояния
Как вы можете добавить несколько файлов в промежуточную среду, так же несколько файлов могут быть удалены и из промежуточной среды. команда для удаления нескольких файлов
Чтобы удалить несколько файлов, введите
Вывод: упомянутые два файла в команде теперь удаляются из промежуточного состояния и возвращаются в неотслеживаемый список.
Добавим все измененные файлы в промежуточную версию
Выше мы добавили несколько файлов в staging, но что делать, если там будет много файлов для добавления? Это может быть легко достигнуто с помощью git add *.
Чтобы добавить все измененные файлы, введите git add *
Все измененные файлы теперь перемещаются в промежуточный режим.
Таким же образом все файлы могут быть удалены из промежуточного состояния и перемещены обратно в неотслеживаемый список.
В последнем уроке мы познакомились с командой Git fetch и Read more
В одной из последних статей мы узнали о команде Git Read more
Мы уже знаем, как вносить изменения в локальное хранилище и Read more
Команда git push при выполнении перемещает изменения, внесенные пользователем на Read more
"Клонирование" означает создание идентичных особей естественным или искусственным путем. Клонирование Read more
Сегодня мы узнаем, как скопировать чужой репозиторий в наш аккаунт Read more
но при запуске git status они отображаются как удаленные. Если я попытаюсь зафиксировать изменения, файлы будут удалены, а не удалены из отслеживания.
Что я делаю неправильно?
Я также пробовал
но это, кажется, не проверяет только файлы. Но мне нужно удалить целую папку (включая подпапки) из отслеживания.
спросил(а) 2014-06-18T19:10:00+04:00 7 лет, 5 месяцев назадЯ столкнулся с этим вопросом, в то время как Googling для "git удалить папку из отслеживания". Вопрос ОП привел меня к ответу. Я обобщаю его здесь для будущих поколений.
Вопрос
Как удалить папку из моего репозитория git, не удаляя его с моего локального компьютера (т.е. среды разработки)?
Ответ
Шаг 1. Добавьте путь к папке в файл .gitignore вашего репо.
Шаг 2. Удалите папку из локального отслеживания git, но сохраните ее на своем диске.
Шаг 3. Вставьте свои изменения в репозиторий git.
Папка будет считаться "удаленной" с точки зрения git (т.е. она находится в прошлой истории, но не в последней фиксации, и люди, вытаскивающие из этого репо, получат файлы, удаленные с их деревьев), но оставайтесь в своем рабочем каталоге, потому что вы использовали --cached .
ответил(а) 2015-05-21T00:46:00+03:00 6 лет, 6 месяцев назадЭто работает для меня:
--ignore-unmatch здесь важна, без этой опции git выйдет с ошибкой в первом файле, не содержащем индекса.
Чтобы забыть каталог, рекурсивно добавить /*/* в путь:
Использование git rm --cached не подходит для совместной работы. Подробнее здесь: Как остановить отслеживание и игнорировать изменения в файле в Git?
В документации git:
Еще одна полезная вещь, которую вы можете захотеть - сохранить файл в рабочем дереве, но удалить его из своей промежуточной области. Другими словами, вы можете сохранить файл на своем жестком диске, но не git отслеживать его больше. Это особенно полезно, если вы забыли добавить что-то в свой файл .gitignore и случайно поставили его, например, большой файл журнала или кучу скомпилированных файлов. Для этого используйте опцию --cached:
Так что, возможно, не включайте "-r"?
ответил(а) 2014-06-18T19:23:00+04:00 7 лет, 5 месяцев назадШаг 2.5: зафиксируйте ваши изменения:
Если вы толкаете, не делая этого сначала, это ничего не делает!
Я знаю, что это старая ветка, но я просто хотел добавить немного, поскольку отмеченное решение не решило проблему для меня (хотя я пробовал много раз).
Единственный способ остановить отслеживание папки в git-форме - это сделать следующее:
Сделайте резервную копию локальной папки и положите в безопасное место. Удалить папку из вашего локального репо Убедитесь, что кэш очищен git rm -r --cached your_folder/ Добавьте your_folder/ в .gitignore Зафиксируйте изменения Добавьте резервную копию обратно в репозиторий
Теперь вы должны увидеть, что папка больше не отслеживается.
Не спрашивайте меня, почему просто очистка кэша не работает для меня, я не супер-мастер Git, но именно так я решил проблему.
Читайте также: