Git считать неизменным vs skip worktree - игнорирование символической ссылки

У меня возникли проблемы с репозиторием и окнами git. Проблема в том, что репозиторий git имеет в нем символическую ссылку linux и с разработчиками, работающими с окнами, что явно не работает. Теперь, поскольку эта символическая ссылка никогда не должна меняться, я хочу найти способ удалить ее у разработчиков и добавить папку на своем месте (это то, что символические точки), но git игнорировать эти конкретные изменения. Теперь я могу удалить символические ссылки, создать папку с тем же именем и просто добавить .gitignore, который игнорирует все. Теперь, чтобы убедиться, что git игнорировать удаление символической ссылки, я нашел два возможных решения при исследовании. Решения, которые я нашел, следующие:

git update-index --assume-unchanged [FILE]
git update-index --skip-worktree [FILE]

Мой вопрос: какой вариант будет работать лучше всего? Я хочу убедиться, как только я сделаю это, что он никогда не будет отменен, если я специально не сделаю это. Я хочу убедиться, что вы вернулись, перезагрузились, создали ветки, слияния и т.д.... все отлично работает.

Ответы

Ответ 1

У обоих вариантов есть проблемы. --assume-unchanged сбрасывает себя всякий раз, когда индекс отбрасывается (например, git reset), так что, скорее всего, вы рано или поздно побьете вас. То же самое касается --skip-worktree... однако вы можете поддерживать локальный список файлов, которые не проверяются, так что бит skip-worktree устанавливается автоматически, когда это необходимо. Вот шаги:

  • Установите core.sparseCheckout значение true для репозитория.
  • Создайте файл .git/info/sparse-checkout, содержащий два шаблона: *, чтобы включить все и !/foo, чтобы исключить символическую ссылку foo (/ означает привязку к верхнему уровню).
  • Теперь вручную установите бит skip-worktree, затем удалите символическую ссылку.

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

[Отредактировано для добавления:] После дальнейшего обсуждения мы определили решение этой последней проблемы: поместите файл .gitignore с шаблоном * внутри каталога.