导出存储库的子目录时使用export-subst git属性

时间:2010-11-22 18:04:44

标签: git

当我导出我的git存储库的子目录时,我处于一个我想要的位置,以便将存档的提交的完整哈希插入到给定文件中。这样做的原因是我将此代码(存储库的子目录太大而不方便定期导出)发送给我的客户,然后客户构建它(在git环境之外),我们希望能够从日志中分辨出来哪个版本的代码生成它,以帮助调试。

解决方案似乎应该是将文件添加到.gitattributes属性的export-subst,并在%Hgit archive时将iDevice令牌替换为跑。但是,我没有看到这种行为。

我一直在使用Pro Git书中的一个页面作为参考(参见here),但试图使其适用于子目录而不是存储库的根目录。

我要导出的目录名为hash_test。我在该文件夹下创建了一个名为Last commit date: $Format:%cd$的文件,其中包含文字git archive --format=tar HEAD:iDevice/ | gzip > test.tar.gz

当我运行git archive --format=tar HEAD | gzip > test.tar.gz时,文件未被修改。当我运行iDevice/hash_test时,文件修改。

我已经尝试将.gitattributes文件保存在我的git目录的根目录中,以及根目录和子目录中。我已经尝试在.gitattributes文件中将该文件引用为hash_test和{{1}}(因为我认为它可能类似于我在kerneltrap.org上列出的使用--prefix =混淆了归档命令 - URL结束/ mailarchive / git / 2008/4/8/1378004我已正确链接但我没有发布更多链接的声誉......)。然而,这些都没有帮助。

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:4)

git-archive的属性取自正在存档的树。这意味着:

  • 对于git archive ... HEAD:iDevice,属性必须在iDevice中,否则无法看到它们。 (我认为这是支持的;我从未尝试过。)

  • 您必须提交您的gitattributes文件。无论工作树中的任何内容都无关紧要,除非您使用--worktree-attributes选项git-archive

可能会绕过所有这一切的建议:使用git archive ... HEAD iDevice,而不是git archive HEAD:iDevice。该命令支持<tree-ish> <path>个参数;无需直接指定树对象。