Elimina la dipendenza fork di un repository GitHub


206

Come posso far dimenticare o dissociare GitHub dal fatto che il mio repository era originariamente un fork di un altro progetto?

Ho creato un progetto in GitHub. Ora posso vedere "biforcuta da qualunque cosa / qualunque cosa". Il repository principale "qualunque / qualunque cosa" non viene più mantenuto. Mi è stato permesso di continuare a utilizzare la base di codici del repository originale per creare un repository indipendente.

C'è un modo per staccare il mio progetto dal repository originale?

Risposte:


175

Puoi contattare il supporto di github e chiedere loro di cambiare il tuo repository in "modalità normale".

In questa pagina , il paragrafo "Commit è stato effettuato in un fork", viene spiegato che è necessario passare attraverso il supporto per passare. Pertanto, è probabile che non ci sia modo di farlo da soli (a meno che tu non distrugga e ricrea il tuo repository che è stato spiegato prima ... se lo fai fai attenzione se hai biglietti o una wiki collegati al tuo progetto come faranno essere cancellato!).


31
Posso confermare che contattare l'assistenza funziona perfettamente, inoltre spesso rispondono nel giro di poche ore :-)
BenC

1
La pagina collegata non contiene più le informazioni dichiarate.
Kara Brightwell,

3
@MattBrennan La pagina è cambiata ma l'ultima sezione include ancora: "Per staccare il fork e trasformarlo in un repository autonomo su GitHub.com o GitHub Enterprise, contattare il supporto GitHub o l'amministratore del sito, rispettivamente."
Thomas Moulard,

1
Super veloce .. mi hanno risposto in 1 ora. Grazie
myDoggyWritesCode

2
In Github Enterprise puoi trovarlo ora in admin-> Collaboration-> Network e, a seconda del tuo caso d'uso, dovresti usare 'Make Root', 'Detach' o 'Extract'.
Kutzi,

45

È possibile duplicare il repository biforcato in un nuovo repository (senza la depencency fork) dall'interfaccia utente github, quindi rimuovere quello biforcato originale:

  • Accedi a github
  • Seleziona il segno + nell'angolo in alto a destra e Importa repository .
  • Importa il tuo repository biforcato. Il nuovo repository non avrà la dipendenza fork.
  • Elimina il repository biforcato originale nelle impostazioni del repository.

1
Questo è stato il più semplice e quello che ha funzionato per me :). Molto intelligente.
moxi,

1
Qualcun altro ha avuto un problema con la funzione di importazione "sospesa"? Il mio è stato su "Rilevamento del sistema di controllo della versione del tuo progetto ..." per circa 5 ore. Non sono sicuro di essere in coda o è un blocco effettivo. Il repository è piccolo. Ho tentato di lasciarlo per tutta la notte nel caso fossi in fila.
Benjamin West,

Finalmente mi sono incuriosito e ho semplicemente cliccato su "annulla". Facendo clic su Annulla è stato possibile saltare il rilevamento VCS e importare semplicemente il codice / commit / rami ecc. Questo è stato il caso durante l'importazione di Github -> Github. L'importazione potrebbe non essere stata bloccata se provenissi da un VCS diverso? Non sono sicuro. Nota anche che, facendo questo con un secondo repository, ho dovuto annullare due volte per farlo funzionare. Se la CLI copia tutti gli stessi dati che potrebbero essere un metodo migliore, ma spero che questo aiuti gli altri che hanno scelto questa strada.
Benjamin West,

9
Giusto per essere chiari, questo approccio non manterrà i problemi e attirerà le richieste.
golopot,

Funziona come il fascino! Grazie sei un vero toccasana! :)
onnimind

44

Assicurati di avere tutti i rami e tag importanti sul tuo repository locale, elimina il repository github, ricrea il repository con i soliti mezzi (senza biforcazione) e rimetti il ​​repository locale con git push --all. Si noti che se si dispone di filiali locali che non si desidera pubblicare, potrebbe essere utile creare un clone locale pulito temporaneo per l'operazione.

Tuttavia, questo eliminerà anche wiki e problemi. Poiché il wiki è in realtà il proprio repository, può essere gestito in modo simile clonandolo e quindi ricreando e spingendo. L'indirizzo del repository si trova nella pagina Git Access della wiki ( git@github.com:user/repo.wiki.git).

