如何从Git存储库中提取任何提交到文件夹/存档的所有文件?

时间:2016-11-25 19:16:36

标签: git file backup directory archive

我有一个Git存储库。我想根据不同的提交将我的存储库历史记录中的所有文件和文件夹导出到一个文件夹中。但我想分别导出所有提交和分支。我的git存储库的一种备份/存档。

例如,如果我的存储库历史记录为:

-v2.0我的最新提交-v1.0我的初始提交

我想将这些不同提交的所有文件和文件夹导出到单独的文件夹中。我希望文件作为普通的完整文件而不是差异补丁。

例如文件夹" /MyGitBackup/Master/v1.0"和" /MyGitBackup/Master/v2.0"其中应包括相应提交的文件。

我怎样才能做到这一点? GUI工具是否具有此功能或类似功能?我使用的是Windows机器。

2 个答案:

答案 0 :(得分:2)

您可以使用git worktree <path> <commit>来检查不同目录的不同提交。 因此,请在工作目录中执行以下命令:

git worktree add /MyGitBackup/Master/v1.0 <v1.0 commit hash or tag>
git worktree add /MyGitBackup/Master/v2.0 <v2.0 commit hash or tag>

答案 1 :(得分:1)

这听起来像浪费空间。但确定它是可能的:

  • 对于每个修订版,根据git rev-list命令
  • 使用适当的标志
  • 运行git archive revision

这是将master中每个修订内容导出到archive/子目录中的单独文件夹的一种方法:

git rev-list master | while read rev; do
    echo creating archive for $rev
    mkdir -p archive/$rev
    git archive $rev | (cd archive/$rev; tar x)
done