2014-02-07 52 views
1

我有一些大型视频文件,我不想将它们推送到远程,但是我想将它们添加到我的本地存储库。有点像远程版本的.gitignore文件。我可以添加文件到我的本地Git仓库,但不会将它推送到远程

这可能吗?

更具体地说,我正在开发一个多媒体项目,一个文件夹包含项目元数据文件(这是一个Screenflow项目)以及媒体。所以它有一个project.screenflow文件夹都.dat文件和Media\XXXX.aifMedia\XXXX.mov

我想分享至少在项目文件(.dat)与我的团队和它没有任何意义,如果在Screenflow打开项目了你没有它使用的媒体。但是,我们的Git repo存在100MB的文件大小限制,从而阻止我推送这些文件。

目前,我已经排除在.gitignoreMedia,并可能通过其他手段:(共享媒体

+0

'git add',但从来没有'git commit'呢?或者你想修改它吗?如果是这样,建立一个新的分支,当你合并你的分支时,你可能需要“樱桃选择”。 – 2rs2ts

+0

@ 2rs2ts,如果你从未'git commit',仓库的意义何在? – Shahbaz

+0

在git中存储大的二进制对象不是最好的主意。你确定你要跟踪视频文件的修订吗? – Greg

回答

1

.gitignore不会阻止您在存储库中拥有文件(您始终可以强制它)。所以这不是真的像在远程的.gitignore

您的问题的直接答案是,这是不可能的。 Git保存你的提交历史。每个提交都由其内容进行(并散列)。如果你在一个提交中有一个文件,并且你推送了这个提交,那么你不能要求git只推送那个提交的一部分,因为那样它就不会再是同一个提交了。

但是,有些方法可以实现你想要的东西,其中没有一个是非常干净的。一个例子是使用git子模块创建一个子模块,该子模块指向另一个本地回购(具有视频文件)。任何克隆远程回购的人都不会收到视频文件,但他们仍然可以看到指向您计算机某处的子模块。

另一种方法是使用git subtree从你拥有的实际创建另一组提交,不包括视频,然后将那些人工提交的提交推送到您的存储库。但是它强加了一些目录结构。

这种问题的常见答案通常是重新考虑您的存储库。这些视频对您的存储库至关重要吗?如果没有,那么不要将它们放在存储库中,既不是本地的,也不是远程的。像这样的额外资源不属于git存储库(特别是因为它们也没有版本)。

如果你只希望他们在你的本地计算机上,通过一切手段只是让他们在其他目录。如果你真的想要访问旧版本,请将其他目录保留在git下。如果您希望其他人也能看到这些文件,请将它们放在文件共享网站上。

0

不使用常规的git的方法。有文件中的回购将改变所有提交的哈希它后面。然后在服务器端不匹配。我会考虑解决为什么你需要他们生活在相同的回购,你必须推动。

你可以让他们在一个单独的回购当时如果你正在处理的话,通过本地的git钩子拉进来?如果你在你的问题中详细说明你的情况,我们可以帮忙。

相关问题