Остановите отслеживание файла в git - без его удаления ни локально, ни при извлечении
Я хочу игнорировать дерево файлов / каталогов, которое ранее отслеживалось - игнорировать его навсегда, но не удалять при извлечении - просто игнорировать его в репозитории, в котором происходило извлечение. Это возможно? Почему нет (если нет)? Как мне поступить?
NB: принятый ответ в разделе Удалить файл из репозитория Git без удаления его из локальной файловой системы, а именно: git rm --cached path
- приведет к удалению файла по запросу. Насти. Не только это, но и "он удалит ваш файл, если вы извлечете ревизию до удаления, а затем извлечете ревизию после удаления" (см. Этот комментарий). См. Этот вопрос, чтобы найти другие интересные комментарии / ответы, которые не относятся к моей вопрос однако.
Я прекрасно осведомлен о --assume-unchanged
флаг, но это не то, что я хочу - я хочу сказать git (и всем клонам репозитория) "эй, прекратите отслеживать этот файл / дерево", но не "удалите этот файл / дерево" - поэтому я хочу --assume-unchanged
глобально, как это было. Если это невозможно (почему?), Мне нужен обходной путь.
Для записи я пытаюсь запустить git, чтобы использовать его для хранения / публикации истории, и я хочу иметь возможность остановить отслеживание файлов / каталогов по желанию - без их удаления.
Связанные с:
- git предположить-без изменений против skip-worktree - общий совет для предположения-без изменений следует принимать с небольшим количеством соли (при извлечении, сбросе - трудно и т. д.)
- git предположить, что без изменений vs пропустить рабочее дерево - игнорируя символическую ссылку - см. этот ответ для
core.sparseCheckout
2 ответа
Это невозможно. Чтобы предотвратить отслеживание новых изменений, вам необходимо удалить файл из хранилища (используя git rm
или же git rm --cached
). Это добавляет изменение в коммит, который удаляет файл. Когда это изменение затем применяется в других репозиториях, выполняется действие удаления, в результате которого файл удаляется.
У меня была такая же проблема, я использовал git rm --cached <file>
и он работал локально, но как только я сделал push на удаленный сервер, он также удалил файлы, и я не хотел этого. Затем я нашел git update-index --assume-unchanged <file>
и он игнорирует локальные изменения и не удаляет его с удаленного сервера, работал как шарм!