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 submodule status
以查看正在使用的子模块。
“问题1”,您对提交的困惑,是由于将更改提交到根存储库与子模块的存储库之间的差异。听起来您正在提交到子模块存储库,然后更新根存储库以将其子模块指向该新提交。如果您不发布这些提交,则可能会出现问题,因为没有其他人可以找到它们,然后应检出根存储库并希望获取其依赖的子模块。
Github不会正确显示这些目录的内容,因为它们是对其他存储库中特定提交的引用,而不是根存储库本身的一部分。
虽然您可以将所有这些文件检入听起来确实很危险的根存储库。这样,您就可以破坏有关这些子文件夹内容来自何处的信息。没有其他人(包括将来的您在内)将无法轻松识别该内容来自何处,或者您从这些存储库中获取了哪个修订版本。
如果您确实有子模块,并且正在运行git子模块状态以进行检查,请确保:
这是因为,在Git 2.25(2020年第一季度)之前,从超级项目的子目录运行的“git submodule
git submodule
”无法正常工作。已经纠正。
请参见status
的commit 1f3aea2(2019年11月25日)。[(在Manish Goregaokar (Manishearth
)中由Manishearth
合并,2019年12月5日
[Junio C Hamano --
gitster
--:从子目录中调用时,修复'子模块状态']签名人:Manish Goregaokar
[在子目录中调用
gitster
git子模块commit 88cf809时,我们错误地未检测到已修改的子模块,因此报告所有子模块均未更改。这是因为子模块助手正在使用子模块路径调用
submodule
,并假设该路径是相对于当前前缀目录的,但是所使用的子模块路径实际上是相对于根的。在子模块上运行差异文件时,始终传递
submodule
作为[
,以确保子模块的路径被解释为相对于超级项目的存储库根目录。