Есть какой-нибудь способ превратить все ветки git в папки для репозитория?

#git #github #version-control #git-branch #archive

#git #github #контроль версий #git-branch #Архив

Вопрос:

У меня есть несколько ветвей в репозитории git.

 -repo
  -- branch1
  -- branch2
  

По какой-то причине мне нужно переместить репозиторий в другой репозиторий без истории. Поскольку branch1 и branch2 отличаются кодом, поэтому мне было бы полезно, если бы я мог автоматически создавать карту ветви к папке внутри репозитория в новом расположении. Есть ли какой-нибудь способ сделать это?

Реальная проблема в том, что у меня есть единственное репозиторий git, называемое archives в GitHub, внутри которого мне нужно хранить несколько репозиториев с доступным для просмотра исходным кодом. Какие еще варианты доступны в моих руках?

Комментарии:

1. man git-bundle

Ответ №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

Комментарии:

1. Спасибо, возможно ли создать папку с именем репозитория и переместить все ветви-папки внутрь. Также необходимо полностью удалить .git, поскольку я хочу поместить код в новый репозиторий.