我该如何将Windows符号链接提交到Git?

13
我已经在我的代码库中添加了一个窗口符号链接 (window 7) ("foo" -> \\server\foo)。我有一大堆配置文件位于网络共享-\server\foo位置下。如何将这个符号链接 "foo" 提交到我的Git存储库中?希望克隆该存储库的任何其他用户都能获取此链接并能够从\\server\foo\位置获取文件。
我的想法是避免在集成构建过程中重复同步这一大批配置文件。但是,当我尝试提交所有位于 \server\foo 位置下的文件时,克隆存储库的用户只是将 "foo" 添加为普通目录。

2
我不确定,但我有点怀疑 Git 是否理解 Windows 链接,因为它是由 Linux 内核的作者编写,用于与 Linux 内核一起使用的。即使是在 Git 中放置 Unix 符号链接也不是最好的选择。 - Eevee
@Eevee - 我也怀疑是这样。然而,这个符号链接文件夹中有大约80-90mb的内容。我不希望将其提交到仓库并在每次CI构建时下载。公司有一个CI标准,每次构建都会进行新的同步,这个标准不能改变 :( - praskris
在Windows上创建符号链接仍然无法本地工作,即使是Git for Windows v2.3.6。 - Dan Dascalescu
1个回答

6
您需要在索引中创建正确的条目(特殊文件模式120000),以便在Windows中编码和解码符号链接。
请参考“Git Symlinks in Windows”,尤其是别名:
  • git add-symlink
  • git checkout-symlinks

这对我不起作用,不确定是否有遗漏。从示例中我看到他们在使用结构内目录的链接。然而,我的用例是为网络共享中的文件夹创建符号链接。bla -> \server\foo\ - praskris
@praskris,你不能将该网络路径映射到一个驱动器盘符上,并使用 subst 命令进行替换吗? - VonC
很遗憾,由于在持续集成构建期间代码已同步到不同的代理和目录中,因此将文件夹替换到特定位置的结构中是不可能的。此外,我们可能没有权限在构建代理机器上执行该操作。 - praskris
1
@praskris 那么问题实际上不是关于 git 和符号链接,而更多地涉及到 Windows 符号链接和 UNC 路径,对吧? - VonC
@VonC- 我不确定我理解了。我能够在Windows中创建指向UNC路径的符号链接。问题出在提交到Git上。它将其作为普通文件夹捕获,并添加符号链接文件夹下的所有文件。 - praskris
@praskris 那我回答仍然有效,因为它将任何符号链接转换为120000个索引条目,或将该120000个条目转换回符号链接(checkout-symlinks)。如果您说您能够创建指向 UNC 路径的符号链接,那么您需要做的就是确保 checkout-symlinks 别名执行相同的命令。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接