编辑:根据评论中的@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了,看到如果我add
和commit
这个vendor/
目录到主分支,我将无法合并新的功能分支,因为某种冲突。我认为它还会搞乱功能分支上的子模块?!?我还没有尝试合并新的功能分支,而vendor/
没有跟踪,因为我不确定它是否会起作用,而且我不确定它可能会搞砸。
我该怎么办?我坐在主分支上,新功能分支位于vendor/
的子模块中。在主分支上,vendor/
文件夹位于未跟踪的文件中。
如何将功能分支成功合并到master?
答案 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。