如何创建包含多个目录的git存储库?

时间:2017-04-22 02:23:20

标签: git

我已经查看了stackoverflow上的答案似乎解决了这个问题,但我是git的新手,当涉及到git repo项目分支与文件系统目录分支时,我发现这些措辞含糊不清。或者也许我在正确的轨道上,但无法弄清楚语法。

这是我正在尝试做的事情:

我有两条路径是项目的一部分:

  C:\dev\Delphi Library
  C:\dev\Delphi Projects\TNS

这两个路径都有多个需要跟踪的子目录。因此,一个git存储库可以跟踪这两个目录分支。我认为答案是使用git worktree。如果它是我无法弄清楚语法,我开始怀疑worktree是否实际上是这样做的方式。

我所做的是在C:\ Delphi Projects \ TNS中创建一个新的存储库,暂存它,然后运行

git worktree add “C:\dev\Delphi Library”
git worktree add “C:/dev/Delphi Library”
git worktree add “\C\dev\Delphi Library”
git worktree add “C/dev/Delphi Library”
git worktree add "..\..\Delphi Library"
git worktree add "../../Delphi Library"

然后所有相同的没有双引号。大多数情况下我收到以下错误:

fatal: invalid reference: Library

但我也得到了:

fatal: 'Delphi Library' is not a valid branch name.

我是否必须首先在“C:\ dev \ Delphi Library”中初始化存储库?我应该先提交TNS项目吗?我只是上演了它。是否有可能让一个回购跟踪多个非孩子(我可以说“兄弟姐妹”吗?)文件夹?运行git worktree时是否必须指定分支? -b选项是可选的。

请注意,我不想跟踪许多其他C:\ dev文件夹,因此在C:\ dev中使用git repo不是一个选项。

我正在尝试使用git版本2.8.1.windows.1的Windows XP。

1 个答案:

答案 0 :(得分:1)

有人指出,工作树不是你正在寻找的。 Worktree概念用于创建一个Git存储库的多个副本。

您应该将这些项目放到不同的Git存储库中。但是,您可以通过使用Git子模块来实现您的想法。您可以将这两个目录设置为Git存储库,并且可以将库项目作为子模块放在TNS项目下。但是,如果你只在当地工作(正如你的问题所示),那么可能会造成更多混乱,然后受益。更新,合并和管理子模块有时会变得复杂,尤其是在所有本地存储库之间。

如果您想尝试将两个目录初始化为Git存储库,然后在git submodule add "..\..\Delphi Library" lib 使用以下命令:

C:\dev\Delphi Library

这将在TNS项目内的lib文件夹下复制库项目。每当您在git submodule update文件夹中编辑库项目时,请使用TNS项目文件夹中的C:\dev\Delphi Library,以便将更改传输到TNS。

如果您尝试修改子模块文件夹lib,git将阻止您将更改推送到{{1}}文件夹,因为它包含工作副本(不是贫瘠的存储库)。

你可以尝试一下这个解决方案,但是当你开始拥有分支,开始做rebase等时,事情可能会变得更加复杂。至少考虑设置贫瘠的远程存储库,以便更容易推送变化。