2011-12-29 2 views
4

У меня есть GIT Repo тест и файл (ЗШ конфигурационный файл), имерзавец и в Linux Жесткая

ln ~/.zshrc test/zshrc 

Затем я изменил .zshrc файл, файл zshrc в мерзавца репо не изменение, заключается в том, что git не может иметь дело с hardlink?

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

+1

Почему бы вам не использовать символические ссылки? –

+4

Конечно, если файлы имеют разные контенты, то они не связаны жестко. Что-то сломало ссылку. Это может быть git (когда вы меняете ветки или что-то еще) или что-то еще, я не знаю. Вы можете проверить номер inode или оба файла с помощью 'ls -li', чтобы проверить, жестко ли они связаны или нет. Используйте это, чтобы узнать, в какой момент файлы стали несвязанными. – Celada

ответ

4

Вы не можете сделать¹ жестких ссылок вне репозитория git. У вас есть несколько вариантов:

  • Сделать ~/.zshrc символическую ссылку на my-home-git-checkout/zshrc.
  • Храните git checkout в своем домашнем каталоге.
  • Скопируйте файл из своей git checkout в свой домашний каталог, возможно, автоматически после фиксации или проверки.

¹ Да, хорошо, каламбур: вы не можете держать.

+0

Последнее решение должно быть не «при фиксации», а «при обновлении (checkout)». И в этом случае неважно, будут ли файлы автоматически скопированы или жестко привязаны. – ZyX

+0

@ ZyX Хороший вопрос о выписке, но почему бы и не совершить сделку? Если этот репозиторий git - это место, где вы обычно редактируете файлы, вы редко бывали в кассе. – Gilles

+0

git перезаписывает файлы при фиксации? Если да, то почему? – ZyX

2

Git всегда предполагает, что он является только владельцем файла дескриптора. Так что git checkout просто ломает все жесткие ссылки.

+0

Он точно не разбивает их, он просто не записывает файлы, совместно используемые inode. Однако git делает запись, что два (по крайней мере, в один момент времени) имеют одинаковое содержимое и оптимизируют его хранение. –

2

Попробуйте добавить следующий сценарий в /path/to/repo/.git/hooks/post-checkout (этот файл должен быть выполняемым):

#!/bin/sh 
/bin/ln -sf /path/to/repo/zshrc $HOME/.zshrc 
Смежные вопросы