Git - 具有不同文件系统的多个分支

时间:2017-01-27 08:59:39

标签: git version-control filesystems branch gitignore

如何正确组织多个分支,每个分支具有不同的文件系统?

情况如下 -


我有两个分支:

  • 包含一年前制作的项目文件的当前母版
  • 当前开发的新项目文件(完全不同的框架)即将开发并在某一时刻切换
事情有问题的地方就是开发brach有例如.gitignore文件忽略的文件夹“storage”。其他分支没有此文件夹(这就是为什么它不在其.gitignore文件中)。当我从开发到掌握结账时,这个“存储”文件夹突然出现在其他分支中,它根本不应该出现。

如何指定每个项目哪些文件/文件夹不得发送到服务器,同时哪些文件/文件夹必须与每个分支保持一致,而不必在每次结帐时通过分支。

我设法通过将此文件夹添加到项目中的.gitignore文件来解决此问题,该文件夹甚至不应该存在(这就是我没有看到我有任何应该提交的未更改的文件)但是我想它不是最好的解决方案,因为我为什么要排除那些甚至不应该存在的东西?

当我使用PHPStorm IDE时,它变得更加复杂。 PHPStorm在每个项目(在本例中为每个分支)创建“.idea”文件夹,其中包含特定项目的所有配置和历史文件。显然,我不想将此文件夹发送到远程存储库(因为每个开发人员每个项目都有自己的.idea文件夹),这就是我在.gitignore文件中排除它的原因(我为两个分支做了这个,因为每个分支都有它自己的“.idea”文件夹)。当我结帐到另一个分支时,这个文件夹会移动到那个不应该发生的分支,因为这个.idea文件夹会破坏其他分支的.idea文件夹。所有的配置都搞砸了。

为什么两个不同的项目文件系统作为两个分支而不是两个项目? - 因为它是同一个项目。只是全新的版本,它提供相同的视觉设计,功能并增加了许多额外的功能。将其称为其他项目是没有意义的。它是不同的版本,但是同一个项目。

1 个答案:

答案 0 :(得分:2)

如果忽略.gitignore的文件/文件夹,Git,fullstop会忽略它们。它们没有被跟踪,也没有被破坏,它们被忽略了。它们不会被添加,修改或删除,但会被完全忽略。它们未被分配给任何分支,因为它们被忽略。

我认为在你的情况下,为不同的分支机构提供多个工作项是最好的。工作树是检出实际文件的目录,供您使用。使用git worktree,您可以将多个工作树添加到一个存储库,从而可以将不同的分支签出到不同的工作目录。

通过这种方式,您可以为分支a设置文件夹a,您已忽略分支.idea的{​​{1}}和分支{{1}的文件夹a您已忽略分支b的{​​{1}}。

实际上b中的大多数文件(例如,不是.idea,但我认为所有其他文件)都不是开发人员特定的,而是项目特定的。因此除了b之外的所有内容都意味着能够签入版本控制,因此如果您切换到不同的分支,您可以使用正确的IDE元数据来获得此分支,并且只有{{1}添加到.idea作为文件包含开发人员特定的内容,如非共享运行配置,打开的文件,工具窗口布局,窗口位置等。所以这可能是您需要考虑的另一种解决方案。