Supprimer la dépendance fork d'un référentiel GitHub

206

Comment puis-je faire oublier ou dissocier GitHub que mon dépôt était à l'origine un fork d'un autre projet?

J'ai bifurqué un projet dans GitHub. Je peux maintenant voir "bifurquer de tout / peu importe". Le référentiel parent "que ce soit / quoi que ce soit" n'est plus maintenu. J'ai été autorisé à continuer d'utiliser la base de code du référentiel d'origine pour créer un référentiel indépendant.

Existe-t-il un moyen de détacher mon projet du référentiel d'origine?

Mick
la source

Réponses:

175

Vous pouvez contacter le support github et leur demander de basculer votre référentiel en "mode normal".

Sur cette page , le paragraphe "Commit was made in a fork", il est expliqué qu'il faut passer par le support pour passer. Par conséquent, il est probable qu'il n'y ait aucun moyen de le faire par vous-même (sauf si vous détruisez et recréez votre dépôt qui est expliqué avant ... si vous le faites, faites attention si vous avez des billets ou un wiki attaché à votre projet comme ils le feront être supprimé!).

Thomas Moulard
la source
31
Je peux confirmer que contacter le support fonctionne parfaitement, et ils répondent souvent en quelques heures :-)
BenC
1
La page liée ne contient plus les informations indiquées.
Kara Brightwell
3
@MattBrennan La page a changé mais la dernière section comprend toujours: "Pour détacher le fork et le transformer en un référentiel autonome sur GitHub.com ou GitHub Enterprise, contactez le support GitHub ou votre administrateur de site, respectivement."
Thomas Moulard
1
Super rapide .. ils m'ont répondu en 1 heure. Merci
myDoggyWritesCode
2
Dans Github Enterprise, vous pouvez le trouver maintenant sous admin-> Collaboration-> Network et en fonction de votre cas d'utilisation, vous devez utiliser "Make Root", "Detach" ou "Extract".
Kutzi
45

Vous pouvez dupliquer le référentiel forké dans un nouveau référentiel (sans la dépendance fork) de l'interface utilisateur de github, puis supprimer celui d'origine:

  • Connectez-vous à github
  • Sélectionnez le signe + dans le coin supérieur droit et Importer le référentiel .
  • Importez votre référentiel forké. Le nouveau référentiel n'aura pas la dépendance fork.
  • Supprimez le référentiel original et fourchu dans les paramètres du référentiel.
Juuso Ohtonen
la source
1
C'était le plus simple et ce qui a fonctionné pour moi :). Très intelligent.
moxi
1
Quelqu'un d'autre a-t-il eu un problème avec la fonction d'importation "suspendue"? Le mien est sur "Détecter le système de contrôle de version de votre projet…" depuis environ 5 heures. Je ne sais pas si je suis en file d'attente ou s'il s'agit d'un blocage réel. Le repo est petit. Tenté de le laisser pendant la nuit juste au cas où je serais en ligne.
Benjamin West
Je suis finalement devenu curieux et j'ai juste cliqué sur "Annuler". Cliquer sur annuler lui a permis de sauter la détection VCS et d'importer simplement le code / les commits / les branches, etc. C'était le cas lors de l'importation de Github -> Github. L'importation n'aurait peut-être pas été bloquée si je venais d'un autre VCS? Pas certain. Veuillez également noter qu'en faisant cela avec un deuxième dépôt, j'ai dû annuler deux fois pour que cela fonctionne. Si CLI copie toutes les mêmes données, cela pourrait être une meilleure méthode, mais j'espère que cela aidera les autres qui ont choisi cette route.
Benjamin West
9
Juste pour être clair, cette approche ne préservera pas les problèmes et les demandes de tirage.
golopot
Fonctionne comme un charme! Merci, vous êtes une bouée de sauvetage! :)
omnimind
44

Assurez-vous que vous disposez de toutes les branches et balises importantes sur votre référentiel local, supprimez le référentiel github, recréez le référentiel par les moyens habituels (sans forking) et repoussez le référentiel local avec git push --all. Notez que si vous avez des branches locales que vous ne souhaitez pas publier, il peut être utile de créer un clone local propre temporaire pour l'opération.

Cependant, cela supprimera également le wiki et les problèmes. Comme le wiki est en fait son propre référentiel, il peut être géré de la même manière en le clonant puis en le recréant et en le poussant. L'adresse du dépôt est sur la page Git Access du wiki ( [email protected]:user/repo.wiki.git).

