【发布时间】:2016-08-28 07:18:58
【问题描述】:
我希望git 对tar 文件进行版本化,这样对于与存储库相关的功能,例如git-diff(甚至是复杂的git-merge 冲突解决方案),该文件似乎是一个包含其包含文件的目录定期提交给 git,除了在结帐时应该再次获得有效的tar 存档。这是否可以实现?
我最初考虑使用smudge/clean filters,但它们仅允许您修改存储的 git blob 的文件内容。
所以,现在我正在考虑使用 hooks(pre-commit 和 post-checkout,建议 here,尽管我希望也有一个 pre-add 过滤器......)在tar 文件和目录结构之间进行转换,或者为了正确维护元数据,直接使用git objects 进行管道连接(或者,作为一种折衷方案,使用中间目录但override the metadata)。但是,在我开始这项可能很疯狂的工作之前,有没有
- 实现这一目标的更好方法,或者
- 已经存在的解决方案?
这与Can git treat zip files as directories and files inside the zip as blobs? 密切相关,尽管我希望由于tar 文件只是文件和元数据的连接而没有压缩,处理它们可能会更容易。
【问题讨论】:
-
要区分两个 tar 文件,您可以使用:superuser.com/a/706286/4803 - 基本上为
*.tar启用textconv并将每个 tar 文件的输出作为文本进行分类,以便区分它们。但我认为这对合并没有帮助。 -
@JohnZwinck 谢谢,这对
diffing 很有帮助,但我同意你的观点,这可能对合并(或其他 git 瓷器)没有帮助 -
是否有任何理由必须跟踪焦油?你为什么不跟踪目录,你可以使用 checkout 来生成 tar(应该被忽略和不跟踪)。这并不能回答您的问题,但它可能会解决您的问题。
-
@JosephK.Strauss 在我的实际情况中,我从二进制格式开始,我已经可以在干净/涂抹循环中转换为/从 tar 转换。我不确定它的元数据(在 Windows 上提取到目录结构时会变得不完整)是否重要,但除此之外,我希望我的同事能够直接在二进制格式上使用 git,而不必知道转换。 而且我很好奇这是否可能......
标签: git tar git-diff git-merge tar git archive tar