Git 将文件夹视为文件并忽略所有子文件夹和 -files
Git treats folder as file and ignores all subfolders and -files
我在使用 Git 时遇到了一个奇怪的问题。我使用 Composer 将 TCPDF 包含在我的应用程序中,但我无法将它添加到我的存储库中。
我是这样做的step-by-step:
现状。这些只是插件;它缺少我需要的 'tcpdf' 文件夹。
现在我 运行 Composer 让它安装附加目录。
在这张照片中,已经很明显出了问题。 Composer 下载了所有文件和文件夹,TCPDF 在我的机器上运行,但只有 tcpdf 文件夹显示为红色。子文件夹不是!我转到命令行并执行 'git add .',以便它添加所有文件和文件夹。现在看起来像这样:
还是错了。
错误的状态反映在git status
:
我真的被困在这里了。我不知道如何告诉 Git 这不是文件而是文件夹。我的 repo 是完美的,但是如果我的同事更新他只得到这个文件,没有文件夹内容。
我该如何解决这个问题?
不知道出了什么问题,但我将 tcpdf
的全部内容复制到一个名为 test
的新文件夹中,成功提交了该文件夹及其内容,删除了 tcpdf
- 'file',已提交,然后将 test
文件夹重命名为 tcpdf
并再次提交。
奇怪,但现在一切都很好。
由于您已经完成了先复制内容然后移动的解决方法,因此没有简单的方法来测试它,但我怀疑您的 tcpdf/
目录包含它自己的 .git/
.
Githandles nested directories by creating a special "gitlink" file in the parent repository。当您将内容从 tcpdf/
目录复制到 test
目录时,您很容易错过隐藏的 .git/
目录,这意味着该目录不再是嵌套的存储库。
对于 Composer,如果您使用 composer require --prefer-source
或类似的,则可能会发生这种情况。如果您使用的是不稳定版本,这是默认设置。
虽然一些开发人员喜欢跟踪 Composer 创建的 vendor/
目录,但它是 not recommended:
Should I commit the dependencies in my vendor directory?
The general recommendation is no. The vendor directory (or wherever your dependencies are installed) should be added to .gitignore
/svn:ignore
/etc.
The best practice is to then have all the developers use Composer to install the dependencies. Similarly, the build server, CI, deployment tools etc should be adapted to run Composer as part of their project bootstrapping.
该页面继续解释为什么存在此建议。我建议阅读整个页面。如果您遵循此最佳实践,那么使用 --prefer-dist
或 --prefer-source
.
都没有关系
一般来说,both the composer.json
and composer.lock
files should be tracked.
您在 tcpdf
目录中的内容是 git 的 submodule
。要检查它是否属实,您可以在删除 tcpdf
-'file' 和 运行 git submodule status
之前检出并返回提交,工作树的根文件夹也应包含 .gitmodules
.也许在你的仓库中有一个子模块是有充分理由的。
像往常一样迟到了,但我在这里偶然发现了其他人。
当我不小心将 .git
文件夹留在我的 git 存储库的子文件夹中时,我遇到了这个问题 (1)。
我通过清除本地 git 的缓存解决了这个问题:
git rm -rf --cached .
(注意最后的句号!)。
有关标志的信息,请参阅 git rm -?
。
(1) git 认为文件夹是单个文件
我在使用 Git 时遇到了一个奇怪的问题。我使用 Composer 将 TCPDF 包含在我的应用程序中,但我无法将它添加到我的存储库中。
我是这样做的step-by-step:
现状。这些只是插件;它缺少我需要的 'tcpdf' 文件夹。
现在我 运行 Composer 让它安装附加目录。
在这张照片中,已经很明显出了问题。 Composer 下载了所有文件和文件夹,TCPDF 在我的机器上运行,但只有 tcpdf 文件夹显示为红色。子文件夹不是!我转到命令行并执行 'git add .',以便它添加所有文件和文件夹。现在看起来像这样:
还是错了。
错误的状态反映在git status
:
我真的被困在这里了。我不知道如何告诉 Git 这不是文件而是文件夹。我的 repo 是完美的,但是如果我的同事更新他只得到这个文件,没有文件夹内容。
我该如何解决这个问题?
不知道出了什么问题,但我将 tcpdf
的全部内容复制到一个名为 test
的新文件夹中,成功提交了该文件夹及其内容,删除了 tcpdf
- 'file',已提交,然后将 test
文件夹重命名为 tcpdf
并再次提交。
奇怪,但现在一切都很好。
由于您已经完成了先复制内容然后移动的解决方法,因此没有简单的方法来测试它,但我怀疑您的 tcpdf/
目录包含它自己的 .git/
.
Githandles nested directories by creating a special "gitlink" file in the parent repository。当您将内容从 tcpdf/
目录复制到 test
目录时,您很容易错过隐藏的 .git/
目录,这意味着该目录不再是嵌套的存储库。
对于 Composer,如果您使用 composer require --prefer-source
或类似的,则可能会发生这种情况。如果您使用的是不稳定版本,这是默认设置。
虽然一些开发人员喜欢跟踪 Composer 创建的 vendor/
目录,但它是 not recommended:
Should I commit the dependencies in my vendor directory?
The general recommendation is no. The vendor directory (or wherever your dependencies are installed) should be added to
.gitignore
/svn:ignore
/etc.The best practice is to then have all the developers use Composer to install the dependencies. Similarly, the build server, CI, deployment tools etc should be adapted to run Composer as part of their project bootstrapping.
该页面继续解释为什么存在此建议。我建议阅读整个页面。如果您遵循此最佳实践,那么使用 --prefer-dist
或 --prefer-source
.
一般来说,both the composer.json
and composer.lock
files should be tracked.
您在 tcpdf
目录中的内容是 git 的 submodule
。要检查它是否属实,您可以在删除 tcpdf
-'file' 和 运行 git submodule status
之前检出并返回提交,工作树的根文件夹也应包含 .gitmodules
.也许在你的仓库中有一个子模块是有充分理由的。
像往常一样迟到了,但我在这里偶然发现了其他人。
当我不小心将 .git
文件夹留在我的 git 存储库的子文件夹中时,我遇到了这个问题 (1)。
我通过清除本地 git 的缓存解决了这个问题:
git rm -rf --cached .
(注意最后的句号!)。
有关标志的信息,请参阅 git rm -?
。
(1) git 认为文件夹是单个文件