Вопрос

Учитывая, что 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 для каждой жесткой ссылки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top