【问题标题】:git archive from changed files on bare repos来自裸仓库上已更改文件的 git 存档
【发布时间】:2012-10-02 05:22:24
【问题描述】:

我有一个创建 install-tars 的远程裸存储库(没有工作目录)。效果很好。但现在我只想创建已更改文件的 tars。我是这样尝试的:

git archive --format=tar --prefix='/' HEAD `git diff V1.02 --name-only` | gzip -9 > ~/tars/update-v1.02-`git describe master --tags`.tar.gz

这对我的本地存储库非常有用。它使用从标记版本 V1.02 到最新提交的文件创建一个 tar。但它不适用于裸存储库。还有其他解决方案吗?

【问题讨论】:

    标签: git diff archive


    【解决方案1】:

    git diff 的两个提交形式将在裸存储库 (git diff [options] <commit> <commit> [--] [<path>...]) 中工作。

    以下应该可以满足我的理解:

    git archive --format=tar --prefix='/' master `git diff V1.02 master --name-only` | gzip -9 > ~/tars/update-v1.02-`git describe master --tags`.tar.gz
    

    我还建议将 HEAD 从原始命令更改为 master(如上所示)以与命令的其余部分保持一致,并且如果有人更改 HEAD 指向的分支(或者替换在上面的示例中,所有出现的masterHEAD)。

    【讨论】:

    • 嗨雅各布,感谢您的回复。太糟糕了,我没有收到来自 stackoverflow 的通知。
    • 当我尝试你的命令时,git 给了我以下信息:fatal: ambiguous argument 'V1.02': unknown revision or path not in the working tree. Use '--' to separate paths from revisions 我必须把'--'放在哪里? ` git archive --format=tar --prefix='/' master git diff V1.02 -- master --name-only | gzip -9 > ../tar.tar.gz 致命:错误的修订版 'V1.02'`
    • --,如果使用的话,会使用所有非路径选项。在您的示例中,您根本不会使用它,因为您没有使用git diff 的任何形式的路径限制。
    • Jacob...errr...忘了我说的话。出现错误消息是因为我没有推送标签。你的答案是 100% 正确的,它工作得很好。非常感谢。
    猜你喜欢
    • 2018-05-26
    • 2021-05-27
    • 2013-02-01
    • 2011-10-06
    • 1970-01-01
    • 2019-07-15
    • 2013-11-25
    • 2018-08-26
    • 2013-04-13
    相关资源
    最近更新 更多