gpt4 book ai didi

Git:多个项目可以使用相同的子模块工作副本吗?

转载 作者:IT王子 更新时间:2023-10-29 01:09:40 25 4
gpt4 key购买 nike

我是 Git 新手。比方说,我有两个 git 存储库,它们添加了相同的库作为子模块:

/home/projects/project1/library_XYZ
/home/projects/project2/library_XYZ

还可以说,我正在同时处理项目 库。当我对库进行更改时,假设在 /home/projects/project1/library_XYZ 中,我将不得不推送这些更改,然后将它们 pull 入 /home/projects/project2/library_XYZ 使它们可用于 project2,对吗?我认为这不方便,原因有二:

  • 我将不得不构建 library_XYZ 两次。
  • 我有一个不想要的冗余,与实际的项目组织相矛盾。

有什么方法可以让 Git 将子模块 library_XYZ 克隆到相同 本地目录,即将文件组织成这样

/home/projects/project1
/home/projects/project2
/home/projects/library_XYZ

虽然 library_XYZ 仍然是两个项目的子模块?

我认为这可能与 this 有关,虽然我的设置有些不同,但没有答案。

最佳答案

将共享依赖项设置为子模块很容易。 git submodule 命令不会自动执行此操作,但子模块只不过是一个嵌套的存储库——而 git 不需要任何实际存储库或其工作树位于任何特定位置。

设置 libraryXYZ 存储库以用作共享子模块

# a submodule is just a repository. We're going to share this one.
git clone u://r/libraryXYZ

# and keep its worktree right here:
( cd libraryXYZ; git config core.worktree .. )

然后,从任何地方,使用子模块克隆项目并将其设置为使用共享的:

git clone u://r/project1
cd project1
git submodule init
echo gitdir: path/to/shared/libraryXYZ/.git > libraryXYZ/.git

现在 project1libraryXYZ 子模块将使用共享的 libraryXYZ 存储库和工作树。

设置您的构建系统以使用相同的工作树,您就完成了。你当然可以让 git 告诉你那些在任何给定的 repo 中的位置:

# for example to see where all a project's submodules' parts are kept
git submodule foreach git rev-parse --git-dir --show-toplevel

# or for just one:
git --git-dir=$project1/libraryXYZ/.git rev-parse --git-dir --show-toplevel

(后期编辑:@twalberg's remark 值得牢记,这可能会使从一个项目执行 git submodule update 而没有意识到您还更改了构建环境变得有点太容易了对于共享依赖项的所有其他项目。)

关于Git:多个项目可以使用相同的子模块工作副本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27379818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com