git commit символьная ссылка как обычный файл - PullRequest
30 голосов
/ 12 декабря 2011

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

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

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

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

Ответы [ 3 ]

44 голосов
/ 06 марта 2013

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

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

Я надеюсь, что Windows mklink /j команда в ответ Букова делает это, но я действительно не знаю вообще.

17 голосов
/ 12 декабря 2011

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

3 голосов
/ 06 марта 2013

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

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

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

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

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