从仓库创建git归档而无需提交

时间:2019-05-03 22:25:42

标签: git zip tar git-archive

git archive命令-是否有一种方法可以从仓库中创建tarball而无需提交?本质上,我只想创建现有文件的压缩包(更重要的是尊重gitignore)。我以为git archive正在寻找提交-但我只想要代码快照,即使未提交的更改也是如此。

执行此操作的另一种方法是编写一个程序,该程序将压缩所有文件并忽略gitignore中的内容,但这需要编写该程序。

3 个答案:

答案 0 :(得分:2)

git archive需要使用树状符号,这意味着您需要树状,提交或标记。没有什么可以阻止您创建临时分支和包含所需内容的提交并将其归档的。

或者,如果您确定自己不关心被忽略的文件,则可以运行git clean -dffx,然后使用tar --exclude-vcs打包归档文件。您也可以跳过git clean调用,然后尝试tar --exclude-vcs --exclude-vcs-ignores

答案 1 :(得分:2)

简单,容易且显然正确的方法是:只需提交(如bk2204 suggests)。

但是,由于class Parent extends React.Component { focusSelf() { // do stuff to focus self } render() { return ( <div> <Child beforeUnmount={ this.focusSelf }/> </div> ) } } class Child extends React.Component { componentWillUnmount() { const { beforeUnmount } = this.props; beforeUnmount(); } } 花费了git archive,因此您可以进行此操作而无需提交。只需使提交的树成为 part ,它是实际提交的一半(或更多),然后使用:

<tree-ish>

这里的问题是git archive [additional options] $(git write-tree) 将立即写入 index 中的内容。这意味着即使您不打算提交,也需要将所有更新的文件添加到索引中。如果您想获得更多效果,可以使用临时索引来实现,但是先git write-tree会更容易:

add -u

将工作树文件提交到提交而不自己进行提交的另一种方法是使用git add -u git archive [additional options] $(git write-tree) 来完成工作。这会将当前的工作树写入新的提交。因此:

git stash

或多或少会做这项工作。 less 发生在没有什么可隐藏的情况下,在这种情况下git stash push git archive [additional options] refs/stash git stash pop --index 不执行任何操作,因此您不应该运行git stash push。在这种情况下,您可以存档git stash pop,但是检测HEAD是否做了什么很烦人。您可以添加更多脚本层来解决此问题,但实际上,立即提交怎么了?

答案 2 :(得分:1)

除了进行提交之外,还考虑git bundle:就像git archive ...一样,但是具有历史记录。

您将获得一个文件(捆绑文件),可以复制该文件,然后从中克隆
有关更多信息,请参见“ Fully backup a git repo?”。