Cela laisse des problèmes. Ils peuvent être exportés via l' API , mais pour autant que je sache, vous ne pouvez créer des problèmes et des commentaires qu'avec votre personne, il est donc impossible de les importer parfaitement.

Donc, si vous avez besoin de problèmes pour être préservés, vous devriez passer par le support github comme le suggère Thomas Moulard.

Tapio
la source
Selon le nombre de problèmes, il peut être possible de les transférer un par un vers le nouveau référentiel avant de les supprimer de l'ancien du Web ( help.github.com/en/github/managing-your-work-on- github /… ). Je suppose qu'un individu déterminé pourrait transférer plus de 100 numéros par heure - ce n'est pas amusant, mais pour de nombreux référentiels une chose réalisable.
Suma
22

J'ai eu le même problème et j'ai fini par utiliser cette page d'aide github pour le résoudre. Cela ne me dérangeait pas pour le wiki et le traqueur de problèmes comme pour mon blog en utilisant un thème gentiment développé par un autre utilisateur.

Pour détacher un dépôt fourchu et l'utiliser comme le vôtre après plusieurs validations sans perdre tout l'historique:

git clone --bare [email protected]:user/forked_repo.git

Créez un nouveau référentiel vide new-repositorysur le site Web de Github. Et poussez une version miroir:

cd user.github.com.git/

git push --mirror [email protected]:user/new-repository.git

On peut renommer sur github, le forked_repositoryavec un autre nom pour le garder comme sauvegarde et vérifier les mises à jour si nécessaire. Ou supprimez-le simplement.

Renommer le new-repositoryau nom d'origine fait l'affaire. En tant qu'effet secondaire, vos commits apparaissent désormais dans votre historique.

aurelien
la source
11

Cela ne s'applique qu'à GitHub Enterprise, pas sur github.com

Connecté à un compte disposant de privilèges d'administrateur:

  1. Accédez au référentiel que vous devez détacher: https://<ghe url>/<org>/<repo>
  2. Cliquez sur la fusée "Site Admin" dans le coin supérieur droit
  3. Cliquez sur "Collaboration" dans la barre de menu supérieure
  4. Cliquez sur «Réseau» dans le volet gauche
  5. Cliquez sur "Make Root" dans le volet Structure du réseau
  6. J'accepte

Cela a été testé sur GitHub Enterprise 2.9

Antonio O.
la source
Selon votre cas d'utilisation, «Détacher» ou «Extraire» peut être plus approprié. Je trouve 'Make Root' un peu bizarre car il inversera fondamentalement la direction root-> child actuelle. (Github Enterprise 2.17)
Kutzi
10

En utilisant les informations d' Aurelien et de Clayton , j'ai pu le faire avec les éléments suivants:

$ git clone --bare https://github.com/my/forked_repo.git
<delete forked_repo on GitHub>
<recreate repo on GitHub using same name>
$ cd forked_repo.git
$ git push --mirror

Voici la documentation pourgit clone --bare :

Créez un référentiel Git nu. Autrement dit, au lieu de créer <directory>et de placer les fichiers administratifs dans <directory>/.git, faites le <directory>lui-même $GIT_DIR. Cela implique évidemment le -n car il n'y a nulle part où vérifier l'arbre de travail. De plus, les têtes de branche de la télécommande sont copiées directement dans les têtes de branche locales correspondantes, sans les mapper refs/remotes/origin/. Lorsque cette option est utilisée, ni les branches de suivi à distance ni les variables de configuration associées ne sont créées.

Voici la documentation pourgit push --mirror :

Au lieu de nommer chaque arbitre pour pousser, précise que tous les refs sous refs/(qui comprend , mais sans s'y limiter refs/heads/, refs/remotes/et refs/tags/) être mis en miroir le dépôt distant. Les références locales nouvellement créées seront transmises à l'extrémité distante, les références mises à jour localement seront mises à jour de force sur l'extrémité distante et les références supprimées seront supprimées de l'extrémité distante. Il s'agit de la valeur par défaut si l'option de configuration remote.<remote>.mirrorest définie.

Remarque: comme les autres gitréponses basées, cela ne copiera pas les problèmes qui ne font pas partie du gitréférentiel tels que le wiki et les problèmes. Par Tapio:

  • Le wiki est un dépôt git séparé et peut être géré de la même manière par Tapio. L'adresse est:[email protected]:user/repo.wiki.git .
  • Les problèmes peuvent être exportés via l'API GitHub mais il y a des problèmes à les recréer car ils ne peuvent être créés que par votre utilisateur, donc les importations perdront des informations.
Grokify
la source