繁体   English   中英

带有未暂存更改的 git 存档

[英]git archive with unstaged changes

我正在构建自己的 rpm。 通常我使用 git archive 从我感兴趣的提交或标签中获取 tarball(假设我已经放置了一个标签 1.0):

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

假设现在我正在做一些我还没有提交的本地开发,我想得到一个档案; 有没有什么方法可以在不必提交的情况下获得它?

编辑我可以使用这样的东西:

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

但这将包括我不喜欢的所有二进制文件和其他未跟踪的文件......

git ls-files | tar Tzcf - archive.tgz

我不是 100% 确定这正是您想要的,但是您可以存储您使用git stash create所做的更改,这将为您提供git stash create当前状态的散列 - 然后为其创建一个存档使用git archive <options> $HASH

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

tar 命令:

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 根目录中。

希望我有所帮助。

抱歉,这不是实际答案。

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

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

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

通过使用正常的分支和正常的提交,在以后的任何时间您都可以查看或重新创建您在历史记录中的任何时间构建的任何 RPM。 恕我直言,这是一个巨大的优势。

创建一个名为 archive 的分支,添加并提交我想要跟踪的文件以及 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分支。

对于未暂存的更改:

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

对于分阶段更改:

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

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

以下命令有帮助

 git archive --output=modified-files.zip HEAD $(git ls-files --modified)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM