Учитывая, что Git не распознает символические ссылки, которые указывают вне репозитория, есть ли проблема с использованием жестких ссылок?
Может ли Git сломать их? Не могли бы вы указать мне подробную информацию?
Учитывая, что Git не распознает символические ссылки, которые указывают вне репозитория, есть ли проблема с использованием жестких ссылок?
Может ли Git сломать их? Не могли бы вы указать мне подробную информацию?
Объект 'tree', представляющий каталоги в Git, сохраняет имя файла и (подмножество) разрешений. Он не хранит номер inode (или другой идентификатор файла). Поэтому жесткие ссылки не могут быть представлены в Git, по крайней мере, без сторонних инструментов, таких как metastore или git -cache-meta (и я не уверен, что это возможно даже с этими инструментами).
Git пытается не прикасаться к файлам, которые не нужно обновлять, но вы должны учитывать, что git не пытается сохранить hardlinks, поэтому их можно сломать git.
О символических ссылках, указывающих внешнее хранилище: git не имеет проблем с ними и должно сохранять содержимое символических ссылок... но полезность таких ссылок сомнительна для меня, так как будут ли эти символические ссылки быть сломанным или нет, зависит от расположения файловой системы вне git, а не под управлением git.
Хорошо, теперь это поздний ответ = D
Я узнал, что с помощью перехватчиков вы можете захватить событие git pull
(когда есть что тянуть...), записывая обработчик события script в файл .git/hooks/post-merge
.
Во-первых, вы должны chmod +x
его.
Затем добавьте в него команды ln
, чтобы воссоздать жесткие ссылки при каждом нажатии. Неплохо, да!
Это работает, мне просто нужно, чтобы для моего проекта и ls -i
показано, что файлы были автоматически связаны после pull
.
Мой пример .git/hooks/post-merge
:
#!/bin/sh
ln -f $GIT_DIR/../apresentacao/apresentacao.pdf $GIT_DIR/../capa/apresentacao.pdf
ln -f $GIT_DIR/../avaliacoesMono/avaliacao_monografias_2011_Nilo.pdf $GIT_DIR/../capa/avaliacoes.pdf
ln -f $GIT_DIR/../posters/poster_Nilo_sci.pdf $GIT_DIR/../capa/poster.pdf
ln -f $GIT_DIR/../monografia/monografia_Nilo.pdf $GIT_DIR/../capa/monografia_Nilo.pdf
ВАЖНО: как вы можете видеть, путь к любому файлу в вашем репозитории должен начинаться с $GIT_DIR
, а затем добавить частичный относительный путь к файлу.
Также важно: -f
необходимо, потому что вы воссоздаете файл назначения.
Из этого msysgit issue
Точки соединения не являются символическими ссылками; поэтому символические ссылки просто не поддерживается в msysGit.
Кроме того, жесткие ссылки никогда не отслеживались с помощью Git.
Проблема была ориентирована на Windows (так как речь идет о msysgit) и обсуждается потенциальная поддержка symlink.
Но комментарий о жесткой ссылке касается Git в целом.
Google 'git сохранить жесткие ссылки', и он показывает, что git не знает, как сохранить жесткую структуру ссылок AFAIK, возможно, по дизайну.
Веб-проекты моих рудников используют жесткие ссылки следующим образом:
www/products/index.php
www/products/dell_latitude_id577/index.php #(hard linked to above)
www/products/dell_inspiron_id323/index.php #(hard linked again to above)
[email protected]:www/products$ ls -l index.php
-rwxr-xr-x 3 me me 1958 Aug 22 22:10 index.php*
Если я хотел внести изменения в index.php, я меняю его в одном месте, а жесткие ссылки (страницы подробностей продукта) указывают на изменения - кроме git не сохраняются эти отношения во время клонирования и вытягивания на другие компьютеры.
[email protected]:www$ git pull
на другой машине будет создан новый index.php для каждой жесткой ссылки.