Наши разработчики используют сочетание ОС Windows и Unix. Поэтому символические ссылки, созданные на машинах Unix, становятся проблемой для разработчиков Windows. В windows (msysgit) символическая ссылка преобразуется в текстовый файл с путем к файлу, на который он указывает. Вместо этого я хотел бы преобразовать символическую ссылку в фактическую символическую ссылку Windows.
( Обновленное ) решение, которое я должен это:
- Напишите сценарий после оформления заказа, который будет рекурсивно искать текстовые файлы «symlink».
- Замените их символической ссылкой Windows (используя mklink) с тем же именем и расширением, что и у фиктивной "символической ссылки"
- Не обращайте внимания на эти символические ссылки Windows, добавив запись в .git / info / exclude
Я не реализовал это, но я считаю, что это серьезный подход к этой проблеме.
Вопросы:
- Какие, если таковые имеются, недостатки вы видите в этом подходе?
- Является ли этот сценарий после оформления заказа даже осуществимым? то есть я могу рекурсивно выяснить фиктивные "символические" файлы, которые создает git?
- Кто-нибудь уже работал над таким сценарием?
Ответы:
Вы можете найти символические ссылки, ища файлы в режиме
120000
, возможно, с помощью этой команды:После того, как вы замените ссылки, я бы рекомендовал пометить их как неизмененные
git update-index --assume-unchanged
, а не перечислять их в.git/info/exclude
.источник
git ls-files -s | grep '^12' | cut -f2
(второй столбец с разделителями табуляции; другие столбцы разделены пробелом)for f in `git ls-files -s | awk '/120000/{print $4}'`; do git update-index --assume-unchanged $f; done
Некоторое время назад я задавал этот же вопрос (не здесь, просто в целом), и в итоге я нашел решение, очень похожее на предложение ОП. Сначала я предоставлю прямые ответы на вопросы 1, 2 и 3, а затем опубликую решение, которое я в итоге использовал.
git checkout
шаг, но решение, приведенное ниже, удовлетворит мои потребности достаточно хорошо, чтобы буквальный сценарий после оформления заказа не был необходим.Решение:
Наши разработчики находятся практически в той же ситуации, что и OP: смесь Windows и Unix-подобных хостов, репозиториев и субмодулей со многими символическими ссылками git и никакой собственной (пока) поддержки в версии MsysGit для интеллектуальной обработки этих символических ссылок на хостах Windows ,
Спасибо Джошу Ли за то, что он указал на тот факт, что git передает символические ссылки в специальном файловом режиме
120000
. С помощью этой информации можно добавить несколько псевдонимов git, которые позволяют создавать и обрабатывать символические ссылки git на хостах Windows.Создание символических ссылок git в Windows
Использование:,
git add-symlink <source_file_or_dir> <target_symlink>
где аргумент, соответствующий исходному файлу или каталогу, должен принимать форму пути относительно целевой символической ссылки. Вы можете использовать этот псевдоним так же, как обычноln
.Например, дерево хранилища:
Может быть создан в Windows следующим образом:
Замена символьных ссылок git на жесткие ссылки NTFS + соединения
Использование:
Этот псевдоним может удалить символические ссылки git по одному или сразу за один раз. Симлинки будут заменены на жесткие ссылки NTFS (в случае файлов) или соединения NTFS (в случае каталогов). Преимущество использования жестких ссылок + переходов над «настоящими» символьными ссылками NTFS состоит в том, что для их создания не требуются повышенные разрешения UAC.
Чтобы удалить символические ссылки из подмодулей, просто используйте встроенную поддержку git для их перебора:
Но для каждого такого радикального действия приятно иметь разворот ...
Восстановление символьных ссылок git в Windows
Использование:,
git checkout-symlinks [symlink] [symlink] [...]
которое отменяетgit rm-symlinks
, эффективно восстанавливая хранилище в его естественное состояние (за исключением ваших изменений, которые должны остаться нетронутыми).И для подмодулей:
Ограничения:
Каталоги / файлы / символические ссылки с пробелами в пути должны работать. Но вкладки или новые строки? YMMV… (Под этим я подразумеваю: не делайте этого, потому что это не будет работать.)
Если вы или другие забыли
git checkout-symlinks
сделать что-то с потенциально широкими последствиями, напримерgit add -A
, локальное хранилище может оказаться в загрязненном состоянии.Используя наш «пример репо» из ранее:
Упс ...
По этой причине было бы неплохо включить эти псевдонимы в качестве шагов для пользователей Windows до и после создания проекта, а не после проверки или перед отправкой. Но каждая ситуация отличается. Эти псевдонимы были достаточно полезны для меня, так что настоящее решение после проверки не было необходимости.
Надеюсь, это поможет!
Ссылки:
http://git-scm.com/book/en/Git-Internals-Git-Objects
http://technet.microsoft.com/en-us/library/cc753194
Последнее обновление: 2019-03-13
mklink
звонков, конечно) - больше никаких Bashisms !add-symlink
Псевдоним теперь работает больше как LN (1) и может быть использован из любого каталога в хранилище, а не только репозиторий корневого каталога.rm-symlink
Псевдоним ( в единственном числе) был заменен наrm-symlinks
псевдониме (множественное число), которая в настоящее время принимает несколько аргументов (или без аргументов вообще, который находит все симлинка на протяжении всего хранилища, как и прежде) для избирательного превращения GIT символических ссылок на NTFS жестких ссылок + переходы ,checkout-symlinks
Псевдоним также был обновлен , чтобы принять несколько аргументов (или вообще никакого, == все) для селективного обращения вышеуказанных преобразований.Последнее замечание: хотя я тестировал загрузку и запуск этих псевдонимов с использованием Bash 3.2 (и даже 3.1) для тех, кто по-прежнему может зависнуть в таких древних версиях по ряду причин, имейте в виду, что такие старые версии, как эти, печально известны своим парсером ошибок. Если у вас возникли проблемы при попытке установить любой из этих псевдонимов, первое, на что вы должны обратить внимание - это обновить вашу оболочку (для Bash проверьте версию с помощью CTRL + X, CTRL + V). В качестве альтернативы, если вы пытаетесь установить их, вставив их в эмулятор терминала, вам может повезти, вставив их в файл и используя его вместо этого, например, как
Удачи!
источник
git add-symlink
рецепт был фантастически ценным для меня. Большое спасибо.Последняя версия git scm (testet 2.11.1) позволяет включать символические ссылки. Но вы должны снова клонировать хранилище с символическими ссылками
git clone -c core.symlinks=true <URL>
. Вам нужно запустить эту команду с правами администратора. Также можно создавать символические ссылки в Windows с помощью mklink. Проверьте вики .источник
tslint.json
файл, ссылающийся на файл в родительском каталоге, все еще содержит../tslint.json
. Жаль, потому что это действительно выглядело как самое простое из всех предложенных решений.git clone -c core.symlinks=true <URL>
А в Windows вы должны запустить его с правами администратора.Это должно быть реализовано в msysgit, но есть два недостатка:
Я сделал быстрый поиск, и сейчас активно ведется работа, см. Выпуск 224 .
источник
так как с GIT все изменилось, так как многие из этих ответов были опубликованы здесь, это правильные инструкции для правильной работы символических ссылок в Windows с
Август 2018
1. Убедитесь, что git установлен с поддержкой символических ссылок.
2. Скажите Bash создать жесткие ссылки вместо символических ссылок.
РЕДАКТИРОВАТЬ - (папка git) /etc/bash.bashrc
ДОБАВИТЬ В ДНО -
MSYS=winsymlinks:nativestrict
3. Установите git config для использования символических ссылок
или
ПРИМЕЧАНИЕ: я попытался добавить это в глобальный git config, и в данный момент он не работает для меня, поэтому я рекомендую добавлять это в каждый репозиторий ...
4. вытащить репо
ПРИМЕЧАНИЕ. Если вы не включили режим разработчика в последней версии Windows 10, вам необходимо запустить bash от имени администратора для создания символических ссылок.
5. Сбросить все символические ссылки (необязательно) Если у вас есть репо или вы используете подмодули, вы можете обнаружить, что символические ссылки создаются неправильно, поэтому для обновления всех символических ссылок в репо вы можете выполнить эти команды.
ПРИМЕЧАНИЕ: это сбросит все изменения с момента последнего коммита, поэтому убедитесь, что вы коммитили первым
источник
Краткий ответ: теперь они хорошо поддерживаются, если вы можете включить режим разработчика.
С https://blogs.windows.com/buildingapps/2016/12/02/symlinks-windows-10/
Легко пропустить все остальные объявления об «обновлении Создателя», но если вы включите режим разработчика, вы сможете создавать символические ссылки без повышенных привилегий. Возможно, вам придется переустановить git и убедиться, что поддержка символических ссылок включена, так как это не по умолчанию.
источник
gpedit.msc
->Local Computer Policy
->Computer Configuration
->Windows Settings
->Security Settings
->Local Policies
->User Rights Assignment
был каноническим способом назначать права пользователей, таких какSeCreateSymbolicLink
и друзья, целую вечность. Кроме какntrights.exe
из Resource Kit или PowerShell ...2020 Ответ
mklink
разрешенияgit config --global core.symlinks true
Переключение веток заставит воссоздать недостающие символические ссылки.
Будьте осторожны, поддержка Symlinks в Windows с некоторыми другими клиентами Git не завершена. Особенно GitKraken.
источник
Я бы посоветовал вам не использовать символические ссылки в репо ». Сохраните фактический контент внутри репо, а затем разместите символические ссылки вне репо, которые указывают на контент.
Допустим, вы используете репо для сравнения хостинга вашего сайта на * nix с хостингом на win. Храните контент в своем репо », скажем,
/httpRepoContent
иc:\httpRepoContent
это папка, которая синхронизируется через GIT, SVN и т. Д.Затем замените папку содержимого вашего веб-сервера (
/var/www
иc:\program files\web server\www
{имена не имеют большого значения, отредактируйте, если необходимо}) символической ссылкой на содержимое вашего репозитория '. Веб-серверы будут видеть контент как на самом деле в «правильном» месте, но вы можете использовать свой источник контроля.Однако, если вам нужно использовать символические ссылки с в репозитории ', вам нужно рассмотреть что-то вроде сценариев до / после фиксации. Я знаю, что вы можете использовать их для выполнения таких действий, как, например, анализ файлов кода через форматтер, поэтому должна быть возможность конвертировать символические ссылки между платформами.
если кто-то знает хорошее место, чтобы научиться делать эти сценарии для общих элементов управления исходным кодом, SVN GIT MG, тогда, пожалуйста, добавьте комментарий.
источник
Для тех, кто использует CygWin в Vista, Win7 или выше, встроенная
git
команда может создавать «правильные» символические ссылки, которые распознаются приложениями Windows, такими как Android Studio . Вам просто нужно установитьCYGWIN
переменную окружения для включенияwinsymlinks:native
илиwinsymlinks:nativestrict
как таковую:Недостатком этого (и существенного при этом) является то, что оболочка CygWin должна быть «Запуск от имени администратора», чтобы иметь разрешения ОС, необходимые для создания таких символических ссылок. Однако после их создания никаких специальных разрешений для их использования . Пока они не изменены в хранилище другим разработчиком,
git
после этого он работает нормально с обычными разрешениями пользователя.Лично я этим пользуюсь только для символических ссылок, которые перемещаются приложениями Windows (т.е. не CygWin) из-за этой дополнительной трудности.
Для получения дополнительной информации об этой опции см. Этот вопрос SO: Как сделать символическую связь с Cygwin в Windows 7
источник
Вот пакетный скрипт для преобразования символических ссылок в репозитории, только для файлов, основанный на ответе Джоша Ли. Сценарий с дополнительной проверкой прав администратора находится по адресу https://gist.github.com/Quazistax/8daf09080bf54b4c7641 .
источник
Я все время использую ссылки sym между моим корневым каталогом и каталогом git repo Мне нравится держать их отдельно. На окнах я использую опцию mklink / j. Соединение, кажется, позволяет git вести себя нормально:
>mklink /j <location(path) of link> <source of link>
например:
>mklink /j c:\gitRepos\Posts C:\Bitnami\wamp\apache2\htdocs\Posts
источник
Я искал простое решение для работы с символическими ссылками Unix на окнах. Большое спасибо за вышеупомянутые псевдонимы Git. Существует одна небольшая оптимизация, которую можно выполнить с rm-символическими ссылками, чтобы она не удаляла файлы в папке назначения в случае, если псевдоним запускается во второй раз случайно. Пожалуйста, соблюдайте новое условие if в цикле, чтобы убедиться, что файл не является ссылкой на каталог до запуска логики.
источник
Один простой трюк, который мы используем, - это просто звонить
git add --all
дважды подряд.Например, наши вызовы сценария фиксации для Windows 7:
Первое добавление обрабатывает ссылку как текст и добавляет папки для удаления.
Второе добавление проходит через ссылку правильно и отменяет удаление, восстанавливая файлы.
Это менее элегантно, чем некоторые другие предлагаемые решения, но это простое решение для некоторых из наших устаревших сред, в которые добавлены символические ссылки.
источник