Git и жесткие ссылки - PullRequest
       38

Git и жесткие ссылки

77 голосов
/ 16 сентября 2010

Учитывая, что Git не распознает символические ссылки, которые указывают за пределы хранилища, есть ли проблемы с использованием жестких ссылок?

Может ли Гит их сломать? Не могли бы вы указать мне подробную информацию?

Ответы [ 4 ]

67 голосов
/ 17 сентября 2010

Объект tree, представляющий каталоги в Git, хранит имя файла и (подмножество) разрешений. Он не хранит номер индекса (или другой вид идентификатора файла). Поэтому жесткие ссылки не могут быть представлены в git , по крайней мере, без сторонних инструментов, таких как metastore или git-cache-meta ( и я не уверен, возможно ли это даже с этими инструментами).

Git старается не трогать файлы, которые не нужно обновлять, но вы должны учитывать, что git не пытается сохранить жесткие ссылки, поэтому они могут быть взломаны git.


О символических ссылках, указывающих на внешний репозиторий : git не имеет с ними проблем и должен сохранять содержимое символических ссылок ... но полезность таких ссылок сомнительна для меня, как, если эти символические ссылки будут сломаны или не зависит от структуры файловой системы вне хранилища git и не контролируется git.

16 голосов
/ 17 февраля 2012

Хорошо, теперь это поздний ответ = D

Я обнаружил, что с помощью хуков вы можете захватить событие git pull (когда есть что потянуть ...), записав событие сценарияобработчик файла .git/hooks/post-merge.

Сначала необходимо chmod +x it.

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

7 голосов
/ 16 сентября 2010

Из этого сообщения msysgit

Точки соединения не являются символическими ссылками; поэтому символические ссылки просто не поддерживается в msysGit.

Также, Git .

никогда не отслеживал жесткие ссылки
.

Проблема была ориентирована на Windows (поскольку речь идет о msysgit) и споры о потенциальной поддержке symlink.
Но комментарий о жесткой ссылке касается Git в целом.

1 голос
/ 23 августа 2011

Google 'git preserve hard links' показывает, что 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)

me@server:www/products$ ls -l index.php
-rwxr-xr-x 3 me me 1958 Aug 22 22:10 index.php*

Если я хотел внести изменения в index.php, я изменяю его в одном месте, и жесткие ссылки (страницы сведений о продукте) указывают на изменения - за исключением того, что git не сохраняет эти отношения во время клонирования и извлечения на других компьютерах.

me@server:www$ git pull

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

...