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

У меня проблемы с git-репозиторием и windows. Проблема в том, что в репозитории git есть символьная ссылка linux, а у разработчиков, использующих windows, это явно не работает. Теперь, поскольку эта символическая ссылка никогда не должна изменяться, я хочу найти способ удалить ее на разработчиках и добавить папку на ее место (на что указывает символическая ссылка), но 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 верно для хранилища.
  • Создать файл .git/info/sparse-checkout содержащий две структуры: * включить все и !/foo исключить символическую ссылку foo (/ означает привязку к верхнему уровню).
  • Теперь вручную установите бит skip-worktree, затем удалите символическую ссылку.

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

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

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