diff options
author | Christian Cleberg <hello@cleberg.net> | 2024-03-04 22:34:28 -0600 |
---|---|---|
committer | Christian Cleberg <hello@cleberg.net> | 2024-03-04 22:34:28 -0600 |
commit | 797a1404213173791a5f4126a77ad383ceb00064 (patch) | |
tree | fcbb56dc023c1e490df70478e696041c566e58b4 /blog/clone-github-repos/index.org | |
parent | 3db79e7bb6a34ee94935c22d7f0e18cf227c7813 (diff) | |
download | cleberg.net-797a1404213173791a5f4126a77ad383ceb00064.tar.gz cleberg.net-797a1404213173791a5f4126a77ad383ceb00064.tar.bz2 cleberg.net-797a1404213173791a5f4126a77ad383ceb00064.zip |
initial migration to test org-mode
Diffstat (limited to 'blog/clone-github-repos/index.org')
-rw-r--r-- | blog/clone-github-repos/index.org | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/blog/clone-github-repos/index.org b/blog/clone-github-repos/index.org new file mode 100644 index 0000000..3814e9f --- /dev/null +++ b/blog/clone-github-repos/index.org @@ -0,0 +1,148 @@ +#+title: How to Clone All Repositories from a GitHub or Sourcehut Account +#+date: 2021-03-19 +#+description: Learn how to clone all GitHub or Sourcehut repositories. +#+filetags: :dev: + +* Cloning from GitHub +If you're like me and use a lot of different devices (and sometimes +decide to just wipe your device and start with a new OS), you probably +know the pain of cloning all your old code repositories down to your +local file system. + +If you're using GitHub, you can easily clone all of your code back down +in just seconds. First, create a bash script. I do so by opening a new +file in =nano=, but you can use =gedit=, =vim=, or something else: + +#+begin_src sh +nano clone_github_repos.sh +#+end_src + +Next, paste in the following information. Note that you can replace the +word =users= in the first line with =orgs= and type an organization's +name instead of a user's name. + +#+begin_src sh +CNTX=users; NAME=YOUR-USERNAME; PAGE=1 +curl "https://api.github.com/$CNTX/$NAME/repos?page=$PAGE&per_page=100" | + grep -e 'git_url*' | + cut -d \" -f 4 | + xargs -L1 git clone +#+end_src + +Finally, save the bash script and make it executable. + +#+begin_src sh +chmod a+x clone_github_repos.sh +#+end_src + +Now you can run the script and should see the cloning process begin. + +#+begin_src sh +./clone_github_repos.sh +#+end_src + +* Cloning from Sourcehut +I haven't fully figured out how to directly incorporate Sourcehut's +GraphQL API into a bash script yet, so this one will take two steps. + +First, log-in to Sourcehut and go to their +[[https://git.sr.ht/graphql][GraphQL playground for Git]]. Next, paste +the following query into the left box: + +#+begin_src sh +query { + me { + canonicalName + repositories() { + cursor + results { + name + } + } + } +} +#+end_src + +The output on the right side will give you an object of all your +repositories. Just grab that text and remove all the characters such as +quotation marks and curly brackets. You will need a single-line list of +space-separated values for the next step. + +Now let's create the bash script: + +#+begin_src sh +nano clone_sourcehut_repos.sh +#+end_src + +Next, paste the following bash script in with the list of repositories +you obtained above and replace =your-username= with your username. + +Note that this uses the SSH-based Git cloning method +(e.g. =git@git...=), so you'll need to ensure you have set up Sourcehut +with your SSH key. + +#+begin_src sh +repos=(repo1 repo2 repo3) + +# List all sub-directories in the current directory +for repo in "${repos[@]}" +do + # Clone + git clone git@git.sr.ht:~your-username/$repo +done +#+end_src + +Finally, save the bash script and make it executable. + +#+begin_src sh +chmod a+x clone_sourcehut_repos.sh +#+end_src + +Now you can run the script and should see the cloning process begin. + +#+begin_src sh +./clone_sourcehut_repos.sh +#+end_src + +* Moving Repositories to a New Host +Now that you have all of your code repositories cloned to your local +computer, you may want to change the remote host (e.g., moving from +GitHub to GitLab). To do this, let's create another bash script: + +#+begin_src sh +nano change_remote_urls.sh +#+end_src + +Past the following information and be sure to change the URL information +to whichever host you are moving to. For this example, I am looping +through all of my cloned GitHub directories and changing them to +Sourcehut (e.g. =<YOUR_NEW_REMOTE_URL>= -> =git@git.sr.ht:~myusername=). + +#+begin_src sh +# List all sub-directories in the current directory +for dir in */ +do + # Remove the trailing "/" + dir=${dir%*/} + # Enter sub-directory + cd $dir + # Change remote Git URL + git remote set-url origin <YOUR_NEW_REMOTE_URL>/"${dir##*/}" + # Push code to new remote + git push + # Go back to main directory + cd .. +done +#+end_src + +Finally, save the bash script and make it executable. + +#+begin_src sh +chmod a+x change_remote_urls.sh +#+end_src + +Now you can run the script and should see the cloning process begin. + +#+begin_src sh +./change_remote_urls.sh +#+end_src |