我在使用 git 存储库和 Windows 时遇到问题。问题是 git 存储库中有一个 linux 符号链接(symbolic link),而对于运行 Windows 的开发人员来说,这显然是行不通的。现在,由于该符号链接(symbolic link)永远不会改变,我想找到一种方法来删除开发人员并在其位置添加一个文件夹(这是符号指向的内容),但让 git 忽略这些特定的更改。现在我可以删除符号链接(symbolic link),创建一个同名文件夹并添加一个忽略所有内容的 .gitignore。现在就确保 git 忽略符号链接(symbolic link)的删除,我在研究时找到了两种可能的解决方案。我找到的解决方案是:
git update-index --assume-unchanged [FILE]
git update-index --skip-worktree [FILE]
我的问题是哪个选项最有效?我想确保一旦我这样做,除非我专门这样做,否则它永远不会被撤消。我想确保还原、重置、创建分支、 merge 等...一切正常。
最佳答案
两种选择都有问题。 --assume-unchanged
会在索引被丢弃时自行重置(例如 git reset),所以这可能迟早会绊倒你。 --skip-worktree
也是如此...但是,您可以维护一个本地文件列表以不 check out ,以便在必要时自动再次设置 skip-worktree 位。以下是步骤:
- 将存储库的
core.sparseCheckout
设置为 true。 - 创建一个包含两种模式的文件
.git/info/sparse-checkout
:*
包含所有内容,!/foo
排除符号链接(symbolic link) foo(/
表示 anchor 到顶层)。 - 现在,手动设置 skip-worktree 位,然后删除符号链接(symbolic link)。
现在您可以继续操作而不必担心 git 会自动提交目录,但请注意,如果有人在目录或其中的任何文件上显式运行 git add
,您仍然会遇到问题.
[编辑添加:] 经过进一步讨论,我们确定了最后一个问题的解决方案:在目录中放置一个带有 *
模式的 .gitignore 文件。
关于git assume unchanged vs skip worktree - 忽略符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138076/