git assume unchanged vs skip worktree - 忽略符号链接(symbolic link)

标签 git symlink git-index

我在使用 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/

相关文章:

macos - 无法使用 Homebrew 安装 Git

windows - 无法使用 SSH 连接到服务器,在 Windows 10 中显示 "ssh: connect to host 178.128.60.26 port 22: Connection timed out"

git - 是否可以从存储中应用单行?

Git stash 删除添加的更改

git - 我怎么知道一个分支是否已经 merge 到 master 中?

git - "git diff"什么都不做

python - 我可以忽略 setuptools MANIFEST.in 中的符号链接(symbolic link)吗?

java - 在一个路径中一起解析符号链接(symbolic link)和 ".."

Windows 符号链接(symbolic link)目标

git - 为什么 "git index"有这么多名字?