分支中的Git子模块不是主模块
编辑:根据注释中的@VonC,我有一个嵌套的回购,而不是子模块。但是,我的问题仍然与以下相同: 我在本地回购协议的基础上创建了一个分支来开发一个新功能。新功能要求我通过composer安装Azure PHP SDK。事实证明,Azure SDK已经在分支中的Git子模块不是主模块,git,git-branch,git-merge,git-submodules,Git,Git Branch,Git Merge,Git Submodules,编辑:根据注释中的@VonC,我有一个嵌套的回购,而不是子模块。但是,我的问题仍然与以下相同: 我在本地回购协议的基础上创建了一个分支来开发一个新功能。新功能要求我通过composer安装Azure PHP SDK。事实证明,Azure SDK已经在/vendor文件夹中创建了自己的git回购。现在我在这个新分支中有一个子模块 我已经提交了这个分支中的所有内容,当我执行git status时,我会收到 nothing to commit, working directory clean 现在,
/vendor
文件夹中创建了自己的git回购。现在我在这个新分支中有一个子模块
我已经提交了这个分支中的所有内容,当我执行git status
时,我会收到
nothing to commit, working directory clean
现在,当我切换回我的主分支合并这个新功能分支并执行git status
时,我看到:
Untracked files : vendor/
我在谷歌上搜索到,如果我向主分支添加和提交此供应商/
目录,由于某种冲突,我将无法合并新的功能分支。我想它也会弄乱功能分支上的子模块?!?我没有尝试合并新的功能分支,而不跟踪供应商/
,因为我不确定它是否会工作,也不确定它会出什么问题
我应该如何进行?我坐在主分支上,新功能分支坐在那里,在vendor/
中有一个子模块。在主分支上,vendor/
文件夹位于未跟踪的文件中
如何将功能分支成功合并到master中?我认为您不需要跟踪git repo中的“vendor”
目录
因此,我只需删除它(untrack),提交相应的更改,并将供应商目录添加到项目的.gitignore
目录中,以便将来仍保持未跟踪状态
这方面的步骤很简单:
git checkout feature_branch
git rm -r --cached vendor
echo "vendor" >> .gitignore && git add .gitignore
git commit -m "untrack vendor directory"
上面的--cached
标志将在本地保留文件,即使git rm
处于未跟踪状态
FWIW,供应商目录的内容是Composer
安装的依赖项,它们可以动态生成。因此,它应该是部署脚本的一部分,这样您就可以使用composer设置您的环境,因此不应该签入您的repo
(注意:您可能希望探索在部署中维护通用供应商的共享软链接,以避免每次构建过程中出现新的下载时间)
引用
一般建议为否。供应商目录(或安装依赖项的位置)应添加到.gitignore
/svn:ignore
/etc
最佳做法是让所有开发人员使用Composer
安装依赖项。类似地,构建服务器、CI、部署工具等也应进行调整,以便在项目引导过程中运行Composer
如果主repo中有.gitmodules文件,并且在索引()中将供应商声明为gitlink条目(),则它只是一个子模块。在您的情况下,供应商真的是一个子模块吗?或者只是一个嵌套的git回购?(在这种情况下,您可以将其转换为子模块:)我似乎没有.gitmodules文件。然而,我已经将我的功能分支推到了bitbucket,它说vendor/
中的Azure SDK文件夹是一个子模块。。。我担心在功能分支中,我的工作目录是干净的,但当我移回主分支时,会产生错误警告:无法rmdir irn/vendor/microsoft/windowsazure:directory not empty
,然后在功能分支中的未跟踪文件中突然出现vendor/
,您是否在供应商/
目录下的azure sdk
目录中看到.git/
文件夹或.git
文件?有一个.git
文件夹。为完整起见,文件夹结构为vendor/microsoft/windowsazure/.git
,因此它实际上是一个嵌套的repo,而不是子模块。不知道bitbucket为什么会看到那个文件夹。