[Repost]Transferring Github stars
I recently changed the name of one of my projects and it dawned on me: it’s probably possible to transfer Github stars! I tested this theory and found it to be true.
After pouring lots of love into my new project brownies of course it had no stars. But one of my I can hack that in an hour repos got to the front-page of Hacker News and got a bunch of undeserved stars:
Name | Date | Stars | Effort | Potential future |
---|---|---|---|---|
Brownies | Nov 2018 | 24 ⭐ | ~10h | High, “definitive” library |
Cookies | Sep 2016 | 2219 ⭐ | ~10h | Low, many similar projects |
Since the new project is a strict extension of the old one, I decided to go ahead and try to reverse the star count. Let me explain how I did it and the dangers below.
I believe I’m not breaking any Github ToS, but I am not a lawyer and this is not legal advice.
1. Prepare for the shooting stars
The first thing to do step is to rename the repositories:
brownies
→cookies
cookies.js
→brownies
Now we have the right names with the right amount of stars, but the repositories do not have yet the right content. Since my local project brownies already points to the right repository, let’s try to push:
1 2 3 4 5 6 7 8 9 10 |
$ cd ~/projects/brownies $ git push origin master To github.com:franciscop/brownies.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'git@github.com:franciscop/brownies.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. |
As I guessed, it doesn’t work since the histories are not compatible. Since I backed up everything and I use Git mainly as a tool to deploy, let’s just force it:
1 2 3 4 5 6 7 8 9 |
$ git push origin master --force Counting objects: 252, done. Delta compression using up to 4 threads. Compressing objects: 100% (119/119), done. Writing objects: 100% (252/252), 60.41 KiB | 12.08 MiB/s, done. Total 252 (delta 159), reused 201 (delta 127) remote: Resolving deltas: 100% (159/159), done. To github.com:franciscop/brownies.git + 440007a...a7d3bd6 master -> master (forced update) |
It works! However, the other package for cookies was pointing to cookies.js
so let’s fix that and push that as well:
1 2 3 4 5 6 7 8 9 10 11 12 |
$ cd ~/projects/cookies $ git remote remove origin $ git remote add origin git@github.com:franciscop/cookies.git $ git push --force Counting objects: 212, done. Delta compression using up to 4 threads. Compressing objects: 100% (134/134), done. Writing objects: 100% (212/212), 256.35 KiB | 495.00 KiB/s, done. Total 212 (delta 132), reused 117 (delta 75) remote: Resolving deltas: 100% (132/132), done. To github.com:franciscop/cookies.git + a7d3bd6...440007a master -> master (forced update) |
Now we just have to change the headline in each repo, some info like the package.json github repo and we are ready to go. This is the final result, notice the star count:
Name | Date | Stars | Effort | Potential future |
---|---|---|---|---|
Brownies | Nov 2018 | 2219 ⭐ | ~11h | High, “definitive” library |
Cookies | Sep 2016 | 24 ⭐ | ~11h | Low, many similar projects |
2. Dangers
What if you are a big corporation and want to publish a new package, but don’t want it to look empty?
While there are some shady services to buy fake Github stars, with this exploit a company could just pay someone and get their repository with real user stars. If this became popular, I can see people faking up repos only to sell them, and we’d end up in a very bad place (aham, twitter).
The fact that this is possible opens up to a new world of dangers, and unlikely a previous similar issue there does not seem to be a logical solution here from my limited external point of view.
Any solution at this stage might be worse than the problem, so my only recommendation for Github is to monitor transfers of repos with “high” star count for history changes and take manual action.
Fortunately the value of Github stars is still fairly limited for this to be a target now, but it seems like things might change in a future with too many repositories.
Why don’t you try the library and let me know what you think? Or explore my site and say hi: