Что произойдет, если я добавлю символическую ссылку в Subversion? - PullRequest
50 голосов
/ 30 октября 2010

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

Ответы [ 8 ]

107 голосов
/ 18 сентября 2013

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

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

Эта дезинформация возникает из-за того, что Windows 2000 и Windows XP не поддерживают символические ссылки. Они поддерживали Точки соединения с каталогом , но не символические ссылки в стиле 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. Я понятия не имею, почему это так.

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

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

Итак, резюмируем:

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

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

13 голосов
/ 01 ноября 2010

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

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

10 голосов
/ 18 сентября 2013

Ничего не произойдет, если вы добавите символическую ссылку из 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.

9 голосов
/ 17 июня 2015

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

Клиент Windows 7:

TortoiseSVN 1.8.7, сборка 25475 - 64-разрядная, 2014/05/05 20:52:12
Subversion 1.8.9, -релиз

Клиент 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 его с помощью символической ссылки функция, о которой я не знаю, существует в стандартных библиотеках Windows.

Другой ответ указывает, что существует программа под названием mklink , которую можно использовать для создания символической ссылки в Windows 1 . В C и 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.

6 голосов
/ 30 октября 2010

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

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

4 голосов
/ 13 мая 2015

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

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

Взято из svn-book

2 голосов
/ 23 августа 2017

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

0 голосов
/ 05 июля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...