git reset --hard似乎忽略了.git/info/exclude文件。

5
我们有一个共享目录(称其为 /shared),我们通过在主分支推送时运行以下命令,将其自动更新为我们的主 git 分支:

   git reset --hard HEAD
   git clean -f -d
   git pull

这基本上是有效的。但是,有一个我们不想被更改的目录 /shared/media,即使 git 中检查了一个 "media" 链接。

我已将 "media" 添加到 .git/info/exclude 中,但无论如何,"git reset --hard HEAD" 都会删除 /shared/media,并用检入的符号链接替换它。

除了事先将其移开并恢复之外,是否有任何方法可以让 "git reset --hard HEAD" 不去改变这个目录呢?


.gitignore 应该和 .git/info/exclude 一样有效,并且它被提交到 git 中,这样所有开发人员都可以使用。有什么理由改变 git 存储库内部呢? - Alexander Gladysh
@AlexanderGladysh:.git/info/exclude 旨在供用户编辑,它不是 Git 的内部文件。这是一种合法的忽略特定克隆路径的方法。 - CB Bailey
@CharlesBailey:你自己对这个问题的回答表明将这些信息提交到git通常更有用。但我同意,对于有限数量的用例(不确定是哪些),只将被忽略的内容添加到.git/info/exclude可能是有意义的。 - Alexander Gladysh
@AlexanderGladysh:我有一个“media”符号链接被检入,所以通常我不想忽略它。我只想在这个特定的克隆中忽略它,因此更改为.git/info/exclude。 - Jonathan Swartz
@JonathanSwartz:好的,这是一个有效的。 - Alexander Gladysh
2个回答

8

1

在Git存储库中,无法忽略实际内容存储路径。Git将遵守对已跟踪树的更改。仅忽略会影响尝试开始跟踪新内容,需要使用add -f来实际存储新内容。

然而,如果您使用.gitignore.git/info/exclude或通过core.excludesfile配置来忽略路径,则可以生效。

如果您不希望通过硬重置删除媒体目录,则需要从存储库中删除冲突的路径。除了显式重置其他路径之外,没有可行的解决方法。


实际上,可以使用 git update-index 来完成(请参见我的回答)。 - Russell Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接