如何创建包含多个目录的 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 项目吗?我只是上演过。甚至可以让一个 repo 跟踪多个非子文件夹(我可以说“兄弟”吗?)文件夹?运行 git worktree 时是否必须指定分支?-b 选项是可选的。

请注意,我不想跟踪许多其他 C:\dev 文件夹,因此在 C:\dev 中拥有 git repo 不是一种选择。

我正在使用 git 版本 2.8.1.windows.1 在 Windows XP 上尝试此操作。

无限重构

正如有人指出的那样,工作树不是您要找的。Worktree 的概念是为一个 Git 存储库创建多个副本。

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

如果您想尝试一下,只需将两个目录初始化为 Git 存储库,然后在以下位置使用以下命令C:\dev\Delphi Projects\TNS

git submodule add "..\..\Delphi Library" lib

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

如果您尝试修改子模块文件夹 lib,git 将阻止您将更改推送到C:\dev\Delphi Library文件夹,因为它包含一个工作副本(不是一个贫瘠的存储库)。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章