将所有Git分支导出为每个分支的单独zip文件

时间:2014-06-23 16:29:35

标签: git export

我正在寻找一种导出Git存储库的方法,以便我为每个分支单独获取一个zip或目录。

这类似于Do a "git export" (like "svn export")?,但我没有当前分支的拉链,而是希望获得每个分支的拉链。

是否有可以执行此操作的Git或Bash命令?

2 个答案:

答案 0 :(得分:2)

git archive与分支参数

一起使用

git archive可以接受分支名称作为参数导出,因此您只需要编写一个循环遍历分支名称的脚本并将它们传递给git archive。例如,这将适用于Windows Git Bash:

git for-each-ref --format='%(refname:short)' refs/heads | \
while read branch; do
  git archive --format zip --output <outputDirectory>/${branch}.zip $branch
done

我从official Linux Kernel documentation for git for-each-ref中的2 nd 示例进行了修改。

击穿

$ git for-each-ref --format='%(refname:short)' refs/heads
foo
master

git for-each-ref将仅使用refs/heads格式的分支名称列出refname:short下的每个本地分支。

该输出通过管道输入Bash while循环,然后将分支名称替换为git archive参数:

while read branch; do
  git archive --format zip --output <outputDirectory>/${branch}.zip $branch
done

For-loop解决方案

这是一个受toydarian's (non-working) solution启发的Bash for循环解决方案:

for branch in $(git for-each-ref --format='%(refname:short)' refs/heads); do
  git archive --format zip --output <outputDirectory>/${branch}.zip $branch
done

文档

答案 1 :(得分:0)

试试这个脚本。确保在使用脚本之前签出master

for f in ${$(git branch)[@]:1}; do
    git archive --format zip --output /path/to/dir/${f}.zip $f
done

以下是一行中的相同命令,以便于复制,粘贴和执行:

for f in ${$(git branch)[@]:1}; do; git archive --format zip --output /path/to/dir/${f}.zip $f; done