【问题标题】:How to have git treat tar archives transparently as directories?如何让 git 将 tar 档案透明地视为目录?
【发布时间】:2016-08-28 07:18:58
【问题描述】:

我希望 文件进行版本化,这样对于与存储库相关的功能,例如(甚至是复杂的 冲突解决方案),该文件似乎是一个包含其包含文件的目录定期提交给 git,除了在结帐时应该再次获得有效的tar 存档。这是否可以实现?

我最初考虑使用smudge/clean filters,但它们仅允许您修改存储的 git blob 的文件内容。

所以,现在我正在考虑使用 hookspre-commitpost-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 文件,您可以使用: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


【解决方案1】:

我会建议其中一个 cmets 中提到的内容,即使用 textconv

您可以简单地调用git diff--textconv 选项,而不是手动使用cat

对于合并,您可以使用 renormalize 选项,或使用 merge.renormalize 将其配置为默认值。

我从未实际测试过这个,但我相信它会起作用。

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多