简介
git for windows增加了符号链接的支持,其大体实现方法为,使用Windows Vista起增加的NTFS符号链接功能,模拟Linux下的符号链接,在使用git管理文件的过程中,由git在不同情况下自动转换。
本文正文翻译自git for windows的wiki文章Symbolic Links[附]。
正文:符号链接
短版本:在Windows下没有和POSIX symlink完全等价的机制,而最为接近的解决办法,在Windows默认的非管理员用户下,是不可使用的。因此,symlink模拟支持默认是关闭的,需要用户手动配置。用户可以通过 core.symlinks=true来配置设置。
背景
从Windows Vista开始,Windows包含了对符号链接的支持。但这不是Unix的符号链接;它们在以下方面有所不同:
符号链接仅在Windows Vista及更新版本中支持,不包含XP。
你需要SeCreateSymbolicLinkPrivilege权限,这一权限默认只有Administrator拥有,但可以通过本地安全策略(Local Security Policy)或通过Active Directory使得普通用户也有这一权限。家庭版的Windows Vista和Windows 7没有本地安全策略,但免费的Polsedit可用于这些版本。注意,即使设置了权限分配,Administrator组的用户仍然需要UAC许可(更多细节在Access Token Change)。
在远程文件系统中,符号链接默认被禁用(可以通过命令fsutil behavior query SymlinkEvaluation来查看)
符号链接仅适用于NTFS,不适用于FAT
Windows下的符号链接是分类型的:它们需要知道它们指向的是文件夹还是文件(因此,Git发现错误时会自动更新类型)
许多程序不能支持符号链接
由于这些原因,Git for Windows默认禁用了对符号链接的支持(但遇到符号链接时Git仍能够读取)。你可以通过core.symlink配置变量来开启对符号链接的支持,例如,当克隆仓库时:
git clone -c core.symlinks=true <URL>
创建符号链接
默认情况下,Git Bash中的ln -s命令并非创建符号链接,而是创建复制。
若需要创建符号链接(需保证你的账户有相应的权限),使用mklink.exe,例如:
mklink /d this-link-points-to c:\that-directory
mklink this-link-points-to c:\that-file
允许非管理员用户创建符号链接
Launch gpedit.msc (i.e. the group policy editor) and add the account(s) to Computer configuration\Windows Setting\Security Settings\Local Policies\User Rights Assignment\Create symbolic links.
运行gpedit.msc(组策略编辑器),并增加账号到:计算机配置\Windows设置\安全设置\本地策略\用户策略\用户权限分配\创建符号链接。
附原文:Symbolic Links