2011-05-19 255 views
1

我有一个非常基本的工作环境,但没有设法根据需要使用Git。Git:使用.gitignore与不同分支

以下是我们如何描述它:两个分支A和B各有两个文件在其工作树中,第一个文件是toMerge,第二个文件是KeepSpecific。

我在两个分支中有相同的.gitignore,表示忽略toKeepSpecific文件。 toKeepSpecific文件从未在远程存储库中推送过,因此两个分支只包含toMerge。

我遇到的问题是,当我在分支B上并尝试结帐分支A时,我收到以下消息:“以下未跟踪的工作树文件将被结帐覆盖”。我认为.gitignore会照顾,但显然不...

什么是最适合这种需求的git环境?

谢谢!

+0

这之前未追踪文件是在抱怨?另外,.gitignore不应该管理git正在跟踪的文件。 – 2011-05-19 10:59:41

+0

这是提出抱怨的toKeepSpecific文件... – Johanisma 2011-05-19 11:01:40

回答

2

git ignore tell git 不跟踪文件内容通过具体名称

编辑这只能防止git显示未跟踪的文件,或在git add后自动跟踪它们。 它不适用于当前跟踪的文件。您需要从您希望首先忽略的分支中手动删除它们。

IOW:git ignore不影响现有修订版。跟踪的文件将继续跟踪,直到您删除它们


无论是,这是从来没有确定覆盖本地文件没有任何警告,即使他们不是(目前)跟踪。这正是为了防止转换分支上的数据丢失。

许多git命令接受--force-选项,无论如何,所以如果你知道你在做什么,尽一切办法,使用它。

如果使用Git的工作流程,不允许你使用--force选项,那么我建议你采用git clean -x命令清理未跟踪(即忽略)文件执行分支开关

+0

我不想使用--force,因为我不希望文件被覆盖,我想保留当前的本地版本... – Johanisma 2011-05-19 11:27:38

+0

checkout结帐。您无法在保持某些文件不变的情况下检出版本。您首先必须确保阻止文件不再位于您尝试结帐的修订版本中。你可以做相反的事情:'git checkout revision - notignored1/notignored2 /'但是这会改变语义:这将不会将HEAD更新为结账版本,而是覆盖命名的本地文件,同时保持与之前相同的HEAD。 – sehe 2011-05-19 11:30:49

+0

添加了对答案的说明 – sehe 2011-05-19 11:33:43