有什么方法可以将所有 git 分支转为存储库的文件夹?

Any way to turn all git branches into folders for a repository?

我在 git 存储库中有几个分支。

-repo
  -- branch1
  -- branch2

出于某种原因,我需要将回购移动到另一个没有历史记录的回购。由于 branch1branch2 的代码不同,所以如果我可以在新位置的回购中自动创建分支到文件夹映射,这对我会有帮助。 有什么办法吗?

实际问题是我在 GitHub 中有一个名为 archives 的单个 git 存储库,我需要在其中保存多个具有可浏览源代码的存储库。 我手中还有哪些其他选项可用?

我不确定是否存在仅使用 git 的解决方案,因为这不是该工具的目的。但是,存在基本命令,您可以在其上构建自己的脚本。

你需要:

  1. 列出您遥控器上的分支:git ls-remote --heads origin
  2. 仅按名称克隆一个分支:git clone -b BRANCH_NAME --single-branch REMOTE_URL DESTINATION

使用这两个命令,您可以在 bash 中自动执行此过程,如下所示:

#!/usr/bin/env bash

####
#
#  = Remote URL to be clonned
#  = New name of the repository
#
####

remote=
repository=
workdir=$(pwd)
destination="$workdir/$repository"

echo "Creating repository at $destination"
mkdir "$destination"

git clone "$remote" "$repository"
cd "$repository"

for branch in $(git ls-remote --heads origin | grep -o "refs/heads/.*$" | cut -d / -f 3-)
do
        echo "Cloning into branch $branch"
        git clone -b $branch --single-branch $remote "$destination/$branch"
done

echo "Current dir: $(pwd)"
echo "Deleting all .git and .gitignore files"

rm -rf "$destination"/*/.gitignore
rm -rf "$destination"/*/.git
rm -rf "$destination"/.gitignore
rm -rf "$destination"/.git

cd $workdir

echo "All done! cur dir: $(pwd)"

将这段代码保存在类似 my-repo-cloner.sh 的文件中,您可以使用 ./my-repo-cloner.sh REMOTE_URL MYREPO

克隆您的存储库(具有您想要的结构)