Подтвердить что ты не робот

Git фиксировать символическую ссылку как обычный файл

Предположим, у меня есть файл fname, который является символической ссылкой на файл из другого репозитория/проекта, например ../../proj2/fname.

Есть ли способ добавить/зафиксировать fname в качестве обычного файла?

Похоже, что по умолчанию git задает режим файла 120000 и устанавливает путь к связанному файлу в виде содержимого blob.

Я знаю это, потому что git ls-tree показывает режим 120000 для файла, а git cat-file -p показывает ../../proj2/fname как содержимое блоба.

4b9b3361

Ответ 1

Нет, Git знает, что это символическая ссылка. Для Git было бы опасно притворяться иначе, так как тогда оно будет записано в файлы за пределами репо. Отслеживание его как символической ссылки - это точно предполагаемое поведение.

Ответ 2

Если вы хотите, чтобы файл появился вместо ссылки, вы, вероятно, должны использовать команду ln для создания жесткой ссылки вместо символической ссылки (ln -s).

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

Я надеюсь, что команда Windows mklink /j в Bukov answer делает это, но я действительно ничего не знаю.

Ответ 3

В Windows вы можете делать то, что хотите, с помощью Junction

Например, программы часто хранят файл настроек где-то в системе, но я бы хотел, чтобы он контролировал его в моем репозитории. Я не могу переместить файл, и я не хочу делать дубликаты или что-то еще

Если мы поместим ярлык Windows в каталог репозитория, он увидит его как двоичный отдельный файл; а не каталог, указывающий на все фактические файлы, которые вы хотите включить

Нам нужна возможность помещать что-то как ярлык Windows в репозиторий, но этот git будет рассматривать как еще одну папку:

cd /location/of/my/repo/  
mklink /j "_linkTo_VimSettings" "C:\Program Files (x86)\Vim"