Что произойдет, если я добавлю символическую ссылку в Subversion?
Я хотел бы добавить символическую ссылку в Subversion, и когда я делаю оформление заказа, все, что он делает, это добавляет такую же символическую ссылку прямо к оформлению заказа, но я боюсь добавить ее, если это не так.
9 ответов
Он будет работать до тех пор, пока вы на платформе Unix/Linux, когда вы проверяете это. Удачи в Windows, так как она не поддерживает символические ссылки.
См. Примечание на этой странице в книге SVN о символических ссылках для получения дополнительной информации.
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. Да, я знаю, что ФС в NTFS обозначает файловую систему.
Ничего не произойдет, если вы добавите символическую ссылку из Linux или другой POSIX OS. Это просто работает.
Но когда вы попытаетесь добавить символическую ссылку из Windows, вы увидите
C:\repo>svn add test_link
svn: E200007: Symbolic links are not supported on this platform
Я думаю, это потому, что Windows требует UAC для создания символической ссылки. Если Subversion разрешает символическую ссылку в Windows, UAC будет работать нормально svn up
,
Возможно я пропустил это в других ответах, но думал, что мог бы добавить.
Клиент 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, что он использует функцию symlink, о которой я не знаю в стандартных библиотеках 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.
Я только что заметил, что Gitub- клиент Git для Windows поддерживает символические ссылки Windows NTFS. Они даже предоставляют инструкции о том, как включить его! Еще один гвоздь, чтобы добавить к гробу Subversion.
Ну... я не уверен в техническом ответе или возможных последствиях, но я просто попробовал. Я создал сим-ссылку на каталог в кассе, которую я имел. Добавил и совершил это. Обнажил всю кассу. Еще раз проверил и ссылка sym все еще там с соответствующей ссылкой.
Надеюсь, этого будет достаточно для ваших забот;)
Когда символическая ссылка фиксируется в хранилище Subversion, Subversion вспоминает, что файл фактически был символической ссылкой, а также объектом, на который указывает символическая ссылка.
Когда эта символическая ссылка извлекается в другую рабочую копию в системе, отличной от Windows, Subversion восстанавливает реальную символическую ссылку на уровне файловой системы из версионной символической ссылки.
Но это никоим образом не ограничивает удобство использования рабочих копий в таких системах, как Windows, которые не поддерживают символические ссылки. В таких системах Subversion просто создает обычный текстовый файл, содержимое которого является путем, на который указала исходная символическая ссылка. Хотя этот файл нельзя использовать в качестве символической ссылки в системе Windows, он также не помешает пользователям Windows выполнять другие действия, связанные с Subversion.
Взято из svn-book
В faq говорится, что причина, по которой символические ссылки не поддерживаются в Windows, заключается в том, что по умолчанию только администраторы могут создавать символические ссылки.
Git для Windows поддерживает символические ссылки, но по умолчанию эта функция отключена. Это связано с тем, что по умолчанию разрешено создавать символические ссылки исключительно для административных учетных записей. Это тоже можно изменить.
Источник: https://github.com/git-for-windows/git/wiki/Symbolic-Links .
Да, я могу подтвердить, что управление версиями SymLinks работает правильно в Subversion.