git假设未更改vs跳过工作树 - 忽略符号链接

rya*_*zec 24 git symlink git-index

我有一个git存储库和Windows的问题.问题是git存储库中有一个linux符号链接,并且开发人员运行windows,这显然不起作用.现在因为这个符号链接永远不会改变,我想找到一种方法来删除开发人员并在其位置添加一个文件夹(这是符号指向的),但让git忽略这些特定的更改.现在我可以删除符号链接,创建一个同名文件夹,只需添加一个忽略所有内容的.gitignore.现在,为了确保git忽略了符号链接的删除,我在研究时发现了两种可能的解决方案.我找到的解决方案是:

git update-index --assume-unchanged [FILE]
git update-index --skip-worktree [FILE]
Run Code Online (Sandbox Code Playgroud)

我的问题是哪种方案效果最好?我想确保一旦我这样做,除非我特意这样做,否则它永远不会被撤消.我想确保恢复,重置,创建分支,合并等...一切正常.

Jan*_*ger 23

两种选择都有问题.--assume-unchanged每当索引被丢弃时重置自己(例如git reset),这样可能迟早会让你失望.同样适用于--skip-worktree...但是,您可以维护本地文件列表以便不检出,以便在必要时自动再次设置skip-worktree位.以下是步骤:

  • core.sparseCheckout对于存储库,设置为true.
  • 创建一个.git/info/sparse-checkout包含两种模式的文件:*包含所有内容并!/foo排除符号链接foo(/表示锚点到顶层).
  • 现在,手动设置skip-worktree位,然后删除符号链接.

现在你可以继续,而不必担心git会自动提交目录,但请注意,如果有人显式运行git add目录或其中的任何文件,你仍会遇到问题.

[编辑添加:]经过进一步讨论,我们确定了最后一个问题的解决方案:*在目录中放置一个带有模式的.gitignore文件.

  • @Dev:`git update-index --no-skip-worktree <path>` (2认同)