5

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

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

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

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

4

3 回答 3

4

这不是一个错误。要了解它的工作原理,您需要了解一些事情。

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

另外,这个问题以前也有人问过,不过我不怪你没有在搜索中找到它。在不同的 git 分支中处理两个不相关的文件

于 2012-12-07T11:16:15.203 回答
1

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

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

于 2012-12-08T18:47:27.117 回答
0

快速回答:

  • hello.txt 不是“隐藏的”,它已被提交给 branchB,因此在您将 branchB 合并或变基到 branchA 之前,您不会在 branchA 中看到
  • .gitignore 也是如此。如果你将 .gitignore 提交给了 branchB(我猜你是这样做的),然后签出 branchA,那么,branchA 没有 .gitignore 文件,这就是你看到 foo.txt 的原因。同样,您需要将 branchB 合并或变基到 branchA
于 2012-12-07T11:07:16.810 回答