裸仓库中更改的文件的git归档

5

我有一个远程裸仓库(没有工作目录)用于创建安装tar包,很好用。但现在我想只创建更改过的文件的tar包。我尝试了以下方式:

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

这个命令在我的本地仓库中工作得很好。它创建了一个tar文件,其中包含从标记版本V1.02到最新提交的文件。但是它在裸库中不起作用。是否有其他解决方案?

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
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指向的分支时具有弹性(或者在上面的示例中替换所有master出现的地方为HEAD)。

嘿,Jacob,感谢您的回复。很遗憾我没有从stackoverflow收到通知。 - Andree Wendel
当我尝试您的命令时,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='/' mastergit diff V1.02 -- master --name-only` | gzip -9 > ../tar.tar.gz致命错误:'V1.02' 无效的修订版本。` - Andree Wendel
“--”如果使用,应该放在所有非路径选项之后。在您的示例中,您不需要使用它,因为您没有使用任何形式的路径限制与“git diff”。 - Jacob Helwig
Jacob... 呃...忘了我说的话。错误信息出现是因为我没有推送标签。你的答案100%正确,完美地解决了问题。非常感谢。 - Andree Wendel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,