所以我有两个git回购。第一个是我们的框架(想想数据库抽象,函数),然后是我们新项目的另一个git repo。
我想将框架git repo包含到项目git中,根据GitHub帮助,这应该有效:
cd /project
git remote add framework git://github.com/username/Framework.git
git fetch framework
git merge framework/master
问题是,当我进行合并时,它会从框架中提取所有文件,并将它们简单地转储到项目的根目录中。相反,我们如何将框架文件合并到像/project/framework/
?
答案 0 :(得分:22)
您可能需要查看Git的submodule支持。子模块允许您在另一个git存储库中嵌入一个git存储库。这种事情有alternative solutions,但我自己没有使用它们。
示例可能如下所示:
$ git clone git://github.com/username/project.git
$ cd project
$ git submodule add git://github.com/username/framework.git framework
$ git commit -m "added framework submodule"
如果要克隆包含子模块的存储库,则需要使用--recursive
选项:
$ git clone --recursive git://<repository-with-submodules>.git
或者,您可以定期克隆然后运行:
$ git submodule init
$ git submodule update
阅读链接文档(和git submodule --help
)以获取更多信息。
如果对子模块进行了更改,则将它们带入:
# first update the submodule just like any other git repository
$ cd project/framework
$ git pull
# now you have to record the new commit in the parent repository
$ cd ..
$ git commit -m "updated framework submodule"
最后一步是必要的,因为git会保存与给定子模块关联的特定提交的记录(这样当任何人克隆父级时,他们将获得该子模块的版本,而不是其最新的修订版本,这可能会发生重大变化,阻止它与父存储库一起工作)。因此,如果更新子模块,则需要在父模块中记录新提交。
如果您在framework
子模块中进行更改,您将再次git push
,就像您使用任何其他存储库一样。然后,您必须在父模块中提交新版本。