Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用`git子模块更新`_Git - Fatal编程技术网

使用`git子模块更新`

使用`git子模块更新`,git,Git,假设我有project\u a(git-repo),其中包含文件和另一个project\u b(git-repo) 正如本书所示,我可以运行: cd project_a git submodule init git submodule update // clones project_b repo specified in '.gitsubmodules' 填充project\u a中最初为空的project\u b目录 我宁愿在某个时间点克隆project\b的最新版本,然后让project

假设我有
project\u a
(git-repo),其中包含文件和另一个
project\u b
(git-repo)

正如本书所示,我可以运行:

cd project_a
git submodule init
git submodule update // clones project_b repo specified in '.gitsubmodules'
填充
project\u a
中最初为空的
project\u b
目录

我宁愿在某个时间点克隆
project\b
的最新版本,然后让
project\a
只使用该版本(当然,除非我在
project\b
中执行
git pull


我该怎么做呢?

您所描述的正是子模块在git中是如何工作的。如果不更新子模块的哈希并将其签入到
project\u a
,您将始终使用相同版本的
project\u b

这是引入子模块时应使用的方法:

  • cd项目a

  • git子模块添加https://url/to/repository 相对/路径/到/保存/存储库/到

  • cd相对/path/to/save/repository/to

  • git签出所需的\u提交

  • cd-
    (返回上一个目录)

  • git添加相对/path/to/save/repository/to

  • git commit
    (无论何时提交到父目录,它都会记录所有子模块都处于启用状态的当前提交)


  • 如果您想随时更改子模块的提交,您只需更改到该目录并像正常情况一样处理它。只需确保您始终将其置于推送到其原点的提交上。否则,您可能会遇到这样一种情况:父存储库指向的提交在实际存储库中不存在。

    因此,如果我执行以下操作:(1)生成
    project\u a
    (2)
    git子模块add project\u b
    (3)
    git add.gittributes project\u b
    (4)
    git commit-m“added project\u b repo”
    (5)
    git推送原始主机
    。然后,任何
    git克隆项目a
    ,后跟
    git子模块init&&git子模块update
    都将具有相同的原始
    项目b
    ?(即使project\u b的官方回购协议还有5次提交)?是的,这就是会发生的。因此,如果我想包括
    project\u b
    中的5次更新,我需要(1)cd到
    project\u a/project\u b
    (2)
    git pull origin master
    (3)
    cd.
    (4)
    git commit-m“从project\u b获得最新版本”
    (5)
    git推送原始主机
    ?然后,任何执行
    git clone project\u a&&cd project\u a&&git submodule init&&git submodule update
    的人都将拥有一个
    project\u b
    项目,包括这5项更改?对于那些
    git clone
    父报告必须运行
    git submodule update
    的人来说,这似乎是一件麻烦事。但我想没有别的选择了,对吧?没错。如果您经常使用子模块,那么在新的克隆之后这样做就成了第二天性。而且,克隆一个新的repot对于大多数人来说并不是一项很常见的任务。如果您想让它变得简单一点,可以在父repot的“setup”脚本中包含必要的命令。
    cd project_a
    git submodule init
    git submodule update // clones project_b repo specified in '.gitsubmodules'