Qual è la differenza tra Forking e Cloning su GitHub?


187

Mi piacerebbe conoscere le differenze tra fare un fork di un progetto e realizzarlo clone.

Posso inviare richieste pull solo tramite GitHub se ho modificato un progetto?



2
Per le persone che arrivano qui in cerca di una spiegazione di "fork" con Git (non GitHub). Non esiste un comando "fork" su Git. È più un concetto GitHub (non Git). Una distinzione facilmente dimenticata.
Ambassallo,

Risposte:


113

Fondamentalmente sì. A forkè solo una richiesta per GitHub di clonare il progetto e registrarlo con il tuo nome utente ; GitHub tiene inoltre traccia della relazione tra i due repository, in modo da poter visualizzare i commit e i pull tra i due progetti (e altri fork).

Puoi comunque richiedere che le persone estraggano dal tuo repository clonato, anche se non lo usi fork, ma dovresti occuparti di renderlo pubblicamente disponibile. Oppure invia le patch degli sviluppatori (vedi git format-patch) che possono applicare ai loro alberi.


4
Le fork richiedono molto più lavoro per l'aggiornamento rispetto ai cloni. Un clone può essere aggiornato con un semplice git pull. Un fork accetta più comandi. E non sorprende che quasi tutti i fork che guardo non siano aggiornati. Le forcelle sono come il problema di repository Maven sugli steroidi. Invece di un repository obsoleto (Maven), ce ne sono migliaia (Git).
jww,

@jww suona come il migliore per rimanere solo con il clone - perché usare fork allora?
serup

@serup: il motivo è che la copia biforcuta può essere modificata, git pullquindi esiste ancora una sorta di relazione. Se hai clonato l'intera copia, si trova sul tuo computer locale e sei disconnesso dal repository originale.
JonH,

134

Quando dici che stai forkando un repository, fondamentalmente stai creando una copia del repository sotto il tuo ID GitHub. Il punto principale da notare qui è che qualsiasi modifica apportata al repository originale verrà riflessa nei tuoi repository biforcati (devi recuperare e rifare il caso). Tuttavia, se si apportano modifiche al repository biforcato , sarà necessario creare esplicitamente una richiesta pull nel repository originale . Se la richiesta pull è approvata dall'amministratore del repository originale , le modifiche verranno impegnate / unite con la base di codice originale esistente . Fino ad allora, le tue modifiche si rifletteranno solo nella copia che hai biforcato .

In breve:

Il modello Fork & Pull consente a chiunque di eseguire il fork di un repository esistente e di inviare modifiche al proprio fork personale senza richiedere l'accesso al repository di origine. Le modifiche devono quindi essere trasferite nel repository di origine dal manutentore del progetto.

Si noti che dopo il fork è possibile clonare il repository (quello sotto il proprio nome) localmente sul proprio computer. Apportare modifiche e inviarlo al repository biforcato. Tuttavia, per riflettere le modifiche nel repository originale, è necessario approvare la richiesta pull.

Coppia di altre dicussioni interessanti -

Le forcelle git sono effettivamente cloni git?

Come posso aggiornare un repository biforcato GitHub?


24
"Il punto principale da notare qui è che qualsiasi modifica apportata al repository originale verrà riflessa nei repository biforcati." Penso sia un po 'fuorviante. AFAIK, le modifiche apportate al repository originale dopo il fork non si riflettono automaticamente nel fork; devi spostare queste modifiche manualmente. Le modifiche apportate prima del fork vengono tuttavia copiate nel nuovo fork quando si fa clic sul pulsante Fork.
Ajedi32,

"qualsiasi modifica apportata al repository originale verrà riflessa nei tuoi repository biforcati" .. davvero ?? Non automaticamente lo spero
KansaiRobot il

Lavoravo per il progetto di un cliente e utilizzavo la clonazione e il modello push per il lavoro. Un giorno l'ho biforcato e ho subito ricevuto un messaggio che diceva qual è la necessità di effettuare il fork del repository completo. Davvero non capisco come sia considerato sbagliato?
user3075740

le modifiche apportate al repository originale dopo il fork non si riflettono automaticamente nel fork, ma per farlo, controlla il passaggio 3 di questo blog: - help.github.com/articles/fork-a-repo
Suhas Chikkanna

