我们说我有project_a
(git repo),其中包含文件&另一个project_b
(git repo)。
project_a
--> files
--> project_b
正如git-scm书所示,我可以运行:
cd project_a
git submodule init
git submodule update // clones project_b repo specified in '.gitsubmodules'
填充project_b
内最初为空的project_a
目录。
我不想运行git submodule update
以获取project_b
的最新信息,而是希望在某个时间点克隆最新版本的project_b
,然后project_a
1}}仅使用该版本(当然,除非我在git pull
中执行project_b
)。
我该怎么做?
答案 0 :(得分:3)
您所描述的正是子模块在git中的工作原理。如果您不更新子模块的哈希值并将其签入project_a
,则您将始终使用相同版本的project_b
。
答案 1 :(得分:0)
这是引入子模块时应该使用的方法:
cd project_a
git submodule add https://url/to/repository relative/path/to/save/repository/to
cd relative/path/to/save/repository/to
git checkout desired_commit
cd -
(返回上一个目录)
git add relative/path/to/save/repository/to
git commit
(无论何时提交父目录,它都会记录所有子模块所在的当前提交。)
如果您想随时更改子模块的提交,只需更改到该目录并像平常一样使用它。只要确保你总是把它放在一个推送到它原点的提交上。否则,您可能会遇到父存储库指向实际存储库中不存在的提交的情况。