通过子模块在Git中显示外部代码依赖性

时间:2009-07-17 20:08:05

标签: git git-submodules

解决问题:通过子模块显示外部代码依赖关系:感谢VonC

当前问题:拥有a submodule without duplicate contents in two folders

当前问题的临时解决方案:将文件夹名称更改为bin-github,因为作为子模块的文件夹名称为bin。这意味着我需要在我的家中复制内容。

我的HOME文件夹依赖于〜/ bin。 我的文件位于存储库 Masi 的HOME,而位于Github的repo bin 的〜/ bin。我在家的相关文件夹结构:

~
|-- [drwxr-xr-x] bin
    | -- fileA
    ` -- folderA
    ...

我想知道如何在 Masi 上显示make~ / bin一个Git的子模块。

如何在〜/?

中将〜/ bin作为我的Git的子模块

#3回复VonC的评论:

我的.gitmodules

[submodule "bin"]   
         path = bin
         url = git://github.com/masi/bin.git

我觉得我不需要再添加子模块了,因为我已经在我的.gitmodules中了。

我跑

Sam master $ git submodule update
Sam master $ git submodule foreach git pull
Sam master $ ls bin 

#2回复VonC的回答:

我将.gitmodules更改为以下内容,以便我家中没有副本。

[submodule "bin"]
    path = bin
    url = git://github.com/masi/bin.git

这似乎是一种不同的情况,因为我无法像上面那样拉动子模块文件夹。

我现在以新鲜克隆的git-repo

获得以下内容
Sam master $ git submodule git init
error: pathspec 'git' did not match any file(s) known to git.
error: pathspec 'init' did not match any file(s) known to git.
Did you forget to 'git add'?                          # I am not sure what this means
Sam master $ git submodule foreach git pull
Sam master $ git submodule update

我的.gitmodules中有外部存储库。为什么要问我git add


回复VonC的回答:

我跑

git submodule add git://github.com/masi/bin.git bin-github-copy

因为我无法添加与现有文件夹bin同名的新回购。

我的.gitmodules是

[submodule "bin-github-copy"]
    path = bin-github-copy
    url = git://github.com/masi/bin.git

我跑

git clone git://github.com/masi/Sam.git

我得到一个emty bin -directory。

如何获取bin的内容?

1 个答案:

答案 0 :(得分:4)

首先,不要忘记使用Git,您不能“添加”目录,只能访问该目录中至少一个文件的内容。

然后你有两个选择:

  • submodules,以便Masi在GitHub存储的[ bin目录中引用您的]文件的特定提交(或最新的分支提交) ,存储在GitHub上)

  • subtree merge,为了将两个存储库混合在一起,更容易直接从Masi存储库对bin中的文件进行修改。在您的方案中,这可能更简单。

有关这两项策略的更多信息,请参阅this answer


在子模块路径上,声明子模块只是工作的一半。你仍然需要第一次初始化你的子模块

git submodule git init

然后你需要pull your submodules

git submodule foreach git pull

然后更新您的子模块

git submodule update

另请参阅此Git submodules, part IGit submodules, part II的实际示例。

  

.gitmodules文件仅存储路径,但提交版本确实与主项目一起存储   我创建了一个project on GitHub来演示会发生什么。具体看看this commit,它会添加子模块,看看发生了什么:

+Subproject commit 60be4b09f51d2560802ebd744893bb6f737ef57c