Android回购用" winsymlinks:nativestrict"在Cygwin

时间:2015-05-19 10:06:13

标签: git cygwin symlink repo

我使用cygwin内置git和python来安装Android回购工具。

如果我设置CYGWIN=winsymlinks,一切正常。

如果我设置CYGWIN=winsymlinks:nativestrict告诉cygwin制作Windows本地符号链接并以管理员身份运行cygwin,则在repo init过程中,我收到错误:

Traceback (most recent call last):
File "/cygdrive/d/repo/test/.repo/repo/main.py", line 506, in <module>
  _Main(sys.argv[1:])
File "/cygdrive/d/repo/test/.repo/repo/main.py", line 482, in _Main
  result = repo._Run(argv) or 0
File "/cygdrive/d/repo/test/.repo/repo/main.py", line 161, in _Run
  result = cmd.Execute(copts, cargs)
File "/cygdrive/d/repo/test/.repo/repo/subcmds/init.py", line 390, in Execute
  self._SyncManifest(opt)
File "/cygdrive/d/repo/test/.repo/repo/subcmds/init.py", line 239, in _SyncManifest
  m.Sync_LocalHalf(syncbuf)
File "/cygdrive/d/repo/test/.repo/repo/project.py", line 1196, in Sync_LocalHalf
  self._InitWorkTree()
File "/cygdrive/d/repo/test/.repo/repo/project.py", line 2293, in _InitWorkTree
  copy_all=False)
File "/cygdrive/d/repo/test/.repo/repo/project.py", line 2276, in _ReferenceGitDir
  os.symlink(os.path.relpath(src, os.path.dirname(dst)), dst)
OSError: [Errno 2] No such file or directory

1 个答案:

答案 0 :(得分:0)

这是预期的行为,并且来自NTFS符号链接和POSIX符号链接模型之间的不兼容性。来自CYGWIN environment variable的Cygwin帮助:

  

winsymlinks:nativewinsymlinks:nativestrict之间的区别在于:如果文件系统支持本机符号链接,并且Cygwin由于某种原因无法创建本机符号链接,则它将回退到使用{{创建Cygwin默认符号链接1}},当winsymlinks:native时,winsymlinks:nativestrict系统调用将立即失败。

顺便说一下,你说你正在使用symlink(2),但我在帮助页面上看不到这个确切的选项,因此我们只能猜测哪个变体(CYGWIN=winsymlinks, <{1}},:lnk或其他完全相同的东西)。