【问题标题】:Any way to turn all git branches into folders for a repository?有什么方法可以将所有 git 分支变成存储库的文件夹?
【发布时间】:2020-12-02 12:24:18
【问题描述】:

我在一个 git repo 中有几个分支。

-repo
  -- branch1
  -- branch2

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

实际问题是我在 GitHub 中有一个名为 archives 的 git repo,我需要在其中保留几个带有可浏览源代码的 repo。 我手上还有哪些其他选择?

【问题讨论】:

  • man git-bundle

标签: git github version-control git-branch archive


【解决方案1】:

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

你需要:

  1. 列出远程分支:git ls-remote --heads origin
  2. 只克隆一个分支名称:git clone -b BRANCH_NAME --single-branch REMOTE_URL DESTINATION

使用这两个命令,您可以像这样在 bash 中自动执行该过程:

#!/usr/bin/env bash

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

remote=$1
repository=$2
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 克隆您的repo(具有您想要的结构)

【讨论】:

  • 谢谢,是否可以创建一个带有 repo 名称的文件夹并将所有分支文件夹移动到里面。还需要完全删除 .git,因为我想在新存储库中推送代码。
猜你喜欢
  • 2013-03-03
  • 2014-01-12
  • 2017-05-14
  • 2020-12-11
  • 2012-08-10
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
相关资源
最近更新 更多