我可以将文件添加到我的本地Git仓库,但不能将其推送到远程

时间:2014-02-07 13:38:26

标签: git

我有很多大型视频文件,我不想将其推送到我的遥控器,但是我想将它们添加到我的本地存储库中。有点像.gitignore文件的远程版本。

这可能吗?

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

我想与我的团队共享至少项目文件(.dat),如果你没有它使用的媒体,在Screenflow中打开项目是没有意义的。但是,我们的Git仓库有一个100MB的文件大小限制,阻止我推送它们。

目前,我已在Media中排除了.gitignore,可能需要通过其他方式分享媒体:(

2 个答案:

答案 0 :(得分:1)

.gitignore不会阻止您在存储库中拥有文件(您可以随时强制它)。所以这不像遥控器中的.gitignore

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

但是,有很多方法可以达到你想要的效果,而且都不是很干净。一个例子是使用git子模块,您可以在其中创建一个子模块,该子模块指向您拥有的另一个本地仓库(带有视频文件)。克隆远程仓库的任何人都不会收到视频文件,但他们仍然会看到指向计算机某处的子模块。

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

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

如果您只想在本地计算机中使用它们,请务必将它们保存在其他目录中。如果你真的想要访问旧版本,请将其他目录保存在git下。如果您希望其他人也看到这些文件,请将它们放在文件共享网站上。

答案 1 :(得分:0)

不使用传统的git方法。将文件放在repo中会改变它后面的每个提交哈希。这将在服务器端不匹配。我会考虑解决为什么你需要他们住在你必须推动的同一个回购中。

你可以将它们放在一个单独的仓库中,然后通过本地git钩子进入,如果要进行处理的话?如果你在问题中详述你的情况我们可能会有所帮助。