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