在一个分支上使用git ignore,但在另一个分支上不使用

5
有一个不属于我的存储库在github上。我克隆了它,现在我在我的github账户中有了它的副本,同时我在电脑上也有了它的副本。我创建了一个分支,它有自己的目录和很多文件,然后我将这些文件提交到那个分支,叫它apple。当我切换回主分支时,我注意到状态中显示我在apple上提交的目录和其中所有的文件。所以现在每次我切换到主分支时都会看到几百个文件。
我的问题是如何让当我切换回主分支时忽略掉我在apple分支中拥有的这些文件?我相信我可以修改主分支中的.gitignore文件,但那会改变该项目的.gitignore文件。
谢谢
编辑:评论者指出,如果文件在另一个分支中提交,则在切换分支时不应该显示,这是正确的。在与帮助我的每个人一起工作后,我发现发生了什么事情是我在apple分支上创建的目录中的一个子目录有它自己的.gitignore文件,忽略了很多文件。.gitignore在apple分支中被提交,当我切换分支(例如到主分支)时,该目录特定的.gitignore消失了,并且最初在apple分支上被忽略的所有文件都显示为未跟踪的git-gui中的其他任何分支。所以我有很多文件,我认为它们被提交到了apple分支,但实际上并没有。对于混淆我感到抱歉!我将标记Ryan Stewart的答案为正确。

1
谷歌和 Stack 可以完成这项工作 https://dev59.com/CHI-5IYBdhLWcg3weoPR - Casabian
1
所引用的链接修改了.gitignore文件,但问题规则排除了这种情况,因为“那将改变项目的.gitignore文件”。 - GoZoner
如果文件是在另一个分支中提交的,当您切换到没有这些文件的分支时,它们不应该出现。 - qqx
2个回答

6
您可以设置自己的“全局忽略”文件,方法如下:

git config --global core.excludesfile ~/.gitignore_global

您可以在~/.gitignore_global中添加您需要忽略的文件。此外,您还可以进行编辑。
.git/info/exclude

就像.gitignore一样,但它仅适用于该.git存储库。


我认为我正在寻找的是一种方法,可以在与其相关的分支之外忽略该目录。有没有办法做到这一点? - loop
“apple” 的内容不应该在主分支上可见。请参考上面 Ryan Stewart 的回答。 - GoZoner
1
完美,将文件添加到.git/info/exclude中对我有用。 - Leo

4
如果您真的在apple分支上添加了新文件并提交了它们,然后切换回不包含apple历史记录的master分支,那么这些新文件就不会显示出来。您所描述问题的某些方面似乎不太合理。
也许您没有意识到,在git中,您必须在提交之前使用git add命令将文件添加到版本控制(除非您明确使用git commit 命令)?具体而言,如果您在apple分支上添加了banana目录,则可以执行以下操作:
git add banana
git commit -m "added the banana feature"
git checkout master

然后您将进入主分支,并且将没有香蕉。通过执行 git checkout apple, 香蕉会再次出现,因为它存在于该分支中。


如果我切换回主分支,那么我在apple中提交的目录将被列为未跟踪的目录。 - loop
那么至少该目录中的某些内容尚未提交。 - Ryan Stewart
git status -u 会显示所有未提交的文件列表,而不仅仅是未被跟踪的顶级目录。 - Ryan Stewart
我正在Windows上使用git-gui,它显示目录中未暂存更改的每个文件。这使得当我在主分支上时,很难找到我实际想要的更改。 - loop
你原本说的是“未跟踪”。这与“未暂存”不同。我仍然认为你只是没有在分支中提交文件。尝试按照我上面的指示操作并查看结果。 - Ryan Stewart
是的,我进行了一些调查,你是正确的。我已经更新了我的原始帖子,并将你的答案标记为正确。 - loop

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