有什么方法可以将所有 git 分支转为存储库的文件夹?
Any way to turn all git branches into folders for a repository?
我在 git 存储库中有几个分支。
-repo
-- branch1
-- branch2
出于某种原因,我需要将回购移动到另一个没有历史记录的回购。由于 branch1
和 branch2
的代码不同,所以如果我可以在新位置的回购中自动创建分支到文件夹映射,这对我会有帮助。 有什么办法吗?
实际问题是我在 GitHub 中有一个名为 archives 的单个 git 存储库,我需要在其中保存多个具有可浏览源代码的存储库。 我手中还有哪些其他选项可用?
我不确定是否存在仅使用 git 的解决方案,因为这不是该工具的目的。但是,存在基本命令,您可以在其上构建自己的脚本。
你需要:
- 列出您遥控器上的分支:
git ls-remote --heads origin
- 仅按名称克隆一个分支:
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
克隆您的存储库(具有您想要的结构)
我在 git 存储库中有几个分支。
-repo
-- branch1
-- branch2
出于某种原因,我需要将回购移动到另一个没有历史记录的回购。由于 branch1
和 branch2
的代码不同,所以如果我可以在新位置的回购中自动创建分支到文件夹映射,这对我会有帮助。 有什么办法吗?
实际问题是我在 GitHub 中有一个名为 archives 的单个 git 存储库,我需要在其中保存多个具有可浏览源代码的存储库。 我手中还有哪些其他选项可用?
我不确定是否存在仅使用 git 的解决方案,因为这不是该工具的目的。但是,存在基本命令,您可以在其上构建自己的脚本。
你需要:
- 列出您遥控器上的分支:
git ls-remote --heads origin
- 仅按名称克隆一个分支:
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