#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, поскольку это не совсем соответствует назначению инструмента. Однако существует базовая команда, поверх которой вы могли бы создать свой собственный скрипт.
Вам понадобится:
- чтобы отобразить ветку на вашем удаленном:
git ls-remote --heads origin
- клонировать только ветку по ее имени:
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, поскольку я хочу поместить код в новый репозиторий.