"qualsiasi modifica apportata al repository originale verrà riflessa nei tuoi repository biforcati" - vuoi dire che non sarà possibile dopo la clonazione?
variabile dal

26
  • Il progetto forked è sul tuo repository online (repo).
  • Il progetto clonato è sul tuo computer locale (di solito clonare dopo aver effettuato il fork del repository).

È possibile eseguire il commit sul repository online (o eseguire il commit sul repository locale e quindi passare al repository online), quindi inviare la richiesta pull.

Il project manager può accettarlo per ottenere le modifiche nella sua versione online principale.


13

Un clone è il punto in cui si dispone della corretta duplicazione e separazione tra due versioni (possibilmente diverse) di un repository. Quando viene modificato un repository, il nuovo contenuto deve essere attivamente copiato nell'altro repository utilizzando un comando push. E i cambiamenti nell'altro repository sono stati recuperati.

Quando si effettua il fork di un repository, su un server, non è necessario duplicare il contenuto poiché entrambi i repository utilizzeranno lo stesso contenuto [oggetto fisso] dello stesso server. Il "trucco" consiste nel gestire i diversi punti di vista degli utenti in modo che ogni utente creda di disporre di una copia personale completa del repository. Spinge e recupera tra le forche semplicemente aggiorna i puntatori dell'utente.

A un livello inferiore, git fa la stessa cosa internamente. Se si dispone di tre file diversi, ognuno contenente Hello World, quindi git semplicemente 'forca' la sua singola copia del BLOB Hello World e lo offre in ciascuno dei tre posti, come richiesto.

La capacità di fork sul server significa che la grande tolleranza di archiviazione di Github non è così grande in media poiché ogni corpo condivide un singolo repository sottostante.


5

In poche parole, Forking è forse lo stesso di "clonazione sotto il tuo ID / profilo GitHub". Una fork è sempre meglio di un clone, con alcune eccezioni, ovviamente. Il repository biforcato viene sempre monitorato / confrontato con il repository originale a differenza di un repository clonato. Ciò consente di tenere traccia delle modifiche, avviare richieste pull e anche sincronizzare manualmente le modifiche apportate nel repository originale con il proprio fork.


5

Mentre la risposta di @ AniketThakur è molto buona. Nessuno ha ancora risposto alla seguente domanda.

Posso inviare richieste pull solo tramite GitHub se ho modificato un progetto?

No. Se sei un collaboratore di un repository, puoi: Creare un clone locale. Crea una filiale locale. Aggiungi commit a quel ramo. Riporta il ramo locale su github (creando un ramo remoto nel processo). Invia una richiesta pull richiedendo che quel ramo venga unito al ramo principale (o qualunque ramo ti piaccia).


3

Nel caso in cui tu abbia fatto ciò a cui suggeriva l'interrogante (hai dimenticato di fork e hai appena clonato localmente un repository, fatto modifiche e ora devi inviare una richiesta pull) puoi tornare in pista:

  1. fork del repository a cui si desidera inviare la richiesta pull
  2. invia le modifiche locali al telecomando
  3. invia richiesta pull

2

Un'altra strana sottile differenza su GitHub è che le modifiche alle forcelle non vengono conteggiate nel registro delle attività fino a quando le modifiche non vengono inserite nel repository originale. Inoltre, per trasformare un fork in un clone appropriato, devi contattare il supporto di Github, a quanto pare.

Da Perché i miei contributi non vengono visualizzati :

Commit è stato fatto in una forchetta

Gli impegni fatti in un fork non verranno conteggiati per i tuoi contributi. Per farli contare, è necessario effettuare una delle seguenti operazioni:

Aprire una richiesta pull per unire le modifiche nel repository principale. Per staccare il fork e trasformarlo in un repository autonomo su GitHub, contattare l' assistenza GitHub . Se il fork ha forcelle proprie, fai sapere al supporto se le forche devono spostarsi con il tuo repository in una nuova rete o rimanere nella rete corrente. Per ulteriori informazioni, vedere " Informazioni sulle forcelle ".


2

In breve, "fork" crea una copia del progetto ospitato sul proprio account GitHub.

"Clone" usa il software git sul tuo computer per scaricare il codice sorgente e l'intera cronologia delle versioni su quel computer

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.