Жесткие ссылки ломаются в Windows 7 Pro

337
GAgbo

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

C:\PathLink>mklink /h test C:\PathTarget\file.f90 Permanent link created for test <<===>> C:\PathTarget\file.f90  C:\PathLink>..\FindLinks\FindLinks.exe test  FindLinks v1.0 - Locate file hard links Copyright (C) 2011 Mark Russinovich Sysinternals - www.sysinternals.com  C:\PathLink\test Index: 0x0003F29B Links: 1  Linking file: C:\PathTarget\file.f90 

Там все выглядит хорошо, но когда я изменяю и сохраняю файл, используя путь доступа «Target» (я просто добавляю append fghк строке в Visual Studio), я вижу, что ссылка «потеряна»:

C:\PathLink>..\FindLinks\FindLinks.exe test  FindLinks v1.0 - Locate file hard links Copyright (C) 2011 Mark Russinovich Sysinternals - www.sysinternals.com  C:\PathLink\test Index: 0x0003F29B Links: 0 

После этого я могу загрузить два файла ( testи file) отдельно, fileотражает изменения и testявляется несохраненным файлом.

кто-нибудь знает, почему это произошло? Есть ли способ избежать этого?

Я думаю, я мог бы инициализировать репо в папке PathTarget, а затем создать адаптированный .gitignore. В папке Target уже много файлов, и я просто хочу изменить пару из них. Кроме того, я также хочу добавить новые исходные файлы, и я нахожу это менее беспорядочным, если у меня есть собственная папка, отделенная от целевой папки. Жесткие ссылки выглядели так, как будто это лучше для меня, и я не понимаю, почему это терпит неудачу здесь.

1

1 ответ на вопрос

0
Ben N

Evidently, the program you used to modify the file actually deletes it (breaking the hardlink) and then recreates it, leaving the original data in the file that you had hardlinked to it.

If you want a file to continue pointing at a different path/filename even if the target is deleted, you can use a symbolic link. Just use mklink in an administrative command prompt without the /h switch.

Я думал, что символические ссылки будут указывать не на файлы, а на путь, так что синхронизация символических ссылок в локальном репозитории git на самом деле не будет синхронизировать файлы. GAgbo 8 лет назад 0
Интересно, что права администратора необходимы для создания символических ссылок, поэтому в конце я собираюсь сделать уродливое слияние с более уродливым методом `.gitignore` GAgbo 8 лет назад 0