Git将文件夹视为文件,并忽略所有子文件夹和文件

时间:2016-11-15 09:47:32

标签: git composer-php tcpdf

我和Git有一个奇怪的问题。我使用Composer在我的应用程序中包含TCPDF,但是我无法将它添加到我的存储库中。

这是我一步一步做的事情:

enter image description here

现状。这些只是插件;它没有“tcpdf'我需要的文件夹。

现在我运行Composer让它安装附加目录。

enter image description here

在这张照片中,已经很明显出现了问题。 Composer下载了所有文件和文件夹,TCPDF在我的机器上运行,但只有tcpdf文件夹显示为红色。子文件夹不是!我转到命令行并执行git add。',以便添加所有文件和文件夹。现在它看起来像这样:

enter image description here

还是错的。

错误的状态由<div class="field"> <p:outputLabel for="company" value="Company" /> <p:selectBooleanCheckbox id="company" value="#{participantDetailBean.participant.isCompany}"> <p:ajax event="change" update="companyFields"/> </p:selectBooleanCheckbox> </div> <p:outputPanel id="companyFields"> <div class="field"> <p:outputLabel for="companyname" value="Company name" rendered="#{participantDetailBean.participant.isCompany}" /> <p:inputText id="companyname" value="#{participantDetailBean.participant.companyName}" rendered="#{participantDetailBean.participant.isCompany}" /> </div> <div class="field"> <p:outputLabel for="companyform" value="Company form" rendered="#{participantDetailBean.participant.isCompany}" /> <p:inputText id="companyform" value="#{participantDetailBean.participant.companyForm}" rendered="#{participantDetailBean.participant.isCompany}" /> </div> <div class="field"> <p:outputLabel for="companynumber" value="Company number" rendered="#{participantDetailBean.participant.isCompany}" /> <p:inputMask id="companynumber" value="#{participantDetailBean.participant.companyNumber}" mask="aa 9999.999.999" rendered="#{participantDetailBean.participant.isCompany}" /> </div> </p:outputPanel> 反映出来:

enter image description here

我真的被困在这里了。我不知道如何告诉Git这不是一个文件而是一个文件夹。我的回购是完美的,但如果我的同事更新他只获得这个文件,没有文件夹内容。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

像往常一样晚参加聚会,但是我在这里偶然发现,所以其他人也可能会参加。

当我不小心将.git文件夹放在git repo的子文件夹中时,我遇到了这个问题(1)。

我通过清除本地git的缓存来解决它: git rm -rf --cached .(结束时注意句号!)。

有关标志的信息,请参见git rm -?

(1)git认为文件夹是单个文件

答案 1 :(得分:2)

由于您已经完成了copy-contents-then-move解决方法,因此没有简单的方法来测试它,但我怀疑您的tcpdf/目录包含自己的.git/

Git handles nested directories by creating a special "gitlink" file in the parent repository。将内容从tcpdf/目录复制到test目录时,很容易错过隐藏的.git/目录,这意味着该目录不再是嵌套存储库。

使用Composer,如果您使用composer require --prefer-source或类似内容,可能会发生这种情况。如果您使用的是不稳定版本,则这是默认设置。

虽然有些开发人员喜欢跟踪Composer创建的vendor/目录not recommended

  

我应该在供应商目录中提交依赖项吗?

     

一般建议是。应将供应商目录(或安装依赖项的任何位置)添加到.gitignore / svn:ignore / etc。

     

最佳做法是让所有开发人员使用Composer来安装依赖项。同样,构建服务器,CI,部署工具等应该适合于作为项目引导的一部分运行Composer。

该页继续解释为何存在此建议。我建议阅读整个页面。如果您遵循此最佳做法,则使用--prefer-dist--prefer-source无效。

一般来说,both the composer.json and composer.lock files should be tracked

答案 2 :(得分:0)

不知道出了什么问题,但我将tcpdf的全部内容复制到一个名为test的新文件夹,成功提交了该文件夹及其内容,删除了tcpdf - '文件',已提交,然后将test - 文件夹重命名为tcpdf并再次提交。

奇怪但现在一切都很好。

答案 3 :(得分:0)

你在tcpdf目录中的内容是git的submodule。要检查是否为真,您可以在删除tcpdf - 'file'并运行git submodule status之前结帐返回提交,同时工作树的根文件夹也应包含.gitmodules。也许有一个健康的理由在你的回购中有一个子模块。