mirror of
https://github.com/That-Guy-Jack/github-bundle-backup.git
synced 2025-04-29 05:52:28 +00:00
First commit
This commit is contained in:
parent
9b6c519014
commit
25a701434e
63
cloneall.sh
Executable file
63
cloneall.sh
Executable file
@ -0,0 +1,63 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# requires jq -> https://stedolan.github.io/jq/download/;
|
||||||
|
# create oath token -> https://github.com/settings/tokens;
|
||||||
|
|
||||||
|
# GitHub configuration
|
||||||
|
githubToken="<your access token>"
|
||||||
|
githubUser="<your github user>"
|
||||||
|
githubOrganization="<Your organiasation>"
|
||||||
|
|
||||||
|
# Script configuration
|
||||||
|
targetDir="./repos-$(date +"%Y-%m-%d")"
|
||||||
|
cloneOrgRepos=true
|
||||||
|
cloneUserRepos=false
|
||||||
|
targetField="clone_url"
|
||||||
|
startDir="$(pwd)"
|
||||||
|
|
||||||
|
# Script
|
||||||
|
mkdir -p $targetDir
|
||||||
|
cd $targetDir
|
||||||
|
echo "PWD: $(pwd)"
|
||||||
|
|
||||||
|
# https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#list-organization-repositories
|
||||||
|
listOrgReposUrl="https://api.github.com/orgs/$githubOrganization/repos?per_page=100"
|
||||||
|
if $cloneOrgRepos
|
||||||
|
then
|
||||||
|
orgRepositories=$(curl $listOrgReposUrl -u ${githubUser}:${githubToken} | jq -r .[].${targetField})
|
||||||
|
else
|
||||||
|
orgRepositories=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#list-repositories-for-the-authenticated-user
|
||||||
|
listUserRepoUrl="https://api.github.com/user/repos?per_page=100&type=owner"
|
||||||
|
if $cloneUserRepos
|
||||||
|
then
|
||||||
|
userRepositories=$(curl $listUserRepoUrl -u ${githubUser}:${githubToken} | jq -r .[].${targetField})
|
||||||
|
else
|
||||||
|
userRepositories=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone all repositories
|
||||||
|
repositories="$orgRepositories $userRepositories"
|
||||||
|
for repository in $repositories
|
||||||
|
do
|
||||||
|
printf "\nRepository found: $repository\n"
|
||||||
|
repo="${repository##*/}"
|
||||||
|
repo="${repo%.*}"
|
||||||
|
echo "$repo"
|
||||||
|
echo "$repository"
|
||||||
|
mkdir "$repo"
|
||||||
|
cd "$repo"
|
||||||
|
git clone --mirror "$repository" .
|
||||||
|
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `;
|
||||||
|
do
|
||||||
|
git branch --track ${branch#remotes/origin/} $branch || git branch
|
||||||
|
done
|
||||||
|
echo "PWD: $(pwd)"
|
||||||
|
git bundle create ./$repo.bundle --all
|
||||||
|
git bundle verify ./$repo.bundle
|
||||||
|
cd ../
|
||||||
|
done
|
||||||
|
|
||||||
|
cd "$startDir"
|
||||||
|
zip -r -m -9 "repo-archive-$(date +"%Y-%m-%d").zip" "$targetDir"
|
23
readme.md
Normal file
23
readme.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Restore a repo from a bundle file
|
||||||
|
Borrowed from https://gist.github.com/xtream1101/fd79f3099f572967605fab24d976b179
|
||||||
|
|
||||||
|
Here we will restore the repo from the bundle and create a new remote origin that will contain all brnaches and tags
|
||||||
|
1. Clone the repo from the bundle
|
||||||
|
```
|
||||||
|
git clone vuejs_vue.bundle
|
||||||
|
```
|
||||||
|
2. Get all the branches locally to be pushed up to your origin later (from: https://gist.github.com/grimzy/a1d3aae40412634df29cf86bb74a6f72)
|
||||||
|
```
|
||||||
|
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
|
||||||
|
git fetch --all
|
||||||
|
git pull --all
|
||||||
|
```
|
||||||
|
3. Create a new repo on your git server and update the origin of the local repo
|
||||||
|
```
|
||||||
|
git remote set-url origin git@github.com/xtream1101/test-backup.git
|
||||||
|
```
|
||||||
|
4. Push all branches and tags to the new remote origin
|
||||||
|
```
|
||||||
|
git push --all
|
||||||
|
git push --tags
|
||||||
|
```
|
Loading…
x
Reference in New Issue
Block a user