git假设不变vs跳过工作树-忽略符号链接

git假设不变vs跳过工作树-忽略符号链接,git,symlink,git-index,Git,Symlink,Git Index,我对git存储库和windows有问题。问题是git存储库中有一个linux符号链接,而且对于运行windows的开发人员来说,这显然不起作用。既然这个符号链接永远不会改变,我想找到一种方法在开发者身上删除它,并在它的位置上添加一个文件夹(这就是符号所指向的),但让git忽略这些特定的更改。现在我可以删除符号链接,创建一个同名文件夹,只需添加一个忽略所有内容的.gitignore即可。现在,为了确保git忽略删除符号链接,我在研究过程中找到了两种可能的解决方案。我找到的解决办法是: git up

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

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

我的问题是哪种选择最有效?我想确保一旦我这样做了,它永远不会被撤销,除非我特别这么做。我想确保恢复、重置、创建分支、合并等。。。一切正常。

两个选项都有问题<代码>--假设unchanged在索引被丢弃时重置自身(例如git reset),因此这可能迟早会让您绊倒。这同样适用于
--跳过工作树
。。。但是,您可以维护不签出的本地文件列表,以便在必要时自动重新设置跳过工作树位。以下是步骤:

  • 将存储库的
    core.sparseCheckout
    设置为true
  • 创建一个文件
    .git/info/sparse checkout
    ,其中包含两种模式:
    *
    以包含所有内容和
    /foo
    排除符号链接foo(
    /
    表示锚定到顶层)
  • 现在,手动设置跳过工作树位,然后删除符号链接
现在,您不必担心git会自动提交目录,但请注意,如果有人在目录或其中的任何文件上显式运行
git add
,您仍然会遇到问题


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

我误按了SKIP WORK TREE,现在无法切换本地分支。我能做些什么来恢复我错误地采取的行动?是否有任何选项?可能重复@Flimm,但此问题较旧