我正在开发一个有大量回购的大项目,它位于不同的文件夹中。
1 - 共享图书馆
2 - API(使用库)
3 - 移动应用程序(使用api)
4 - 具有CMS的网站(使用api和库)
5 - 客户信息系统(使用api和库)
该库是sym链接的,以防止重复,并且API是基于休息的,可以在外部调用...
我和其他开发人员一起遇到了一些问题,我们在回购中处理新功能,需要在库中使用新的分支api然后说网站。当另一个开发人员开始使用此功能时,分支对另一个分支的依赖性并不明显。有没有办法在repos中链接分支依赖关系?因此,如果我在网站上签出feature-1分支,git还会检查依赖库和api repos上的相应功能banches?
答案 0 :(得分:1)
从http://git-scm.com/book/en/Git-Tools-Submodules
编辑在这种情况下出现了一个常见问题:您希望能够将每个项目视为单独的项目,但仍然可以使用另一个项目。包含库的问题在于难以以任何方式自定义库,并且通常更难以部署库,因为您需要确保每个客户端都具有该库。将代码存储到您自己的项目中的问题是,当上游更改可用时,您所做的任何自定义更改都很难合并。 Git使用子模块解决了这个问题。子模块允许您将Git存储库保存为另一个Git存储库的子目录。这使您可以将另一个存储库克隆到项目中,并使您的提交保持独立。
您应该做的第一件事是将外部存储库克隆到您的子目录中。使用以下命令将外部项目添加为子模块:
git submodule add
您可以进入该子目录,进行更改,添加自己的可写远程存储库以将更改推送到原始存储库,从原始存储库中获取和合并等等。如果你在添加子模块后立即运行git status,你会看到两件事:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: .gitmodules
# new file: <name_of_cloned_repo>
#
首先你注意到.gitmodules文件。这是一个配置文件,用于存储项目URL和您将其拉入的本地子目录之间的映射:
$ cat .gitmodules
[submodule "rack"]
path = rack
url = git://github.com/chneukirchen/rack.git
虽然是工作目录中的子目录,但Git将其视为子模块,并且当您不在该目录中时不会跟踪其内容。相反,Git将其记录为来自该存储库的特定提交。当您在该子目录中进行更改和提交时,超级项目会注意到其中的HEAD已更改并记录您当前正在处理的确切提交;这样,当其他人克隆这个项目时,他们可以完全重新创建环境。
这是子模块的一个重点:您将它们记录为它们所处的确切提交。您不能在主数据库或其他符号引用中记录子模块。
您可以将目录视为单独的项目,然后使用指向该子项目中最新提交的指针不时更新您的超级项目。所有Git命令都在两个目录中独立工作......