7

I'm building my own rpm's. Usually I use git archive to get a tarball from the commit or tag I'm interested in (suppose I have put a tag 1.0):

git archive --format=tgz --prefix=product-1.0 1.0 > product-1.0.tgz

suppose now I am doing some local developments that I haven't committed yet and I want to get an archive; is there any way to obtain this without having to commit?

edit I could just use something like this:

tar cf product-1.0.tgz --exclude=.git

but that will include all binaries and other untracked files which I prefer not...

4

7 回答 7

9
git ls-files | tar Tzcf - archive.tgz
于 2014-04-16T17:50:15.527 回答
8

我不是 100% 确定这正是您想要的,但是您可以隐藏您所做的更改git stash create,这将为您提供当前回购状态的哈希值 - 然后使用git archive <options> $HASH.

于 2014-04-16T17:09:53.703 回答
3

当您有未暂存的更改时,您可以尝试git difftarzip命令。

焦油命令:

git diff --name-only -a | tar Tzcf - myUnstagedChanges.tgz

压缩命令:

git diff --name-only -a | xargs zip myUnstagedChanges.zip

此外,如果您需要对提交执行此操作,请尝试git show [idCommit]命令。

git show --pretty="" 9471ae --name-only -a | tar Tzcf - myCommitedChanges.tgz

或者

git show --pretty="" 9471ae --name-only -a | xargs zip myCommitedChanges.zip

压缩存档将被创建到 git 根目录中。

希望我有所帮助。

于 2019-04-18T17:00:54.963 回答
1

抱歉,这不是实际答案。

可能有某种方式,但实际上我没有看到太多的意义。承诺相当轻松。提交完全临时或损坏的文件并没有错。在您将其公开之前,它都是您的本地存储。只需创建一个新分支,提交它,然后在某个时间点您可以删除该分支,甚至立即删除。您唯一必须小心的是不要将该分支推送到公共回购。它最大的优点是,在提交期间,您将能够有选择地选择要包含的文件。它将允许您过滤掉任何不需要的二进制文件、档案等 - 并且非常详细。它真的比尝试过滤它们更有用bash

所以,对我来说,如果你正在构建包,那么你真的想要提交。只是因为在将来的某个时间点,您需要检查原始文件是什么。或者恢复它。这正是分支和整个存储库的含义:标记和记住某些状态下的某些文件。存储库不仅仅用于保存“发布代码”。这是为了让您在任何时候需要的所有相关内容都保持与当时相同的状态。

因此,我什至建议对这些构建/打包进行真正的分支。不藏。藏匿是暂时的,意在迅速蒸发。你会得到一个哈希值,但你可以很容易地删除整个分支/存储/修订。那将完全抹杀版本控制的本质。您将其放入 git 中,只是为了删除它。

通过使用普通分支和普通提交,您将能够在未来的任何时间查看或重新创建您在历史上的任何时间构建的任何 RPM。恕我直言,这是一个巨大的优势。

于 2014-04-16T17:11:57.580 回答
1

创建一个名为存档的分支,添加并提交我想要跟踪的文件以及 git 中已经跟踪的文件。无论是您当前未跟踪的开发文件、生成的文档、您不在 Git 中跟踪但想要存档的二进制文件等。

有了本地提交的内容,您现在可以使用

git archive archive --format=tgz --prefix=product-1.0 1.0 > product-1.0.tgz

注意,第一个存档是命令,第二个是分支名称。

现在恢复最后一次提交,以便这些文件再次未被跟踪

git reset --soft HEAD~; git reset

切换回master并删除archive分支。

于 2017-04-04T18:42:02.440 回答
0

对于未分阶段的更改:

tar czvf product-1.0.tar.gz `git diff --name-only`

对于阶段性更改:

tar czvf product-1.0.tar.gz `git diff --cached --name-only`

但这些仅在同一文件中没有暂存部分和未暂存部分时才有效。

于 2021-05-25T12:54:29.757 回答
-1

以下命令有帮助

 git archive --output=modified-files.zip HEAD $(git ls-files --modified)
于 2017-04-05T08:09:45.400 回答