2011-01-18 15 views
7

La funzione di "fork" è specifica per github? oppure esiste un processo puramente git per creare repository secondari "copiati" che possono estrarre gli aggiornamenti dal genitore? Se é cosi, come?Git - Forking senza Github

MODIFICA: Devo essere confuso su cosa git clone fa quindi. Ho capito che git clone è ciò che faccio sul mio computer per ottenere una copia locale del repository per apportare modifiche a, commit e push da. Attualmente stiamo ospitando i nostri repository con gitosis. Quindi, se volessi accompagnare un 'fork', clonerei il repository sul server gitosis stesso (all'origine)? Creeresti un nuovo indirizzo git?

+2

Questa copia locale è una replica completa dei dati originali. Non c'è distinzione tecnica tra questo e una forcella più formale. Il pulsante github fork clona semplicemente il repository e quindi memorizza qualcosa nel loro DB in modo che possano ricordare di averlo fatto. – Dustin

risposta

7

Probabilmente non si vuole farlo realmente. I rami in git sono molto belli e leggeri, e non c'è davvero una ragione per cui non dovresti semplicemente creare un ramo nel repository che hai adesso. L'unico motivo per cui posso pensare di farlo con un repository gitosis è quello di rendere interessante il controllo degli accessi, se si dispone di una distribuzione continua o qualcosa che preleva da un repository gitosis e si vuole dare l'accesso allo stesso codice ma non Voglio che siano in grado di scrivere su quello che viene schierato. Per tutti gli altri usi, dovresti creare un ramo con git branch e fare tutto il tuo lavoro sul ramo. In alternativa, potresti voler clonare un repository github e poi far funzionare un gruppo all'interno della tua architettura di gitosi centrale.

Dato che il preallarme, il modo più semplice per creare un "fork" nel modo in cui descrivi, è creare un repository separato sul server gitosis. Quindi imposta un altro repository con l'altro nome, ad esempio se il tuo repository originale è [email protected]:repo1.git, ne avvierai un altro al numero [email protected]:repo1-fork.git. Aggiungi qualsiasi utente a cui desideri avere accesso.

Quindi clonare il repository: git clone [email protected]:repo1.git che inserisce una copia completa del repository in ./repo1. Per copiarlo dalla versione locale al repository biforcuto, puoi fare un git push [email protected]:repo-fork.git --mirror.

6

Il forking su Github equivale a un semplice git clone, sebbene nel caso della forcella sia più simile a git clone --mirror.

+0

domanda di aggiornamento/modifica. – jondavidjohn

+3

Per chi si chiede cosa sia un 'git clone --mirror': http://stackoverflow.com/questions/3959924 – Xavi

4

Ogni volta che si utilizza il repository git clone, è stato effettivamente creato un fork. L'unica cosa che fa la funzionalità di fork di GitHub è rendere il clone un repo GitHub, con una pagina Web e grafici e statistiche e tutte quelle cose buone.

Inoltre, quando si clona un repository, Git rende automaticamente il repository originale il repository "upstream" predefinito (il telecomando chiamato origin). Quindi, fuori dalla scatola, git pull senza argomenti dovrebbe tirare direttamente dall'originale.

+0

domanda aggiornata/modificata. – jondavidjohn

2
# clone wanted repo 
git clone https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git 

# cd into created folder 
cd ORIGINAL_REPOSITORY 

# add your remote repository as origin 
git remote add origin https://github.com/my_user/my_repository.git 

# add original repository as upstream 
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git 

# when want to pull from upstream just 
git pull upstream master 

# when want to create upstream pull-request just 
# https://git-scm.com/docs/git-request-pull 
# commit-hash - from where to start pull request 
git request-pull commit-hash [email protected]:my_user/my_repository.git