Git Submodule in branch not master

时间:2014-12-23 10:45:04

标签: git git-branch git-merge git-submodules

编辑:根据评论中的@VonC,我有一个嵌套的repo,而不是子模块。不过我的问题仍然如下:

我从我的本地仓库创建了一个分支来处理新功能。新功能要求我通过composer安装Azure PHP SDK。事实证明,Azure SDK已在/vendor文件夹中创建了自己的git repo。所以我现在在这个新分支中有一个子模块。

我已经在这个分支中提交了所有内容,当我git status时,我收到了

nothing to commit, working directory clean

现在,当我切换回我的主分支以合并这个新功能分支并执行git status时,我看到了:

Untracked files : vendor/

我已经google了,看到如果我addcommit这个vendor/目录到主分支,我将无法合并新的功能分支,因为某种冲突。我认为它还会搞乱功能分支上的子模块?!?我还没有尝试合并新的功能分支,而vendor/没有跟踪,因为我不确定它是否会起作用,而且我不确定它可能会搞砸。

我该怎么办?我坐在主分支上,新功能分支位于vendor/的子模块中。在主分支上,vendor/文件夹位于未跟踪的文件中。

如何将功能分支成功合并到master?

1 个答案:

答案 0 :(得分:2)

我认为您不需要跟踪git仓库中的"vendor"目录。

所以我只是删除它(取消它),提交相应的更改,并将供应商目录添加到项目的.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设置环境,因此不应该检入您的仓库。

(注意:您可能希望探索在部署中维护公共vendor的共享软链接,以避免在每次构建期间获得新的下载时间。

引用composer docs for Should I commit the dependencies in my vendor directory?

  

一般建议是否定的。应将供应商目录(或安装依赖项的任何位置)添加到.gitignore / svn:ignore / etc。

     

最佳做法是让所有开发人员使用Composer来安装依赖项。同样,构建服务器,CI,部署工具等应该适合于作为项目引导的一部分运行Composer。