Git - 具有不同文件系统的多个分支
Git - Multiple branches with different file systems
如何正确组织多个分支,每个分支都有不同的文件系统?
情况是这样的-
我有两个分支:
- 当前主控项目文件是一年前制作的
- 当前正在用即将开发的新项目文件(完全不同的框架)开发,一会切换
事情变得有问题的地方是 develop brach 有,例如,文件夹 "storage" 被 .gitignore 文件忽略。其他分支没有这个文件夹(这就是为什么它也不在它的 .gitignore 文件中)。当我从 develop 结帐到 master brach 时,这个 "storage" 文件夹突然出现在根本不应该出现的其他分支中。
如何指定 files/folder 不得发送到服务器的每个项目,同时 files/folder 必须坚持每个分支而不在每次结帐时都经过分支。
我设法通过将这个文件夹添加到项目中的 .gitignore 文件来解决这个问题,这个文件夹甚至不应该存在(这就是我看不到我有任何应该提交的未更改文件的方式)但是我我猜这不是最好的解决方案,因为为什么我要排除一些本不应该存在的东西?
当我使用 PHPStorm 时,它变得更加复杂 IDE。 PHPStorm 在每个项目(在本例中为每个分支)中创建“.idea”文件夹,其中包含特定项目的所有配置和历史文件。显然,我不想将此文件夹发送到远程存储库(因为每个开发人员的每个项目都有自己的 .idea 文件夹),这就是为什么我将它排除在 .gitignore 文件中(我对两个分支都这样做,因为每个分支都有它自己的“.idea”文件夹)。当我结账到另一个分支时,这个文件夹会移动到那个分支,这是不应该发生的,因为这个 .idea 文件夹会破坏其他分支的 .idea 文件夹。所有配置都搞砸了。
为什么两个不同的项目文件系统是两个分支而不是两个项目? - 因为是同一个项目。只是全新的版本,它提供相同的视觉设计、功能并添加了许多额外的功能。将其称为其他项目是没有意义的。版本不同但项目相同
如果您使用 .gitignore 忽略文件/文件夹,它们将被 Git 忽略,句号。它们没有被跟踪,也没有被破坏,它们只是被忽略了。它们不会被添加、修改或删除,而是被完全忽略。它们未分配给任何分支,因为它们被忽略了。
我认为在你的情况下,最好为不同的分支设置多个工作树。工作树是签出实际文件供您处理的目录。使用 git worktree
,您可以将多个工作树添加到一个存储库,从而可以将不同的分支检出到不同的工作目录。
这样您就可以拥有分支 a
的文件夹 a
,您忽略了分支 a
的 .idea
和分支 b
的文件夹 a
=15=] 忽略分支 b
.
的 .idea
实际上 .idea
中的大多数文件(例如不是 workspace.xml
,但我认为所有其他文件)都不是特定于开发人员的,而是特定于项目的。因此,除了 workspace.xml
之外的所有内容都意味着能够签入版本控制,因此如果您切换到不同的分支,您可以随时获得该分支的正确 IDE 元数据,并且只需/.idea/workspace.xml
添加到 .gitignore
,因为 这个 文件包含开发人员特定的东西,例如 non-shared 运行 配置、打开的文件、工具 window 布局,window 个位置,等等。所以这可能是您可以考虑的另一种解决方案。
如何正确组织多个分支,每个分支都有不同的文件系统?
情况是这样的-
我有两个分支:
- 当前主控项目文件是一年前制作的
- 当前正在用即将开发的新项目文件(完全不同的框架)开发,一会切换
事情变得有问题的地方是 develop brach 有,例如,文件夹 "storage" 被 .gitignore 文件忽略。其他分支没有这个文件夹(这就是为什么它也不在它的 .gitignore 文件中)。当我从 develop 结帐到 master brach 时,这个 "storage" 文件夹突然出现在根本不应该出现的其他分支中。
如何指定 files/folder 不得发送到服务器的每个项目,同时 files/folder 必须坚持每个分支而不在每次结帐时都经过分支。
我设法通过将这个文件夹添加到项目中的 .gitignore 文件来解决这个问题,这个文件夹甚至不应该存在(这就是我看不到我有任何应该提交的未更改文件的方式)但是我我猜这不是最好的解决方案,因为为什么我要排除一些本不应该存在的东西?
当我使用 PHPStorm 时,它变得更加复杂 IDE。 PHPStorm 在每个项目(在本例中为每个分支)中创建“.idea”文件夹,其中包含特定项目的所有配置和历史文件。显然,我不想将此文件夹发送到远程存储库(因为每个开发人员的每个项目都有自己的 .idea 文件夹),这就是为什么我将它排除在 .gitignore 文件中(我对两个分支都这样做,因为每个分支都有它自己的“.idea”文件夹)。当我结账到另一个分支时,这个文件夹会移动到那个分支,这是不应该发生的,因为这个 .idea 文件夹会破坏其他分支的 .idea 文件夹。所有配置都搞砸了。
为什么两个不同的项目文件系统是两个分支而不是两个项目? - 因为是同一个项目。只是全新的版本,它提供相同的视觉设计、功能并添加了许多额外的功能。将其称为其他项目是没有意义的。版本不同但项目相同
如果您使用 .gitignore 忽略文件/文件夹,它们将被 Git 忽略,句号。它们没有被跟踪,也没有被破坏,它们只是被忽略了。它们不会被添加、修改或删除,而是被完全忽略。它们未分配给任何分支,因为它们被忽略了。
我认为在你的情况下,最好为不同的分支设置多个工作树。工作树是签出实际文件供您处理的目录。使用 git worktree
,您可以将多个工作树添加到一个存储库,从而可以将不同的分支检出到不同的工作目录。
这样您就可以拥有分支 a
的文件夹 a
,您忽略了分支 a
的 .idea
和分支 b
的文件夹 a
=15=] 忽略分支 b
.
.idea
实际上 .idea
中的大多数文件(例如不是 workspace.xml
,但我认为所有其他文件)都不是特定于开发人员的,而是特定于项目的。因此,除了 workspace.xml
之外的所有内容都意味着能够签入版本控制,因此如果您切换到不同的分支,您可以随时获得该分支的正确 IDE 元数据,并且只需/.idea/workspace.xml
添加到 .gitignore
,因为 这个 文件包含开发人员特定的东西,例如 non-shared 运行 配置、打开的文件、工具 window 布局,window 个位置,等等。所以这可能是您可以考虑的另一种解决方案。