带有未分级更改的git存档

时间:2014-04-16 17:03:17

标签: git git-archive

我正在构建自己的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

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

7 个答案:

答案 0 :(得分:7)

git ls-files | tar Tzcf - archive.tgz

答案 1 :(得分:4)

我不是100%确定这正是你想要的,但是你可以隐藏你用git stash create所做的更改,这将为你提供当前状态的哈希 - 然后使用git archive <options> $HASH为其创建存档。

答案 2 :(得分:2)

抱歉,这不是真正的答案。

可能有某种方式,但实际上我并没有注意到它。承诺相当轻松。提交完全临时或损坏的文件存在严重错误。在您将其推向公众之前,它是您所有的本地存储空间。只需创建一个新分支,提交它,然后在某个时间点你可以删除该分支,甚至是立即删除。你唯一要注意的是不要把那个分支推到公共回购。其中最大的优点是,在提交期间,您将能够有选择地选择您要包含的文件。它将允许您过滤掉任何不需要的二进制文件,档案等 - 以及非常精细的细节。它比尝试按bash和类似方式过滤它们更有用。

所以,对我来说,如果你正在构建软件包,那么你真的希望提交。仅仅因为在将来的某个时间点,需要来检查原始文件是什么。或者恢复它。这正是分支机构和整个存储库的含义:在某些状态下标记和记住某些文件。存储库不仅仅是为了保持&#34;发布代码&#34;。它是为了保持您在任何时间点所需的一切相关,处于与当时相同的状态。

因此,我甚至建议为这些构建/包装推荐真正的分支。没有藏匿。藏匿是暂时的,意味着迅速蒸发。你得到一个哈希,但你可以很容易地删除整个分支/存储/修订。这将完全消灭版本控​​制的本质。你会把它放到git中,只是为了删除它。

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

答案 3 :(得分:1)

创建一个名为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分支。

答案 4 :(得分:0)

取消暂存的更改后,可以尝试RouteMap::cities(){}git difftar命令。

tar命令:

zip

zip命令:

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

希望我有所帮助。

答案 5 :(得分:0)

对于未暂存的更改:

import pandas as pd

numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])

df['equal_or_lower_than_4?'] = df['set_of_numbers'].apply(lambda x: 'True' if x <= 4 else 'False')

print (df)

对于分阶段更改:

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

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

答案 6 :(得分:-1)

以下带帮助的命令

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