我知道这看起来像是重复的GIT:切换分支时如何保留被忽略的文件? https://stackoverflow.com/questions/15552959/git-how-to-keep-ignored-files-when-switching-branches,但我在那里找不到答案。
所以我创建了一个新分支--orphan
标志,删除提交历史记录。然后我做了git rm --cached
对所有文件进行修改.gitignore
忽略其中一些,然后添加并提交。正如预期的那样,被忽略的文件不在新存储库中(也不在其任何历史记录中)。但是,当我切换分支时(即,当我签出旧分支,然后再次签出新分支时),它们就会消失。我怎样才能避免这种情况?
编辑:整个操作的目的是准备一个要在 GitHub 上发布的项目,所以我想隐藏一些包含密码、密钥等私人信息的配置文件。这就是为什么我通过创建一个新的孤儿来删除提交历史记录分支。我知道可能在将文件添加到之前提交文件.gitignore
将解决消失的问题,但这将使这些文件最终在公共历史中可见。我尝试做git add -f
, then git rm --cached
,但这并不能解决问题。
但是,当我切换分支时(即,当我签出旧分支,然后再次签出新分支时),它们就会消失。我怎样才能避免这种情况?
你不能。这是设计使然。在你的publish
分支,您没有跟踪文件,并且您有.gitignore
对于他们来说。伟大的!但是当你切换到其他分支时does跟踪这些文件后,它们将被签出到您的工作目录。这是因为一个.gitignore
仅适用于未跟踪的文件。
From 文档 https://www.kernel.org/pub/software/scm/git/docs/gitignore.html:
gitignore 文件指定 Git 应忽略的有意未跟踪的文件。已被 Git 跟踪的文件不受影响。
现在,如果您尝试切换回您的publish
分支,这些文件将被从磁盘上删除,因为它们不存在于该分支中。你的.gitignore
这些文件被忽略,因为它们被跟踪并且不适用于它们。
(请注意,根据定义,它们是被跟踪的即使它们位于您要离开的分支中。这主要只是一个实现细节,我承认这可能不直观。)
您想要做的是删除这些文件的所有出现在所有分支机构。使用类似的工具BFG 回购清理器 https://rtyley.github.io/bfg-repo-cleaner/从您的历史记录中删除这些文件完全地,在所有分支机构。然后你就可以安全地.gitignore
他们,然后一旦他们走了完全地您可以安全地将其推送到 GitHub。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)