我和Git有一个奇怪的问题。我使用Composer在我的应用程序中包含TCPDF,但是我无法将它添加到我的存储库中。
这是我一步一步做的事情:
现状。这些只是插件;它没有“tcpdf'我需要的文件夹。
现在我运行Composer让它安装附加目录。
在这张照片中,已经很明显出现了问题。 Composer下载了所有文件和文件夹,TCPDF在我的机器上运行,但只有tcpdf文件夹显示为红色。子文件夹不是!我转到命令行并执行git add。',以便添加所有文件和文件夹。现在它看起来像这样:
还是错的。
错误的状态由<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>
反映出来:
我真的被困在这里了。我不知道如何告诉Git这不是一个文件而是一个文件夹。我的回购是完美的,但如果我的同事更新他只获得这个文件,没有文件夹内容。
我该如何解决这个问题?
答案 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
。也许有一个健康的理由在你的回购中有一个子模块。