Остановите отслеживание файла в git - без его удаления ни локально, ни при извлечении

Я хочу игнорировать дерево файлов / каталогов, которое ранее отслеживалось - игнорировать его навсегда, но не удалять при извлечении - просто игнорировать его в репозитории, в котором происходило извлечение. Это возможно? Почему нет (если нет)? Как мне поступить?

NB: принятый ответ в разделе Удалить файл из репозитория Git без удаления его из локальной файловой системы, а именно: git rm --cached path - приведет к удалению файла по запросу. Насти. Не только это, но и "он удалит ваш файл, если вы извлечете ревизию до удаления, а затем извлечете ревизию после удаления" (см. Этот комментарий). См. Этот вопрос, чтобы найти другие интересные комментарии / ответы, которые не относятся к моей вопрос однако.

Я прекрасно осведомлен о --assume-unchanged флаг, но это не то, что я хочу - я хочу сказать git (и всем клонам репозитория) "эй, прекратите отслеживать этот файл / дерево", но не "удалите этот файл / дерево" - поэтому я хочу --assume-unchanged глобально, как это было. Если это невозможно (почему?), Мне нужен обходной путь.

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

Связанные с:

2 ответа

Решение

Это невозможно. Чтобы предотвратить отслеживание новых изменений, вам необходимо удалить файл из хранилища (используя git rm или же git rm --cached). Это добавляет изменение в коммит, который удаляет файл. Когда это изменение затем применяется в других репозиториях, выполняется действие удаления, в результате которого файл удаляется.

У меня была такая же проблема, я использовал git rm --cached <file> и он работал локально, но как только я сделал push на удаленный сервер, он также удалил файлы, и я не хотел этого. Затем я нашел git update-index --assume-unchanged <file> и он игнорирует локальные изменения и не удаляет его с удаленного сервера, работал как шарм!

Другие вопросы по тегам