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

Что произойдет, если я добавлю символическую ссылку на подрывную деятельность?

Я хотел бы добавить символическую ссылку на subversion, и когда я делаю чек, все, что она делает, добавляет одну и ту же символическую ссылку прямо к моей кассе, но я боюсь ее добавить, если это не так.

4b9b3361

Ответ 1

Он будет работать так долго, если вы на платформе на базе Unix/Linux, когда вы это проверите. Удачи вам в Windows, поскольку она не поддерживает символические ссылки.

См. примечание на этой странице в книге SVN о символических ссылках для получения дополнительной информации.

Ответ 2

Windows Vista, Windows 7 и Windows 8 поддерживают настоящие символические ссылки в файловой системе NTFS 1. Эти символические ссылки полностью совместимы с символическими ссылками файловой системы Unix

Я хочу подчеркнуть вышесказанное. Слишком много людей ошибочно полагают, что Windows не поддерживает символические ссылки.

Эта дезинформация возникает из-за того, что Windows 2000 и Windows XP не поддерживают символические ссылки. Они поддерживали точки соединения Directory, но не символические ссылки в стиле POSIX. Еще более странно, ни Windows 2000, ни Windows XP не пришли с требуемой командой linkd для создания этих точек подключения к Справочнику.

Это уже не так. Windows Vista, Windows 7 и Windows 8 не только поддерживают символические ссылки, но также поставляются с требуемой командой mklink. Эти символические ссылки совместимы с символическими ссылками, совместимыми с POSIX (Mac OS X, Linux, Unix)

Теперь в основе проблемы:

Хотя Windows теперь поддерживает символические ссылки, а эти символические ссылки совместимы с символическими ссылками Unix/Linux/Mac, Subversion сама по себе не поддерживает символические ссылки в Windows. Я понятия не имею, почему это так.

Я не рекомендую помещать символические ссылки в репозиторий, даже если вы работаете только в ОС ОС Windows, а не в Windows. Вместо этого вам нужно, чтобы ваши шаги сборки и/или развертывания создавали любые необходимые символические ссылки. Это дает вам большую гибкость, так как вы можете протестировать свою ОС во время сборки или развертывания и справиться с любыми проблемами.

Кроме того, создание символических ссылок на этапе сборки/развертывания создает меньше головных болей для обслуживания, чем наличие в вашем репозитории. Представьте себе, если я переименую, перемещу или удалю файл с символической ссылкой, указывающей на него в моем репозитории. Я также должен запомнить любые символические ссылки и изменить их тоже - что-то, что вряд ли произойдет. В конце концов, невозможно просмотреть файл и узнать все символические ссылки, которые могут указывать на этот файл.

Итак, как recap:

  • Windows поддерживает символические ссылки, совместимые с символическими ссылками системы стиля POSIX.
  • Subversion по-прежнему не поддерживает символические ссылки в Windows.
  • Если вам нужны символические ссылки, создайте их во время сборки/развертывания части процесса как часть сценариев сборки/развертывания, а не как артефакт репозитория.

1. Да, я знаю, что FS в NTFS означает файловую систему.

Ответ 3

Ничего не происходит, если вы добавите символическую ссылку из Linux или другой ОС POSIX. Он просто работает.

Но когда вы пытаетесь добавить символическую ссылку из Windows, вы увидите

C:\repo>svn add test_link
svn: E200007: Symbolic links are not supported on this platform

Я предполагаю, что, поскольку Windows требует, чтобы UAC создавал символическую ссылку. Если Subversion разрешает символическую ссылку в Windows, UAC нарушит нормальный svn up.

Ответ 4

Возможно, я пропустил это в других ответах, но думал, что могу добавить.

Клиент Windows 7:

TortoiseSVN 1.8.7, Build 25475 - 64 бит, 2014/05/05 20:52:12
Subversion 1.8.9, -release

Клиент Linux:

svn, версия 1.6.17 (r1128011)

