Git:切换分支时保持被忽略的文件

spl*_*123 5 git

我知道这似乎是GIT的重复:如何在切换分支时保持被忽略的文件?,但我在那里找不到答案.

所以我创建了一个带有--orphan标志的新分支,以删除提交历史记录.然后我git rm --cached对所有文件进行了修改,修改.gitignore为忽略其中一些文件,然后添加并提交.正如所料,被忽略的文件不在新的repo中(也不在其任何历史记录中).但是,当我切换分支时它们会消失(也就是说,当我检查旧分支时,然后再次检查新分支).我怎么能避免这种情况?

编辑:整个操作的目的是准备一个项目在GitHub上发布,所以我想隐藏一些包含密码,密钥等私人信息的配置文件.这就是为什么我通过创建一个新的孤儿来删除提交历史科.我知道在添加文件之前提交文件可能.gitignore会解决消失的问题,但这会使文件最终在公共历史记录中可见.git add -f那时我试图这样做,git rm --cached但它没有做到这一点.

Edw*_*son 6

但是,当我切换分支时它们会消失(即,当我检出旧分支,然后再次检出新分支时)。我怎样才能避免这种情况?

你不能。这是故意的。在您的publish分支中,您没有跟踪文件,但您有一个文件.gitignore。伟大的!但是,当你切换到一些其他的分支,确实有这些文件被跟踪,它们将被检出到工作目录。这是因为 a.gitignore仅适用于未跟踪的文件。

文档

gitignore 文件指定了 Git 应该忽略的有意未跟踪的文件。已被 Git 跟踪的文件不受影响。

现在,如果您尝试切换回您的publish分支,这些文件将在磁盘上被删除,因为它们不存在于该分支中。您.gitignore的这些文件将被忽略,因为它们已被跟踪并且不适用于它们。

(请注意,根据定义,即使它们位于您要切换的分支中,它们也会被跟踪。这主要只是一个实现细节,我承认这可能不直观。)

您想要做的是删除所有分支中出现的这些文件。使用BFG Repo Cleaner 之类的工具从所有分支的历史记录中完全删除这些文件。然后你可以安全地使用.gitignore它们,一旦它们完全消失,你就可以安全地将其推送到 GitHub。