gitignore - 在结账时隐藏被忽略的文件

时间:2012-12-07 10:56:18

标签: git git-branch gitignore git-checkout

这是我的问题(通过示例步骤):

  • 我有一个带有两个不同分支(branchA和branchB)的Git仓库,它们目前是相同的。
  • 结帐到branchB并创建一个新文件“foo.txt”。
  • 将该文件添加到该分支的“.gitignore”,以便在branchB中成功忽略它。
  • 创建另一个文件“hello.txt”,暂存并提交。
  • 结帐到branchA。
  • foo.txt出现在branchA中,但hello.txt没有出现。

为什么foo.txt出现在branchA中而不像hello.txt那样被“隐藏”?

从我的角度来看,这是一个很大的烦恼,似乎是一个错误/功能请求,但Git是否设计为这样做?我很惊讶地发现没有其他人抱怨这个。

3 个答案:

答案 0 :(得分:4)

这不是一个错误。要了解它是如何工作的,你需要了解一些事情。

  • .gitignore未在全球范围内“自动”应用。你需要提交它。
  • 任何未提交的文件都将在每个分支中可见。切换分支时,您应该commit该文件,或者stash它。

此外,此问题之前曾被问过,但我不会责怪你没有在搜索中找到它。 Working on two unrelated files in separate git branches

答案 1 :(得分:1)

foo.txt没有出现在branchA中,它只是不再被忽略,因为当你检出branchA时,对.gitignore的更改(我假设你将这些更改提交给branchB)会丢失。 foo.txt只是一个未跟踪的文件。切换到branchA时foo.txt“消失”表示您希望从工作目录中删除该文件。这与忽略文件非常不同。

您可以指定影响整个存储库的忽略模式,无论您使用$ GIT_DIR / info / exclude文件检出了哪个分支。这对您的存储库是本地的,因此忽略此文件中指定的模式将不会传播到其他存储库。见gitignore(5)。

答案 2 :(得分:0)

快速回答:

  • hello.txt不是“隐藏”,它已经被提交到branchB,因此你不会在branchA中看到你直接将branchB合并或变为branchA
  • .gitignore也是如此。如果你将.gitignore提交到branchB(我猜你做了),然后检查branchA,那么,branchA没有.gitignore文件,这就是为什么你看到foo.txt。同样,您需要将branchB合并或重新绑定到branchA