Игнорирование содержимого уже зарегистрированного каталога? - PullRequest
219 голосов
/ 25 августа 2009

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

Теперь я хочу, чтобы git отслеживала только (исходную) иерархическую файловую структуру, а плоский каталог (со всеми файлами в одной стопке) следует игнорировать.

Я добавил целевой каталог в .gitignore, но git все еще отслеживает изменения в нем. Я подумал, что если я фиксирую удаление старого файла в целевом каталоге, git может перестать отслеживать новое содержимое (скопированное скриптом), но это не так.

Как заставить git забыть о целевом каталоге?

Ответы [ 5 ]

515 голосов
/ 25 августа 2009

Эта команда заставит git отследить ваш каталог и все файлы в нем без фактического удаления:

git rm -r --cached <your directory>

Опция -r вызывает удаление всех файлов в вашем каталоге.

Опция --cached позволяет удалять файлы только из индекса git, а не из вашей рабочей копии. По умолчанию git rm <file> удаляет <file>.

72 голосов
/ 08 октября 2012

Если вам нужен отслеживаемый файл (зарегистрирован), но вы не хотите отслеживать дальнейшие изменения файла, сохраняя его в локальном хранилище, а также в удаленном хранилище, это можно сделать с помощью:

git update-index --assume-unchanged path/to/file.txt

После этого любые изменения в этом файле больше не будут отображаться в git status.

4 голосов
/ 25 августа 2009

Для подкаталога с именем blah/, добавленного в git, кажется, что оба следующих варианта работают, чтобы игнорировать новые файлы в blah/. Добавлено в .gitignore:

blah 
blah/*
0 голосов
/ 10 октября 2018

Не уверен, считает ли это меня плохим или делает меня плохим, но вот так.

  1. Я добавил *Generated* в корневой файл .gitignore
  2. Я отправил файлы, которые хочу сохранить, в виде GeneratedFile.Whwhat.ext. CheckedIn
  3. Я сделал git hook при оформлении заказа, чтобы вызвать скрипт powershell, выполняя это:

dir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}

Я чувствую себя немного плохо из-за себя ... но на самом деле это работает.

0 голосов
/ 25 августа 2009

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

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

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