GitHub 文件夹上有一个白色箭头

Ank*_*zle 62 git github

我最近推送到 github,并在我的一个文件夹上看到一个白色箭头。

在此处输入图片说明

当我单击文件夹时,它不会打开它。在我的本地机器上,它有内容,但在 github 中我无法访问它们。这是什么意思?

Von*_*onC 50

症状

检查本地您是否.git/在该文件夹下有一个子文件夹。

原因

这意味着该文件夹(本地)是一个嵌套的 Git 存储库,其树 SHA1 被记录为“gitlink”(带有白色直箭头的灰色文件夹)

然后你会在 GitHub 上看到gitlink : 对象的 SHA-1 引用另一个存储库中的提交,由空文件夹名称表示。它是一个嵌套的 Git 存储库。

如果您看到 a folder @ xxx,那么它是一个子模块条目,这意味着您自己的存储库中有一个.gitmodules,除了 gitlink 之外,它还记录了远程存储库的实际 URL。
它表示超级项目期望嵌套子模块的工作目录所在的提交的对象名称。

在这两种情况下(带有文件夹名称的白色箭头,或带有folder @ xxx文件夹名称版本的白色箭头),它是一个 Gitlink 表示嵌套的 Git 存储库:另一个 Git 存储库的占位符,因此是一个空文件夹。但在第二种情况下,该空文件夹将在特殊.gitmodules文件中被引用/可见。


解决方案(去除白色箭头)

为了恢复该文件夹内容:

子模块:

Agit clone --recurse-submodules将在您的本地存储库中恢复该子模块的内容(而不是嵌套的 Git 存储库,其中记录其 URL ,并且文件夹的内容将保持为空)

白色箭头将保留在远程存储库上,并folder @ version显示您的项目引用了子模块存储库的 SHA1。

嵌套的 Git 存储库:

或者,如果您不关心该文件夹的历史记录,您可以在本地删除其.git子文件夹(假设它不是子模块,这意味着它没有.gitmodules在主存储库中的文件中引用)、添加、提交和推送。
然后白色箭头将消失,您将能够在 GitHub 上访问该文件夹内容。

  • 这是因为您需要首先执行 `git rm --cached client_folder` (没有尾部斜杠:不是 `client_folder/` 而是 `client_folder`)。然后,只有这样你才能添加、提交和推送。 (30认同)
  • 是的...没有“.gitmodules”,只有“.git”隐藏文件夹。我删除了客户端文件夹内的“.git”并执行了“git add ./client_folder”,但右箭头仍然在那里。 (2认同)

小智 24

箭头可能意味着它是一个子模块。

你可以试试:

git add yourfolder
Run Code Online (Sandbox Code Playgroud)

如果这导致如下错误:

xxx submodule xxx
Run Code Online (Sandbox Code Playgroud)

出现,你可以试试这个:

git rm --cached yourfolder
Run Code Online (Sandbox Code Playgroud)

然后,您可以成功运行:

git add yourfolder
Run Code Online (Sandbox Code Playgroud)


小智 11

在您的计算机上,如果您使用箭头导航到目录并尝试查看隐藏文件,您会看到一个.git文件夹,表明它是存储库。这意味着它是包含在您推送到 GitHub 的外部存储库中的存储库。

摆脱箭头并开始正确查看文件的最简单方法(在我看来)是删除文件.git夹。这样,它就不再成为 git 存储库,而是再次成为常规文件夹。

现在,当您推送到 GitHub 时,您可以正常访问该文件夹并查看其所有内容。

  • 解决了,现在明白了。删除该文件夹中的 git 文件,git rm --cachedfolder_name,git addfolder_name。谢谢 (2认同)

小智 6

这可能是因为有一个隐藏的 .git 文件夹导致出现白色箭头,您可以删除 .git 文件夹并再次推送整个需要的文件夹以摆脱白色箭头标记。


Con*_*ule 6

就我而言:

git rm --cached portal

ls 

git status

git add --all

...
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Tah*_*Ali 5

如果你想从 git 配置文件中删除一个子模块,按照这个,记住如果你不想删除那个子模块的本地目录,不要做第 X 步:

从 .gitmodules 文件中删除相关部分。

暂存 .gitmodules 更改 git add .gitmodules

从 .git/config 中删除相关部分。

运行 git rm --cached path_to_submodule (没有尾部斜杠)。

运行 rm -rf .git/modules/path_to_submodule (没有尾部斜杠)。

提交 git commit -m "删除子模块"

(有风险)步骤 X :- 删除现在未跟踪的子模块文件 rm -rf path_to_submodule


小智 5

它有效,我按照以下步骤操作

  1. 通过 git rm --cached 文件夹名称 删除它
  2. git add 文件夹名称

这就对了。