4

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

当前问题:在两个文件夹中有一个没有重复内容的子模块

当前问题的临时解决方案:将文件夹名称更改为 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

这似乎是一种不同的情况,因为我无法像上面那样拉出 submodule-bin 文件夹。

我现在在一个新克隆的 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 目录。

如何获取 bin 的内容?

4

1 回答 1

5

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

那么你有两个选择:

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

  • subtree merge,以便将两个存储库混合在一起,并更轻松地直接从 Masi 存储库跟踪对 bin 中文件的修改。在您的情况下,这可能更简单。

有关这两种策略的更多信息,请参阅此答案


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

git submodule git init

然后你需要拉你的子模块

git submodule foreach git pull

然后更新您的子模块

git submodule update

另请参阅这个带有Git 子模块的实际示例,第 I 部分Git 子模块,第 II 部分

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

+Subproject commit 60be4b09f51d2560802ebd744893bb6f737ef57c
于 2009-07-17T20:48:06.273 回答