3

短的:

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

长:

我正在开发一个 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 保持我的 repo 可访问和可提交的步骤、说明或想法。

4

2 回答 2

3

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

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

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

虽然您可以将所有这些文件签入您的根存储库,但这听起来很危险。这样做会破坏有关这些子文件夹内容来自何处的信息。没有其他人(包括将来的您)将能够轻松识别该内容的来源或您从这些存储库中获取的修订版本。

于 2013-11-12T00:38:03.283 回答
1

如果您确实有子模块,并运行 git submodule status 来检查它,请确保:

  • 不要从本地 Git 存储库的子文件夹运行命令
  • 或使用 Git 2.25(2020 年第一季度)

这是因为,在 Git 2.25(2020 年第一季度)之前,从超级项目的子目录运行的 " " 不能正常工作。这已得到纠正。git submodule status

请参阅Manish Goregaokar ( ) 的提交 1f3aea2(2019 年 11 月 25 日(由Junio C Hamano 合并 -- --提交 88cf809中,2019 年 12 月 5 日)Manishearth
gitster

submodule:从子目录调用时修复“子模块状态”

签字人:Manish Goregaokar

在子目录中调用[git submodule](https://git-scm.com/docs/git-submodule) status时,我们错误地没有检测到修改过的子模块,因此报告所有子模块都没有改变。

这是因为子模块助手diff-index使用子模块路径调用,假设路径是相对于当前前缀目录的,但是使用的子模块路径实际上是相对于根目录的。

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

于 2019-12-15T16:01:04.660 回答