Git分支依赖

时间:2012-11-27 15:34:06

标签: git version-control branch

我正在开发一个有大量回购的大项目,它位于不同的文件夹中。

1 - 共享图书馆
2 - API(使用库)
3 - 移动应用程序(使用api)
4 - 具有CMS的网站(使用api和库)
5 - 客户信息系统(使用api和库)

该库是sym链接的,以防止重复,并且API是基于休息的,可以在外部调用...

我和其他开发人员一起遇到了一些问题,我们在回购中处理新功能,需要在库中使用新的分支api然后说网站。当另一个开发人员开始使用此功能时,分支对另一个分支的依赖性并不明显。有没有办法在repos中链接分支依赖关系?因此,如果我在网站上签出feature-1分支,git还会检查依赖库和api repos上的相应功能banches?

1 个答案:

答案 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命令都在两个目录中独立工作......