繁体   English   中英

Windows-git存储库中文件的硬链接经常中断

[英]Windows - hard links to files in a git repository break often

我使用我的所有配置和dotfile( .bashrcprofile.ps1.emacs等)维护一个私有的Git存储库。

在Windows上,此存储库存储在C:\\git\\config 大多数应用程序期望文件位于其他位置,因此我在存储库和期望位置之间添加了硬链接。

在Linux上, .emacs位于~/git/config/.emacs但emacs希望它位于~/.emacs 我跑:

$ sudo ln -s ~/git/config/.emacs ~/.emacs

在Windows上,我的.emacs位于C:\\git\\config\\.emacs ,但是emacs希望它位于C:\\users\\ayrton\\.emacs 我跑:

PS> cmd /c mklink /H C:\users\ayrton\.emacs C:\git\config\.emacs

问题

在Linux上,这似乎工作正常:当我更新原始文件时,链接的内容将更新,并且所有内容均保持同步。

在Windows上,链接会在一段时间后断开,并且文件不同步(文件内容不同)。

为什么链接在Windows上断开? 有替代解决方案吗?


我看过这个StackOverflow帖子: 无法硬链接gitconfig文件

因此,我终于找到了一种同时兼顾两者的解决方案:将存储库放在子目录中,并代替符号链接,为“ core.worktree”添加配置选项作为您的主目录。 现在,当您位于主目录中时,就不在git repo中了(因此第一个问题就不存在了),并且您无需像第二种情况那样处理易碎的符号链接。 您仍然会有排除不需要版本化的路径的麻烦(例如,“。git / info / exclude”技巧中的“ *”),但这并不新鲜。

这里的问题是Windows和Linux上的预期位置不同。 例如,VSCode希望用户设置位于:

  • Linux: $HOME/.config/Code/User/settings.json
  • Windows: %APPDATA%\\Code\\User\\settings.json

理想情况下,我希望我的存储库是平台无关的。 如果采用core.worktree方法(例如,使core.worktree/C:\\ ,则排除除特定文件之外的所有内容),当某些配置文件的绝对路径在操作系统之间不同时,我将必须维护它们的两个副本。

每次保存时,如果编辑器打开文件/将文件创建为新的空白文件,则硬链接可能会中断。 如果记事本这样做,这不会令我感到惊讶,因为它会将整个文件读取到内存中,并且在加载文件后不需要原始文件。

您可以尝试在Windows上创建文件符号链接,而不是硬链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM