Могу ли я добавить файл, поместив символическую ссылку в репозиторий git?

Есть ли способ отправить файл, внешний по отношению к репозиторию git, поместив символическую ссылку.

Я хочу, например, нажать файл /root/my_file и создать символическую ссылку my_symbolic_link в репозитории git.

# ls -lA                                                                                                                    
drwxr-xr-x 7 root root 4096 Oct  8 07:55 .git/
lrwxrwxrwx 1 root root   26 Oct  8 7:58 my_symbolic_link -> /root/my_file

person user123456    schedule 08.10.2016    source источник
comment
Думаю, это добавит только саму ссылку ...   -  person beatngu13    schedule 08.10.2016
comment
По умолчанию да, могу ли я настроить git для изменения поведения   -  person user123456    schedule 08.10.2016
comment
Я так не думаю, даже с жесткими ссылками (см. здесь).   -  person beatngu13    schedule 08.10.2016
comment
Я проверил это, и фиксация жесткой ссылки на репозиторий git работает должным образом. Я тестировал его с помощью git версии 2.10.1 на Ubuntu 14.04; во время тестирования локальное репо было на разделе ext4, а удаленное - на BitBucket.   -  person TeWu    schedule 08.10.2016
comment
@TeWu работает как положено, может быть слишком поспешно. Вы пытались обновить файл где-нибудь еще и pull? Как насчет того, чтобы отказаться от локальных изменений и checkout из вашего репо? Я не говорю, что вы ошибаетесь, но такие сообщения, как это заставляет меня сомневаться.   -  person beatngu13    schedule 08.10.2016
comment
@ beatngu13 работает, как ожидалось, не очень точное заявление;) Поэтому, чтобы избежать недоразумений, я обновил свой ответ.   -  person TeWu    schedule 09.10.2016


Ответы (2)


Символьная ссылка - это файл, содержащий ссылку на другой файл в вашей файловой системе. Вы можете добавить символическую ссылку в свой репозиторий, но, делая это, вы только добавляете ссылку на другой файл, а не на этот другой файл.

Вы можете добиться желаемого, создав жесткую ссылку вместо символической. Жесткая ссылка - это связь между именем файла и его содержимым (и метаданными) на уровне файловой системы. Создавая жесткую ссылку на файл и добавляя его в свой репозиторий, вы добавляете этот связанный файл. В операционных системах, совместимых с POSIX (как и во всех Linux), вы можете создать жесткую ссылку следующим образом:

ln /root/my_file my_hard_link

Для получения дополнительной информации о различных типах ссылок см. этот вопрос и ответы на него.

ОБНОВЛЕНИЕ: обратите внимание, что git ничего не знает о жестких ссылках. Добавление жесткой ссылки в репозиторий git означает, что вы добавляете содержимое этого связанного файла. Git не знает, что только что добавленный файл является жесткой ссылкой. Добавление жесткой ссылки в репо не сломает его, но при извлечении из репо будет создана новая копия этого файла, а не воссоздать эту жесткую ссылку. Под "проверкой" я имею в виду не только команду git checkout, но и такие операции, как clone создание новой копии репо, удаление жесткой ссылки и использование git reset для ее воссоздания или pull создание новой версии этого жестко связанного файла из удаленного репо.

Напомним, у вас есть два варианта:

  • Добавить символическую ссылку в репо - это добавит только информацию о ссылке, а не содержимое связанного файла.
  • Добавить жесткую ссылку в репо - это добавит содержимое связанного файла. Хотя он не будет добавлять информацию о ссылке, он также не сломает ссылку до тех пор, пока вы в следующий раз не удалите этот жестко связанный файл из репозитория.
person TeWu    schedule 08.10.2016

Если вы работаете в Windows, вы можете попробовать создать символическую ссылку в репозитории git, используя Git для Windows < / а>.

Начиная с Windows Vista есть поддержка символических ссылок. Вам необходимо включить Symbolik Link в Git во время установки приложения. (см. картинку)

По умолчанию команда ln -s в Git Bash не создает символических ссылок. Вместо этого он создает копии.

Чтобы создать символические ссылки (при условии, что ваша учетная запись имеет на это разрешение), используйте встроенную команду mklink, например:

mklink /d this-link-points-to c:\that-directory
mklink this-link-points-to c:\that-file

Включить ссылку на символик в Git

person Chetabahana    schedule 25.04.2018