我遇到了git存储库和windows的问题。问题是git存储库中有一个linux符号链接,开发人员运行windows,显然不起作用。现在因为这个符号链接永远不会改变,我想找到一种方法来删除开发人员并在其位置添加一个文件夹(这是符号指向的),但让git忽略这些特定的更改。现在我可以删除符号链接,创建一个同名文件夹,只需添加一个忽略所有内容的.gitignore。现在,为了确保git忽略了符号链接的删除,我在研究时发现了两种可能的解决方案。我找到的解决方案是:
git update-index --assume-unchanged [FILE]
git update-index --skip-worktree [FILE]
我的问题是哪种方案效果最好?我想确保一旦我这样做,除非我特意这样做,否则它永远不会被撤消。我想确保恢复,重置,创建分支,合并等......一切正常。
答案 0 :(得分:22)
两种选择都有问题。只要索引被丢弃(例如git reset),--assume-unchanged
就会自行重置,这样可能会迟早会让你失望。同样适用于--skip-worktree
...但是,您可以维护本地文件列表以便不检出,以便在必要时自动再次设置skip-worktree位。以下是步骤:
core.sparseCheckout
设置为true。.git/info/sparse-checkout
:*
包含所有内容,!/foo
排除符号链接foo(/
表示锚定到顶层)。现在你可以继续而不必担心git会自动提交目录,但请注意,如果有人在目录或其中的任何文件中显式运行git add
,你仍然会遇到问题。
[编辑添加:]经过进一步讨论后,我们确定了最后一个问题的解决方案:在目录中放置一个带有*
模式的.gitignore文件。