如何拉新的子模块

时间:2017-05-22 05:22:31

标签: git git-submodules

尝试在此网站和其他人上寻找答案: StackOverflow - Easy way pull latest of all submodules

他们似乎都想谈谈你是否在控制它们,而不是如果其他人添加了一个,我只想将额外的一个添加到我的项目中,而不必隐藏或备份我的更改,如果我需要删除文件夹中。

我应该删除.gitmodules文件和/或我已用git clone --recursive删除的子模块目录吗? (StackOverflow - How to git clone including submodules?

这些命令似乎也没有帮助:

  • git submodule update --init --recursive似乎没有做任何事。
  • git submodule update --recursive没什么。
  • git fetch --recurse-submodules多次输出Fetching submodule ...
  • git pull --recurse-submodules输出相同的内容,然后在获取试用后说Already up-to-date.。奇怪,因为在任何一种情况下我的子模块都已下载。
  • git clone --recursive ... 尚未尝试。我觉得我会覆盖我在Stash或其他方面所做的任何更改。
  • git submodule update --recursive --remote检出了其中一个子模块的新提交SHA。
  • git submodule update --recursive检出了其中一个子模块的新提交SHA。可能是较旧的原始提交级别。
  • git submodule status为每个提供适当的SHA,版本和名称信息,但仍缺少我想要的信息。
  • git submodule foreach git pull origin master
  • git submodule update什么也没做。

我每次都手动仔细检查库目录,以确定是否出现了附加子模块。

我想避免执行某些操作,除非它们对我当前包含代码更改的存储库状态没有破坏性,并且解决了我的问题,以防它是我提到但没有运行的命令,或者其他人有另一个尝试。

我可以用更多的努力尝试其中的一些,但我想我现在想停止搞乱它们,因为在做了一些在线搜索后我还没有找到这个问题的答案,也许有希望和最终的答案会无论如何都要帮助别人。

我是否患有这里提到的骗局? Software Engineering - Git submodule vs Git clone

更多链接:

5 个答案:

答案 0 :(得分:24)

git submodule update --init local/path/to/submodule/folder

答案 1 :(得分:3)

到目前为止,我收到的最佳建议是运行此命令:

git submodule add <URL_to_submodule> <local_path_to_place_submodule>

所以它看起来是另一个贡献者会做的,我会再做一次,即使它已经存在于遥控器中。

我想这在技术上并不会像远程数据一样更新远程数据中的.gitmodules文件,但还没有找到办法。

帮助归功于@pandatrax

<强>更新

在尝试add方法之前,我尝试了另外一个想法,即手动从远程复制.gitmodules文件并尝试任何更新命令,但遗憾的是这种方法也不起作用。如果我在root中执行命令,可能会有所不同,因为我在子文件夹中,但我对此表示怀疑。

然后我使用了下载依赖项的add方法,但.gitmodules文件显示了更改。一旦我设置了GitHub遥控器并在丢弃该文件后从中取出,该项目现在似乎处于更好的状态,甚至同步更新模块或2的提交SHA,因为它们匹配或被覆盖。

答案 2 :(得分:2)

你必须做两件事:

  1. 在主存储库中执行git pull,其中包含子模块。这会将新的子模块添加为空目录。
  2. 在主存储库中执行git submodule update --recursive --remote。这将为所有子模块提取最新更改,包括新的子模块。
  3. 这至少在Git 2.13中起作用。另请注意,如果存储库和子模块位于GitHub上,则必须确保您具有对它们的访问权限(如果它们是私有的)。

答案 3 :(得分:1)

只要新的子模块位于远程的.gitmodules中,此方法就可以工作

git pull --recurse-submodules

答案 4 :(得分:0)

当我通过以下命令更新子模块时,为我的子模块解决了问题:

function MyComponent() {
  return <div dangerouslySetInnerHTML={myContent} />;
}