我正在寻找一种方法,可以导出一个Git仓库,以便我可以单独得到每个分支的zip或目录。
这类似于执行“git export”(如“svn export”)?,但与当前分支的zip不同,我希望得到每个分支的zip。
是否有Git或Bash命令可以实现这一点?
这类似于执行“git export”(如“svn export”)?,但与当前分支的zip不同,我希望得到每个分支的zip。
是否有Git或Bash命令可以实现这一点?
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
我将它从git for-each-ref官方Linux内核文档的第二个示例进行了修改。
$ 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
以下是Bash的for
循环解决方案,受到toydarian(不起作用)解决方案的启发:
for branch in $(git for-each-ref --format='%(refname:short)' refs/heads); do
git archive --format zip --output <outputDirectory>/${branch}.zip $branch
done
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
sh.exe": syntax error near unexpected token ``;'
"。这是一行命令的错误。"sh.exe": ${$(git branch)[@]:1}: bad substitution
"。这是第一个命令的错误。 - user456814git branch
不适合列出分支,除非您去掉显示在当前分支旁边的 *
,因为 $()
把 *
解释为文件通配符,所以它会展开当前目录中的所有文件和目录。 它是Git的“外观”命令之一,而不是像 git for-each-ref
那样的“管道”命令,后者专门用于脚本编写目的,不同于 git branch
。 - user456814
git archive
可以接受一个分支名称作为参数进行导出,因此您只需要编写一个脚本循环遍历分支名称并将它们传递给git archive
即可,就像toydarian所做的那样。 - user456814$ for f in ${$(git branch)[@]:1}; do; git archive --format zip --output /out/${f}.zip $f; done
,报错信息为sh.exe": syntax error near unexpected token
;'`。 - Kyeotic