Ви можете дізнатися, що Git робить з файлом, побачивши, що він робить, коли ви додасте його до індексу. Індекс - це як попередня фіксація. Якщо індекс виконано, ви можете використовувати, git checkout
щоб повернути все, що було в індексі, в робочий каталог. Отже, що робить Git, коли додаєш символьне посилання до індексу?
Щоб дізнатися, спочатку зробіть символічне посилання:
$ ln -s /path/referenced/by/symlink symlink
Git ще не знає про цей файл git ls-files
дозволяє перевірити ваш індекс ( -s
друкує stat
подібний вихід):
$ git ls-files -s ./symlink
[nothing]
Тепер додайте вміст символічного посилання до магазину об'єктів Git, додавши його до індексу. Коли ви додаєте файл до індексу, Git зберігає його вміст у магазині об'єктів Git.
$ git add ./symlink
Отже, що було додано?
$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0 symlink
Хеш - це посилання на упакований об’єкт, створений у магазині об'єктів Git. Ви можете вивчити цей об’єкт, якщо заглянете в .git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c
корінь вашого сховища. Це файл, який Git зберігає у сховищі, який ви згодом можете перевірити. Якщо ви вивчите цей файл, ви побачите, що він дуже маленький. Він не зберігає вміст пов'язаного файлу.
(Примітка 120000
- це режим, вказаний у ls-files
вихідному документі. Це буде щось на зразок 100644
звичайного файлу.)
Але що робить Git з цим об'єктом, коли ви перевіряєте його з сховища та у вашу файлову систему? Це залежить від core.symlinks
конфігурації. Від man git-config
:
core.symlinks
Якщо помилкові, символьні посилання перевіряються як невеликі прості файли, що містять текст посилання.
Отже, із символічним посиланням у сховищі, після оформлення замовлення ви отримуєте текстовий файл із посиланням на повний шлях файлової системи, або власне символічне посилання залежно від значення core.symlinks
конфігурації.
Так чи інакше, дані, на які посилається симпосилання, не зберігаються у сховищі.
.gitignore
бачить символьне посилання як файл, а не папку.