2009-12-11 233 views
2

有没有办法告诉git忽略存储在其原始文件中的文件?由于相关文件位于上游存储库中,因此只需将它们添加到.gitignore或.git/info/exclude中即可。git:忽略源文件中的文件

背景

我的上游资源库中有一些生成的文件。每次我执行本地重建时,这些生成的文件都会更改,并且与提交的版本不同。生成的文件在存储库中,因为许多用户没有生成它们的软件(并且我没有权力改变它)。这些生成的文件永远不会手工生成,我从不想将它们提交到我的git存储库。我有一个单独的机制将它们推送到主存储库(并且我无法控制这个单独的机制)。

我正在使用专用git存储库对上游Subversion存储库进行编辑。要做到这一点,我有一个git仓库,只是为了从Subversion提交提交。该git库定期通过cronjob同步。然后我有私有的git仓库,它是上游git仓库的克隆。我想让git不会对生成的文件造成影响。我对这两个结果感到满意:文件不再被我的本地git存储库跟踪(但它们应该被跟svn同步的那个跟踪),否则git会默默更新我生成的文件,但它永远不会提交我的更改和文件将永远不会显示在“git status”的“更改但未更新:”部分中。

回答

2

git update-index --assume-unchanged可能是您的解决方案。检查man page了解更多信息。


  • --assume-unchanged

  • --no-assume-unchanged

当指定这些标志,记录的路径对象名称不被更新。相反,这些选项设置和取消路径的“假定不变”位。当“假设不变”位打开时,git停止检查工作树文件以进行可能的修改,因此当您更改工作树文件时,需要手动取消设置该位以告诉git。在一个非常缓慢的lstat(2)系统调用的文件系统(例如cifs)中处理大型项目时,这有时会很有帮助。

该选项也可以用作粗略的文件级机制来忽略跟踪文件中未提交的更改(类似于.gitignore对未跟踪文件所做的操作)。你应该记住,一个明确的git add操作仍然会导致文件从工作树上被刷新。如果需要在索引中修改这个文件,Git将失败(优雅地)合并时提交;因此,如果假设未跟踪的文件在上游发生更改,则需要手动处理该情况。

+0

你真的可以在特定路径上使用它吗? – 2011-08-15 13:50:40

+0

我已经在我的项目上试过了,无法删除远程文件: git update-index --no-assume-unchanged MyProject.xcodeproj/project.xcworkspace/xcuserdata / – 2011-08-15 13:51:38