Questo lascia problemi. Possono essere esportati tramite l' API , ma per quanto ne so, puoi solo creare problemi e commenti con la tua persona, quindi è impossibile importarli perfettamente.

Quindi, se hai bisogno di conservare i problemi, dovresti passare attraverso il supporto di github come suggerisce Thomas Moulard.


A seconda di quanti problemi ci sono, potrebbe essere possibile trasferirli uno ad uno nel nuovo repository prima di eliminare quello vecchio dal Web ( help.github.com/en/github/managing-your-work-on- github / ... ). Immagino che un determinato individuo possa trasferire più di 100 numeri all'ora - non è divertente, ma per molti repository una cosa fattibile.
Suma,

22

Ho riscontrato il problema simile e ho finito per usare questa pagina di aiuto di github per risolverlo. Non mi importava del wiki e del tracker dei problemi come era per il mio blog usando un tema gentilmente sviluppato da un altro utente.

Per staccare un repository biforcato e usarlo come proprio dopo diversi commit senza perdere l'intera cronologia:

git clone --bare git@github.com:user/forked_repo.git

Crea una nuova reposità vuota new-repositorysul sito Web di github. E spingere una versione speculare:

cd user.github.com.git/

git push --mirror git@github.com:user/new-repository.git

Si può rinominare su github, il forked_repositorycon un altro nome per tenerlo come backup e controllare gli aggiornamenti se necessario. O semplicemente cancellalo.

Rinominare il new-repositorynome originale fa il lavoro. Come effetto collaterale, i tuoi commit ora appaiono nella tua storia.


11

Questo vale solo per GitHub Enterprise, non su github.com

Accesso a un account con privilegi di amministratore:

  1. Vai al repository che devi staccare: https://<ghe url>/<org>/<repo>
  2. Fai clic sul razzo "Site Admin" nell'angolo in alto a destra
  3. Fai clic su "Collaborazione" nella barra dei menu in alto
  4. Fai clic su "Rete" nel riquadro a sinistra
  5. Fai clic su "Crea radice" nel riquadro Struttura di rete
  6. Accettare

Questo è stato testato su GitHub Enterprise 2.9


A seconda del caso d'uso, "Stacca" o "Estrai" potrebbero essere più appropriati. Trovo 'Make Root' un po 'strano in quanto invertirà sostanzialmente la direzione root-> child. (Github Enterprise 2.17)
Kutzi,

10

Usando le informazioni di aurelien e Clayton , sono stato in grado di farlo con il seguente:

$ 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

Ecco la documentazione pergit clone --bare :

Crea un repository Git nudo. Cioè, invece di creare <directory>e posizionare i file amministrativi <directory>/.git, rendere <directory>se stesso il $GIT_DIR. Questo ovviamente implica -n perché non c'è nessun posto dove controllare l'albero di lavoro. Anche le diramazioni sul telecomando vengono copiate direttamente nelle corrispondenti diramazioni locali, senza mapparle refs/remotes/origin/. Quando viene utilizzata questa opzione, non vengono creati né rami di tracciamento remoto né le relative variabili di configurazione.

Ecco la documentazione pergit push --mirror :

Invece di nominare ogni ref a spinta, specifica che tutti arbitri inferiore refs/(che include ma non è limitato a refs/heads/, refs/remotes/e refs/tags/) essere mirroring repository remoto. I riferimenti locali appena creati verranno spinti all'estremità remota, i riferimenti aggiornati localmente verranno forzati sull'estremità remota e i riferimenti eliminati verranno rimossi dall'estremità remota. Questo è il valore predefinito se l'opzione di configurazione remote.<remote>.mirrorè impostata.

Nota: come le altre gitrisposte basate, questo non verrà copiato su problemi che non fanno parte del gitrepository come il wiki e i problemi. Per Tapio:

  • Il wiki è un repository git separato e può essere gestito in modo simile per Tapio. L'indirizzo è: git@github.com:user/repo.wiki.git.
  • I problemi possono essere esportati tramite l'API GitHub ma ci sono problemi a ricrearli poiché possono essere creati solo dall'utente, quindi le importazioni perderanno informazioni.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.