Ответ 1
Нет, Git знает, что это символическая ссылка. Для Git было бы опасно притворяться иначе, так как тогда оно будет записано в файлы за пределами репо. Отслеживание его как символической ссылки - это точно предполагаемое поведение.
Предположим, у меня есть файл fname
, который является символической ссылкой на файл из другого репозитория/проекта, например ../../proj2/fname
.
Есть ли способ добавить/зафиксировать fname
в качестве обычного файла?
Похоже, что по умолчанию git задает режим файла 120000 и устанавливает путь к связанному файлу в виде содержимого blob.
Я знаю это, потому что git ls-tree
показывает режим 120000 для файла, а git cat-file -p
показывает ../../proj2/fname
как содержимое блоба.
Нет, Git знает, что это символическая ссылка. Для Git было бы опасно притворяться иначе, так как тогда оно будет записано в файлы за пределами репо. Отслеживание его как символической ссылки - это точно предполагаемое поведение.
Если вы хотите, чтобы файл появился вместо ссылки, вы, вероятно, должны использовать команду ln
для создания жесткой ссылки вместо символической ссылки (ln -s
).
Составляя жесткую ссылку, вы можете сделать тот же файл отображаться в двух разных каталогах, поэтому его изменение через любую из ссылок будет отражать изменения через обе ссылки, и файл будет жить в обоих каталогах, поэтому он будет отслеживается git
.
Я надеюсь, что команда Windows mklink /j
в Bukov answer делает это, но я действительно ничего не знаю.
В Windows вы можете делать то, что хотите, с помощью Junction
Например, программы часто хранят файл настроек где-то в системе, но я бы хотел, чтобы он контролировал его в моем репозитории. Я не могу переместить файл, и я не хочу делать дубликаты или что-то еще
Если мы поместим ярлык Windows в каталог репозитория, он увидит его как двоичный отдельный файл; а не каталог, указывающий на все фактические файлы, которые вы хотите включить
Нам нужна возможность помещать что-то как ярлык Windows в репозиторий, но этот git будет рассматривать как еще одну папку:
cd /location/of/my/repo/
mklink /j "_linkTo_VimSettings" "C:\Program Files (x86)\Vim"