ChatGPT解决这个技术问题 Extra ChatGPT

If I fork someone else's private Github repo into my account, is it going to appear in my account as a public repo?

Someone gave me access to one of their private repo on Github. What I want to do is to fork that project into my own account, so I could make use of Github's pull request feature.

I only have a basic account on Github, so I cannot make private repos on my own, but if I fork someone else's private repo into my account, is it going to appear in my account as public?


f
funroll

No. You can fork it and it still remains private.

Private collaborators may fork any private repository you’ve added them to without their own paid plan. Their forks do not count against your private repository quota.

https://github.com/plans


Yeah, I've read that. I'm pretty sure this is a stupid question, but could you elaborate more especially on the last sentence?
It still remains private, just checked myself :)
Follow-up question: if you revoke access to the repo on the main account...does it delete your fork? Or at least revoke access to your own fork?
@tslater When you fork a repo you are the owner, and so even if a fork's parent repo is deleted, your fork will remain intact. Furthermore, since you're an admin of the fork, you can still add collaborators (who could also fork), transfer ownership to any user or Organization (orgs can add both admin and read-only users who can ALSO fork), or even just make the repo public. Finally, using these facts to deliberately trick GitHub into giving you "free" private repos is against their TOS and they will probably delete your account if you attempt to do this.
@namuol This has changed as explained in Planet Bips's answer. Now forks are deleted when the main repository is deleted in a private repo. Along with that, forks are deleted if a collaborator loses access to the private repo. github.com/blog/…
P
Planet Bips

When you revoke access for a member on the main branch (master repo), it will yank the forked repo as well. So, if you added members to a team, and they forked from the master repo, always ensure that you either have merged their changes or you have a copy of their changes before you remove them from the team, as the members forked repo gets deleted when he is removed from the team and you wont have a way to fetch his changes (if only you care about those).


Your answer disagrees with the Github help. I haven't tried it myself.
There appears to be a difference between removing a team member (help.github.com/articles/…) and removing a collaborator (help.github.com/articles/…). It appears to be the difference between if the private repo is part of an organization (deletes the forks) or not (saves the forks)
This is now true: github.com/blog/…
D
DeveloperAlex

Here's GitHub's answer:

https://help.github.com/articles/what-happens-to-forks-when-a-repository-is-deleted-or-changes-visibility/#deleting-a-private-repository

Deleting a private repository

When you delete a private repository, all of its private forks are also deleted.


well, that's stupid. I thought a fork was essentially a hard copy on someone else account. So how do you make it permanent? download it and then re-upload it as a new project?
Yes @Jon Grah, you would download and reupload to hard copy, usually software has a handoff where the original author stops maintaining and gives the blessing to the person forking the project. If that was the case they would archive their project and the fork would persist. Another thing to note, if the repo gets deleted but you have a local copy. Your fork would be deleted on github but you would still be able to create a repo add the remote and push the project up. One of the reasons forking is desirable is because you can update original with fork or fork with original if changes occur.
M
Mr. Beeblebrox

Real answer.

there are three types of repositories. private, public, and internal. Internal ones require an enterprise account, so we'll forget about them for now. :)

Any fork of one of those retains it's type. Forks of public repositories are public, and forks of private ones are private. Removing access to a private repository deletes that person's fork.

Deleting a private repository deletes all forks of it, which are also private. If you wish to keep a copy, you have to clone and publish it yourself. Which might not be allowed by the code's license. Deleting a PUBLIC repository makes all of the direct forks new masters.

Only the master can be changed from private to public, or vice versa.

Doing either disconnects all forks, and makes them into new masters, all retaining their existing type.

If you wish to delete your private repository while not deleting the other (private) forks, make it public first, which will make all of the private forks into private masters, then delete the repository.

TL:DR; If the repository is public, your fork is public, and stays forever. If the original is private, your fork is private and will vanish if the master does or you do not have access anymore, and you will have to clone and update repeatedly to be sure of keeping it.

This should hopefully answer all questions about forking and deleting. :)