Символы не только "выживают", но и могут быть созданы и отредактированы в репозитории из Windows. Вам просто нужно создать файл со следующим содержимым и свойством SVN svn:special= *.

link name_of_source_file

Когда вы проверите это с помощью SVN-клиента, который знает, как создавать символические ссылки, вы создадите для вас. Клиент Windows 7 создает текстовые файлы, но клиент Linux создает символические ссылки.


В ответ на комментарий zb226:

"Клиент SVN, который знает, как создавать символические ссылки" - это двоичный файл, который был создан из источника, который был написан для использования функции, которая знает, как создать символическую ссылку, в файловой системе, которая имеет концепцию символических ссылок.

Быстрый просмотр Источник Subversion 1.8.13 показывает в строке 608 io.c, используя symlink, о котором я не знаю существующих в стандартных библиотеках Windows.

Другой ответ указывает, что существует программа под названием mklink, которая может быть используется для создания символической ссылки на Windows 1. В C и С++ обычно вы должны включить библиотеку вместо вызова программы, которая может или не может существовать. Это похоже на то, что у Microsoft есть аналогичная функция CreateSymbolicLink, но она выглядит очень незрелой. Я ничего не вижу о том, работает ли он на NTFS, что будет поддерживать 99,9% рабочих каталогов SVN на Windows, которые я ожидаю. Он упоминает ReFS, но я не думаю, что это будет обычно использоваться еще хорошо.

В целом, похоже, что наличие и стабильность символических ссылок в Windows с NTFS не существует, поэтому разработчики Subversion еще не добавили код, чтобы использовать эквивалентные для Windows команды.

Когда (или если) символические ссылки становятся повседневной частью Windows, я ожидаю, что они перейдут в Windows-клиенты Subversion. Большинство людей, которых я знаю, которые работают только в Windows, даже не знают, что такое символическая ссылка, и людей, которых я знаю, которые работают с не-ОС Windows, мало кто знает, что Microsoft экспериментирует с ними.

<суб > 1. В документации для mklink говорится, что это относится к "Windows Vista, Windows Server 2008, Windows Server 2012, Windows 8" и странно опускает Windows 7. Я предполагаю, что это на самом деле означает, что он существует и работает только в определенных версиях Windows, которые имеют определенные версии NTFS, которые поддерживают символические ссылки. Я не думаю, что символические ссылки всегда существовали в NTFS. Суб >


Я только что заметил, что Github Git для Windows клиент поддерживает символические ссылки Windows NTFS. Они даже предоставляют инструкции о том, как включить его! Еще один гвоздь, чтобы добавить к гробу Subversion.

Ответ 5

Ну... я не уверен в техническом ответе или о том, какие последствия могут быть, но я просто попробовал. Я создал сим-ссылку на каталог в кассе, который у меня был. Добавлен и зафиксирован. Обнаружил весь чек. Переустановил его, и сим-ссылка все еще существует с соответствующей ссылкой.

Надеюсь, что будет достаточно для ваших забот;)

Ответ 6

Когда символическая ссылка передается в репозиторий Subversion, Subversion помнит, что файл был фактически символической ссылкой, а также объектом, на который указывает "ссылка".

Когда эта символьная ссылка проверяется на другую рабочую копию в системе, отличной от Windows, Subversion восстанавливает символическую ссылку на реальном уровне файловой системы из версии с символикой ссылки.

Но это никоим образом не ограничивает удобство использования рабочих копий в таких системах, как Windows, которые не поддерживают символические ссылки. В таких системах Subversion просто создает обычный текстовый файл, содержимое которого является контуром, на который указывает исходная символическая ссылка. Хотя этот файл не может использоваться в качестве символической ссылки в системе Windows, он также не будет препятствовать пользователям Windows выполнять другие действия, связанные с Subversion.

Взято из svn-book

Ответ 7

faq говорит, что причина, по которой символические ссылки не поддерживаются в окнах, заключается в том, что по умолчанию администраторы могут создавать символические ссылки.

Ответ 8

Да, я могу подтвердить, что управление версиями SymLinks правильно работает в Subversion.