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

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

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

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

1 Ответ

22 голосов
/ 26 мая 2011

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

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

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

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

...