Skip to content

Instantly share code, notes, and snippets.

@joeytwiddle
Last active October 13, 2023 20:50
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save joeytwiddle/abee0610244d283f1ebe2f76bf608086 to your computer and use it in GitHub Desktop.
Save joeytwiddle/abee0610244d283f1ebe2f76bf608086 to your computer and use it in GitHub Desktop.
Add all forks of the current repo as remotes
#!/usr/bin/env bash
set -e
# See also: https://github.com/frost-nzcr4/find_forks (same thing but in python)
origin_url="$(git remote show origin | grep 'Fetch URL:' | sed 's+.*: ++')"
full_repo_name="$(echo "$origin_url" | sed 's+.*github.com/++ ; s+\.git$++')"
forks_url="https://api.github.com/repos/${full_repo_name}/forks"
#[ -e "forks.json" ] ||
curl -s "${forks_url}" -o forks.json
node -e "
var forks = JSON.parse(fs.readFileSync('forks.json', 'utf-8'));
forks.forEach(forkData => {
console.log('git remote add \"' + forkData.owner.login + '\" \"' + forkData.git_url + '\"');
});
console.log('git fetch --all');
" |
if [ "$1" = -do ]
then bash
else
cat
echo
echo "Pass -do to execute above commands"
fi
@FrankReh
Copy link

That GitHub URL passed to curl takes a page option.

@johndpope
Copy link

johndpope commented Oct 4, 2020

I get an error


TypeError: forks.forEach is not a function
    at [eval]:3:9
    at ContextifyScript.Script.runInThisContext (vm.js:50:33)
    at Object.runInThisContext (vm.js:139:38)
    at Object.<anonymous> ([eval]-wrapper:6:22)
    at Module._compile (module.js:653:30)
    at evalScript (bootstrap_node.js:479:27)
    at startup (bootstrap_node.js:180:9)
    at bootstrap_node.js:625:3

Pass -do to execute above commands

maybe I need a specific nvm / npm

this worked for me
https://github.com/akumria/findforks/blob/master/findforks.py

UPDATE
I switched to node 13 - but problem persists.

@JanX2
Copy link

JanX2 commented May 12, 2021

@johndpope
That issue cropped up for me, because git output is localized. The translation doesn’t contain 'Fetch URL:'. The result was an empty "forks.json".

My solution was to replace the screen scraping with git config --get remote.origin.url. That worked.

See: https://gist.github.com/JanX2/f7fd01bbd37a863cbd0c6c3db6c37ca2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment