26

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

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

我的问题是哪个选项最有效?我想确保一旦我这样做,除非我专门这样做,否则它永远不会被撤消。我想确保恢复、重置、创建分支、合并等......一切正常。

4

1 回答 1

24

两种选择都有问题。--assume-unchanged每当索引被丢弃时(例如 git reset )就会自行重置,所以这可能迟早会让你绊倒。同样适用--skip-worktree......但是,您可以维护一个不签出的本地文件列表,以便在必要时自动再次设置跳过工作树位。以下是步骤:

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

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

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

于 2011-05-26T13:42:44.973 回答