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

时间:2011-05-26 11:55:49

标签: git symlink git-index

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

git update-index --assume-unchanged [FILE]
git update-index --skip-worktree [FILE]

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

1 个答案:

答案 0 :(得分:22)

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

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

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

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