GitHub不允许我访问子文件夹

问题描述 投票:3回答:2

Short:

GitHub已将我无法访问的存储库中的文件夹变灰。这让我担心,因为我的代码更改在那些文件夹中!

Long:

我正在开发ZF2 Web应用程序,并使用git进行源代码控制。 ZF2是模块化的,因此以某种方式(最有可能是composer.phar或git clone),我已经将一些ZF2模块下载到了项目子文件夹中。一种这样的ZF2模块是vendor/coolcsn/csn-user。我已经对该ZF2模块进行了更改。

问题1:运行git status时,我得到了:

$ git status
# On branch master
# Changes not staged for commit:
#       modified:   vendor/coolcsn/csn-user (modified content, untracked content)

[当我运行git commit时,它会显示“未添加更改以提交”。而且我确实进行了一些更改。

因此,我发现我可以将目录更改为vendor/coolcsn/csn-user,并在那里执行git status和git commit。然后,我可以回到项目的根目录,并在其中进行git commit。然后,一切都很好....直到:

问题2:直到我对GitHub进行git push为止。在GitHub上,我的整个项目似乎都准备就绪,但是vendor/coolcsn/csn-user在GitHub上无法访问!它是灰色的。我无法点击它。这让我哭。我不知道为什么,也不知道怎么回事。我已经阅读了一些有关git子模块的信息。我不知道我是否有git子模块或它们是否是其他东西。我自己没有自觉地设置任何子模块。无论哪种方式,我都担心我的GitHub子模块更改没有被跟踪,或者如果被跟踪,它们是隐藏的,无法查看。

可能的解决方案#1:我以为我可以删除子模块中的.git文件夹(如果它们是子模块),然后直接提交到GitHub,而我的csn-user文件夹可能不会显示为灰色。但是在这样做之前,我听说这是不可取的,并且我想检查发生了什么,以及如何(无论如何)可以正确使用git和GitHub及子模块,并在同时。

特别是寻找一组步骤,说明或想法,以了解如何使用git和GitHub使我的存储库可访问和可提交。

git zend-framework version-control github git-submodules
2个回答
3
投票

您似乎正在使用存储库中的子模块。运行git submodule status以查看正在使用的子模块。

“问题1”,您对提交的困惑,是由于将更改提交到根存储库与子模块的存储库之间的差异。听起来您正在提交到子模块存储库,然后更新根存储库以将其子模块指向该新提交。如果您不发布这些提交,则可能会出现问题,因为没有其他人可以找到它们,然后应检出根存储库并希望获取其依赖的子模块。

Github不会正确显示这些目录的内容,因为它们是对其他存储库中特定提交的引用,而不是根存储库本身的一部分。

虽然您可以将所有这些文件检入听起来确实很危险的根存储库。这样,您就可以破坏有关这些子文件夹内容来自何处的信息。没有其他人(包括将来的您在内)将无法轻松识别该内容来自何处,或者您从这些存储库中获取了哪个修订版本。


0
投票

如果您确实有子模块,并且正在运行git子模块状态以进行检查,请确保:

  • not从本地Git存储库的子文件夹运行命令
  • 或使用Git 2.25(Q1 2020)

这是因为,在Git 2.25(2020年第一季度)之前,从超级项目的子目录运行的“git submodulegit submodule”无法正常工作。已经纠正。

请参见statuscommit 1f3aea2(2019年11月25日)。[(在Manish Goregaokar (Manishearth)中由Manishearth合并,2019年12月5日

[Junio C Hamano -- gitster --:从子目录中调用时,修复'子模块状态']

签名人:Manish Goregaokar

[在子目录中调用gitster git子模块commit 88cf809时,我们错误地未检测到已修改的子模块,因此报告所有子模块均未更改。

这是因为子模块助手正在使用子模块路径调用submodule,并假设该路径是相对于当前前缀目录的,但是所使用的子模块路径实际上是相对于根的。

在子模块上运行差异文件时,始终传递submodule作为[,以确保子模块的路径被解释为相对于超级项目的存储库根目录。

© www.soinside.com 2019 - 2024. All rights reserved.