2011-01-20 108 views
1

假设我在master中有一个结构。GIT:当检出另一个分支时,我想清除被忽略的文件

d - src 
     - main ... 
     - resources ... 
    - target 
     - xyz 

文件XYZ不应被跟踪,所以我加入的.gitignore目标/ * 并提交结构

  • git的承诺-m '初始结构'

创建2分支

  • git branch t1
  • 的Git分支T2

,并切换到T1

  • git的结帐T1

我开始做一些工作,编译的东西,这样的目标被填充。 我将我的更改提交给t1。

  • git的承诺-a 'T1具体的变化'

然后切换到t2

  • git的结帐T2

当我凝视目标,它仍然是当分支t1处于活动状态时,创建的文件为 ,而我希望将这些“清除”为

我发现了一个类似的讨论,指出git的行为应该与我看到的不同。 Git is deleting an ignored file when i switch branches

我错过了什么?

弗朗西斯

+0

我不认为你仔细阅读了其他问题。被忽略的文件实际上并未被忽略。它在一个分支中被追踪,但没有被追踪,然后被添加到gitignore中,但从未从版本库中删除,所以切换分支将其删除,因为它将跟踪仅存在于一个分支中的内容。 – Cascabel 2011-01-20 22:02:02

回答

2

这是设计。 Git不会触及它在工作文件夹中未跟踪的文件。如果你想清理未跟踪的文件,你可以使用

git clean -xdf 

更常见的是,我想扔掉没有跟踪但未忽略的更改。这可能是因为我正在试验一些代码并添加了一个新的类文件。在这种情况下,我会使用:

git clean -df 

这将使我的输出目录保持原样。我会依靠我的开发工具来清理这些文件夹。

你可以使用钩子,但这不是一个好的解决方案,因为它很难在团队中共享。

+1

我认为这绝对是您不希望自动化的行为(例如,使用挂钩或别名)。有一天,你会写一些代码,忽略检查它,并切换分支......并发现你的“有用的”自动清理只是把它扔给你。与它是否可共享无关 - 你只是不想默认。 – Cascabel 2011-01-20 22:03:53

0

您可以添加一个post-checkout钩子清理忽略的文件:

git clean -f -X 
0

你挂在谈论的是在一个分支跟踪和在另一个忽略文件的问题。您正在讨论生成的文件,这些文件不在任何分支中进行跟踪。由于git没有跟踪它们,它不会对它们做任何事情。

相关问题