Гит и жесткие ссылки
Вопрос
Учитывая, что Git не распознает символические ссылки, которые за пределами репозитория есть какие-либо проблемы с использованием жестких ссылок?
Может ли Git разбить их? Можете ли вы указать мне на подробную информацию?
Решение
Объект «Дерево», представляющий каталоги в Git, хранит имя файла и (подмножество) разрешений. Он не хранит номер INODE (или другой тип идентификатора файла). Следовательно жесткие ссылки не может быть представлено в Git, по крайней мере, не без сторонних инструментов, таких как метастор или Git-Cache-Meta (И я не уверен, что можно даже с этими инструментами).
Git пытается не касаться файлов, которые ему не нужно обновлять, но вы должны учитывать, что Git не пытается сохранить жесткие линиим, поэтому они могут быть сломаны Git.
О Символические ссылки, указывающие на внешний репозиторий: Git не имеет проблем с ними и должен сохранить содержимое символических ссылок ... но утилита таких ссылок сомневается для меня, так как будут ли эти симличины, или нет, зависит от макета файловой системы за пределами Гит репозиторий, а не под контролем гита.
Другие советы
Хорошо, теперь это поздний ответ = D
Я узнал, что, используя крючки, вы можете захватить git pull
событие (когда есть что-то, чтобы потянуть ...) написание обработчика событий скрипта к .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 Выпуск
Точки перехода не являются символическими звеньями; Поэтому символические ссылки просто не поддерживаются в 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)
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 для каждой жесткой ссылки.