我正在寻找一种导出Git存储库的方法,以便我为每个分支单独获取一个zip或目录。
这类似于Do a "git export" (like "svn export")?,但我没有当前分支的拉链,而是希望获得每个分支的拉链。
是否有可以执行此操作的Git或Bash命令?
答案 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
这是一个受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